Interim update
|
@ -1,8 +1,8 @@
|
||||||
# This file is machine-generated - editing it directly is not advised
|
# This file is machine-generated - editing it directly is not advised
|
||||||
|
|
||||||
julia_version = "1.9.0"
|
julia_version = "1.9.1"
|
||||||
manifest_format = "2.0"
|
manifest_format = "2.0"
|
||||||
project_hash = "829f3e210629ef04542eb44fc4cb5acdb74d23eb"
|
project_hash = "09d33216e2516631ede3cbab2af65d3f95eb0598"
|
||||||
|
|
||||||
[[deps.Adapt]]
|
[[deps.Adapt]]
|
||||||
deps = ["LinearAlgebra", "Requires"]
|
deps = ["LinearAlgebra", "Requires"]
|
||||||
|
@ -62,9 +62,9 @@ version = "1.3.1"
|
||||||
|
|
||||||
[[deps.CodecZlib]]
|
[[deps.CodecZlib]]
|
||||||
deps = ["TranscodingStreams", "Zlib_jll"]
|
deps = ["TranscodingStreams", "Zlib_jll"]
|
||||||
git-tree-sha1 = "9c209fb7536406834aa938fb149964b985de6c83"
|
git-tree-sha1 = "02aa26a4cf76381be7f66e020a3eddeb27b0a092"
|
||||||
uuid = "944b1d66-785c-5afd-91f1-9de20f533193"
|
uuid = "944b1d66-785c-5afd-91f1-9de20f533193"
|
||||||
version = "0.7.1"
|
version = "0.7.2"
|
||||||
|
|
||||||
[[deps.CommonMark]]
|
[[deps.CommonMark]]
|
||||||
deps = ["Crayons", "JSON", "PrecompileTools", "URIs"]
|
deps = ["Crayons", "JSON", "PrecompileTools", "URIs"]
|
||||||
|
@ -74,9 +74,9 @@ version = "0.8.12"
|
||||||
|
|
||||||
[[deps.Compat]]
|
[[deps.Compat]]
|
||||||
deps = ["UUIDs"]
|
deps = ["UUIDs"]
|
||||||
git-tree-sha1 = "4e88377ae7ebeaf29a047aa1ee40826e0b708a5d"
|
git-tree-sha1 = "5ce999a19f4ca23ea484e92a1774a61b8ca4cf8e"
|
||||||
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
|
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
|
||||||
version = "4.7.0"
|
version = "4.8.0"
|
||||||
weakdeps = ["Dates", "LinearAlgebra"]
|
weakdeps = ["Dates", "LinearAlgebra"]
|
||||||
|
|
||||||
[deps.Compat.extensions]
|
[deps.Compat.extensions]
|
||||||
|
@ -89,31 +89,36 @@ version = "1.0.2+0"
|
||||||
|
|
||||||
[[deps.ConcurrentUtilities]]
|
[[deps.ConcurrentUtilities]]
|
||||||
deps = ["Serialization", "Sockets"]
|
deps = ["Serialization", "Sockets"]
|
||||||
git-tree-sha1 = "96d823b94ba8d187a6d8f0826e731195a74b90e9"
|
git-tree-sha1 = "5372dbbf8f0bdb8c700db5367132925c0771ef7e"
|
||||||
uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb"
|
uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb"
|
||||||
version = "2.2.0"
|
version = "2.2.1"
|
||||||
|
|
||||||
[[deps.Crayons]]
|
[[deps.Crayons]]
|
||||||
git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15"
|
git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15"
|
||||||
uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f"
|
uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f"
|
||||||
version = "4.1.1"
|
version = "4.1.1"
|
||||||
|
|
||||||
|
[[deps.DBInterface]]
|
||||||
|
git-tree-sha1 = "9b0dc525a052b9269ccc5f7f04d5b3639c65bca5"
|
||||||
|
uuid = "a10d1c49-ce27-4219-8d33-6db1a4562965"
|
||||||
|
version = "2.5.0"
|
||||||
|
|
||||||
[[deps.DataAPI]]
|
[[deps.DataAPI]]
|
||||||
git-tree-sha1 = "8da84edb865b0b5b0100c0666a9bc9a0b71c553c"
|
git-tree-sha1 = "8da84edb865b0b5b0100c0666a9bc9a0b71c553c"
|
||||||
uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
|
uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
|
||||||
version = "1.15.0"
|
version = "1.15.0"
|
||||||
|
|
||||||
[[deps.DataFrames]]
|
[[deps.DataFrames]]
|
||||||
deps = ["Compat", "DataAPI", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SentinelArrays", "SnoopPrecompile", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"]
|
deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"]
|
||||||
git-tree-sha1 = "aa51303df86f8626a962fccb878430cdb0a97eee"
|
git-tree-sha1 = "04c738083f29f86e62c8afc341f0967d8717bdb8"
|
||||||
uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
|
uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
|
||||||
version = "1.5.0"
|
version = "1.6.1"
|
||||||
|
|
||||||
[[deps.DataStructures]]
|
[[deps.DataStructures]]
|
||||||
deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
|
deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
|
||||||
git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0"
|
git-tree-sha1 = "cf25ccb972fec4e4817764d01c82386ae94f77b4"
|
||||||
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
|
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
|
||||||
version = "0.18.13"
|
version = "0.18.14"
|
||||||
|
|
||||||
[[deps.DataValueInterfaces]]
|
[[deps.DataValueInterfaces]]
|
||||||
git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
|
git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
|
||||||
|
@ -168,9 +173,9 @@ uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4"
|
||||||
version = "0.1.9"
|
version = "0.1.9"
|
||||||
|
|
||||||
[[deps.ExprTools]]
|
[[deps.ExprTools]]
|
||||||
git-tree-sha1 = "c1d06d129da9f55715c6c212866f5b1bddc5fa00"
|
git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec"
|
||||||
uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04"
|
uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04"
|
||||||
version = "0.1.9"
|
version = "0.1.10"
|
||||||
|
|
||||||
[[deps.EzXML]]
|
[[deps.EzXML]]
|
||||||
deps = ["Printf", "XML2_jll"]
|
deps = ["Printf", "XML2_jll"]
|
||||||
|
@ -193,12 +198,6 @@ version = "0.9.20"
|
||||||
[[deps.FileWatching]]
|
[[deps.FileWatching]]
|
||||||
uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
|
uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
|
||||||
|
|
||||||
[[deps.Formatting]]
|
|
||||||
deps = ["Printf"]
|
|
||||||
git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8"
|
|
||||||
uuid = "59287772-0a20-5a39-b81b-1366585eb4c0"
|
|
||||||
version = "0.4.2"
|
|
||||||
|
|
||||||
[[deps.Future]]
|
[[deps.Future]]
|
||||||
deps = ["Random"]
|
deps = ["Random"]
|
||||||
uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820"
|
uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820"
|
||||||
|
@ -257,9 +256,9 @@ version = "1.3.1"
|
||||||
|
|
||||||
[[deps.HTTP]]
|
[[deps.HTTP]]
|
||||||
deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"]
|
deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"]
|
||||||
git-tree-sha1 = "2613d054b0e18a3dea99ca1594e9a3960e025da4"
|
git-tree-sha1 = "cb56ccdd481c0dd7f975ad2b3b62d9eda088f7e2"
|
||||||
uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
|
uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
|
||||||
version = "1.9.7"
|
version = "1.9.14"
|
||||||
|
|
||||||
[[deps.HttpCommon]]
|
[[deps.HttpCommon]]
|
||||||
deps = ["Dates", "Nullables", "Test", "URIParser"]
|
deps = ["Dates", "Nullables", "Test", "URIParser"]
|
||||||
|
@ -339,6 +338,12 @@ git-tree-sha1 = "5b62d93f2582b09e469b3099d839c2d2ebf5066d"
|
||||||
uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
|
uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
|
||||||
version = "1.13.1"
|
version = "1.13.1"
|
||||||
|
|
||||||
|
[[deps.JWTs]]
|
||||||
|
deps = ["Base64", "Downloads", "JSON", "MbedTLS", "Random"]
|
||||||
|
git-tree-sha1 = "a1f3ded6307ef85cc18dec93d9b993814eb4c1a0"
|
||||||
|
uuid = "d850fbd6-035d-5a70-a269-1ca2e636ac6c"
|
||||||
|
version = "0.2.2"
|
||||||
|
|
||||||
[[deps.JuliaFormatter]]
|
[[deps.JuliaFormatter]]
|
||||||
deps = ["CSTParser", "CommonMark", "DataStructures", "Glob", "Pkg", "PrecompileTools", "Tokenize"]
|
deps = ["CSTParser", "CommonMark", "DataStructures", "Glob", "Pkg", "PrecompileTools", "Tokenize"]
|
||||||
git-tree-sha1 = "60567b51bd9e1e19ae2fd8a54dcd6bc5994727f0"
|
git-tree-sha1 = "60567b51bd9e1e19ae2fd8a54dcd6bc5994727f0"
|
||||||
|
@ -386,10 +391,10 @@ deps = ["Base64", "NetworkOptions", "Printf", "SHA"]
|
||||||
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
|
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
|
||||||
|
|
||||||
[[deps.LibPQ]]
|
[[deps.LibPQ]]
|
||||||
deps = ["CEnum", "Dates", "Decimals", "DocStringExtensions", "FileWatching", "Infinity", "Intervals", "IterTools", "LayerDicts", "LibPQ_jll", "Libdl", "Memento", "OffsetArrays", "SQLStrings", "Tables", "TimeZones", "UTCDateTimes"]
|
deps = ["CEnum", "DBInterface", "Dates", "Decimals", "DocStringExtensions", "FileWatching", "Infinity", "Intervals", "IterTools", "LayerDicts", "LibPQ_jll", "Libdl", "Memento", "OffsetArrays", "SQLStrings", "Tables", "TimeZones", "UTCDateTimes"]
|
||||||
git-tree-sha1 = "114d9d239ab8e1251354ad6bb97ed38622133114"
|
git-tree-sha1 = "d8967f68674aa9ad4b9b3df114e3842f269ac147"
|
||||||
uuid = "194296ae-ab2e-5f79-8cd4-7183a0a5a0d1"
|
uuid = "194296ae-ab2e-5f79-8cd4-7183a0a5a0d1"
|
||||||
version = "1.15.1"
|
version = "1.16.0"
|
||||||
|
|
||||||
[[deps.LibPQ_jll]]
|
[[deps.LibPQ_jll]]
|
||||||
deps = ["Artifacts", "JLLWrappers", "Kerberos_krb5_jll", "Libdl", "OpenSSL_jll", "Pkg"]
|
deps = ["Artifacts", "JLLWrappers", "Kerberos_krb5_jll", "Libdl", "OpenSSL_jll", "Pkg"]
|
||||||
|
@ -519,9 +524,9 @@ version = "1.0.0"
|
||||||
|
|
||||||
[[deps.OffsetArrays]]
|
[[deps.OffsetArrays]]
|
||||||
deps = ["Adapt"]
|
deps = ["Adapt"]
|
||||||
git-tree-sha1 = "82d7c9e310fe55aa54996e6f7f94674e2a38fcb4"
|
git-tree-sha1 = "2ac17d29c523ce1cd38e27785a7d23024853a4bb"
|
||||||
uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881"
|
uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881"
|
||||||
version = "1.12.9"
|
version = "1.12.10"
|
||||||
|
|
||||||
[[deps.OpenBLAS_jll]]
|
[[deps.OpenBLAS_jll]]
|
||||||
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
|
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
|
||||||
|
@ -552,9 +557,9 @@ uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
|
||||||
version = "0.5.5+0"
|
version = "0.5.5+0"
|
||||||
|
|
||||||
[[deps.OrderedCollections]]
|
[[deps.OrderedCollections]]
|
||||||
git-tree-sha1 = "d321bf2de576bf25ec4d3e4360faca399afca282"
|
git-tree-sha1 = "2e73fe17cac3c62ad1aebe70d44c963c3cfdc3e3"
|
||||||
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
|
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
|
||||||
version = "1.6.0"
|
version = "1.6.2"
|
||||||
|
|
||||||
[[deps.Parameters]]
|
[[deps.Parameters]]
|
||||||
deps = ["OrderedCollections", "UnPack"]
|
deps = ["OrderedCollections", "UnPack"]
|
||||||
|
@ -564,9 +569,9 @@ version = "0.12.3"
|
||||||
|
|
||||||
[[deps.Parsers]]
|
[[deps.Parsers]]
|
||||||
deps = ["Dates", "PrecompileTools", "UUIDs"]
|
deps = ["Dates", "PrecompileTools", "UUIDs"]
|
||||||
git-tree-sha1 = "4b2e829ee66d4218e0cef22c0a64ee37cf258c29"
|
git-tree-sha1 = "716e24b21538abc91f6205fd1d8363f39b442851"
|
||||||
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
|
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
|
||||||
version = "2.7.1"
|
version = "2.7.2"
|
||||||
|
|
||||||
[[deps.Pkg]]
|
[[deps.Pkg]]
|
||||||
deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
|
deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
|
||||||
|
@ -608,10 +613,10 @@ uuid = "21216c6a-2e73-6563-6e65-726566657250"
|
||||||
version = "1.4.0"
|
version = "1.4.0"
|
||||||
|
|
||||||
[[deps.PrettyTables]]
|
[[deps.PrettyTables]]
|
||||||
deps = ["Crayons", "Formatting", "LaTeXStrings", "Markdown", "Reexport", "StringManipulation", "Tables"]
|
deps = ["Crayons", "LaTeXStrings", "Markdown", "Printf", "Reexport", "StringManipulation", "Tables"]
|
||||||
git-tree-sha1 = "213579618ec1f42dea7dd637a42785a608b1ea9c"
|
git-tree-sha1 = "ee094908d720185ddbdc58dbe0c1cbe35453ec7a"
|
||||||
uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d"
|
uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d"
|
||||||
version = "2.2.4"
|
version = "2.2.7"
|
||||||
|
|
||||||
[[deps.Printf]]
|
[[deps.Printf]]
|
||||||
deps = ["Unicode"]
|
deps = ["Unicode"]
|
||||||
|
@ -701,12 +706,6 @@ git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1"
|
||||||
uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7"
|
uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
|
|
||||||
[[deps.SnoopPrecompile]]
|
|
||||||
deps = ["Preferences"]
|
|
||||||
git-tree-sha1 = "e760a70afdcd461cf01a575947738d359234665c"
|
|
||||||
uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c"
|
|
||||||
version = "1.0.3"
|
|
||||||
|
|
||||||
[[deps.Sockets]]
|
[[deps.Sockets]]
|
||||||
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
|
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
|
||||||
|
|
||||||
|
@ -739,9 +738,9 @@ version = "1.9.0"
|
||||||
|
|
||||||
[[deps.StringEncodings]]
|
[[deps.StringEncodings]]
|
||||||
deps = ["Libiconv_jll"]
|
deps = ["Libiconv_jll"]
|
||||||
git-tree-sha1 = "33c0da881af3248dafefb939a21694b97cfece76"
|
git-tree-sha1 = "b765e46ba27ecf6b44faf70df40c57aa3a547dcb"
|
||||||
uuid = "69024149-9ee7-55f6-a4c4-859efe599b68"
|
uuid = "69024149-9ee7-55f6-a4c4-859efe599b68"
|
||||||
version = "0.3.6"
|
version = "0.3.7"
|
||||||
|
|
||||||
[[deps.StringManipulation]]
|
[[deps.StringManipulation]]
|
||||||
git-tree-sha1 = "46da2434b41f41ac3594ee9816ce5541c6096123"
|
git-tree-sha1 = "46da2434b41f41ac3594ee9816ce5541c6096123"
|
||||||
|
@ -765,10 +764,10 @@ uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
|
||||||
version = "1.0.3"
|
version = "1.0.3"
|
||||||
|
|
||||||
[[deps.TableShowUtils]]
|
[[deps.TableShowUtils]]
|
||||||
deps = ["DataValues", "Dates", "JSON", "Markdown", "Test"]
|
deps = ["DataValues", "Dates", "JSON", "Markdown", "Unicode"]
|
||||||
git-tree-sha1 = "14c54e1e96431fb87f0d2f5983f090f1b9d06457"
|
git-tree-sha1 = "2a41a3dedda21ed1184a47caab56ed9304e9a038"
|
||||||
uuid = "5e66a065-1f0a-5976-b372-e0b8c017ca10"
|
uuid = "5e66a065-1f0a-5976-b372-e0b8c017ca10"
|
||||||
version = "0.2.5"
|
version = "0.2.6"
|
||||||
|
|
||||||
[[deps.TableTraits]]
|
[[deps.TableTraits]]
|
||||||
deps = ["IteratorInterfaceExtensions"]
|
deps = ["IteratorInterfaceExtensions"]
|
||||||
|
@ -810,9 +809,9 @@ version = "1.0.1"
|
||||||
|
|
||||||
[[deps.TimeZones]]
|
[[deps.TimeZones]]
|
||||||
deps = ["Dates", "Downloads", "InlineStrings", "LazyArtifacts", "Mocking", "Printf", "RecipesBase", "Scratch", "Unicode"]
|
deps = ["Dates", "Downloads", "InlineStrings", "LazyArtifacts", "Mocking", "Printf", "RecipesBase", "Scratch", "Unicode"]
|
||||||
git-tree-sha1 = "cdaa0c2a4449724aded839550eca7d7240bb6938"
|
git-tree-sha1 = "5b347464bdac31eccfdbe1504d9484c31645cafc"
|
||||||
uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53"
|
uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53"
|
||||||
version = "1.10.0"
|
version = "1.11.0"
|
||||||
|
|
||||||
[[deps.Tokenize]]
|
[[deps.Tokenize]]
|
||||||
git-tree-sha1 = "90538bf898832b6ebd900fa40f223e695970e3a5"
|
git-tree-sha1 = "90538bf898832b6ebd900fa40f223e695970e3a5"
|
||||||
|
@ -880,7 +879,7 @@ version = "1.2.13+0"
|
||||||
[[deps.libblastrampoline_jll]]
|
[[deps.libblastrampoline_jll]]
|
||||||
deps = ["Artifacts", "Libdl"]
|
deps = ["Artifacts", "Libdl"]
|
||||||
uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
|
uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
|
||||||
version = "5.7.0+0"
|
version = "5.8.0+0"
|
||||||
|
|
||||||
[[deps.nghttp2_jll]]
|
[[deps.nghttp2_jll]]
|
||||||
deps = ["Artifacts", "Libdl"]
|
deps = ["Artifacts", "Libdl"]
|
||||||
|
|
|
@ -4,6 +4,7 @@ authors = ["a-ill <a_ill@outlook.com>"]
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
|
||||||
CSVFiles = "5d742f6a-9f54-50ce-8119-2520741973ca"
|
CSVFiles = "5d742f6a-9f54-50ce-8119-2520741973ca"
|
||||||
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
|
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
|
||||||
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
|
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
|
||||||
|
@ -15,6 +16,7 @@ GenieSession = "03cc5b98-4f21-4eb6-99f2-22eced81f962"
|
||||||
HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3"
|
HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3"
|
||||||
Inflector = "6d011eab-0732-4556-8808-e463c76bf3b6"
|
Inflector = "6d011eab-0732-4556-8808-e463c76bf3b6"
|
||||||
JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
|
JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
|
||||||
|
JWTs = "d850fbd6-035d-5a70-a269-1ca2e636ac6c"
|
||||||
LibPQ = "194296ae-ab2e-5f79-8cd4-7183a0a5a0d1"
|
LibPQ = "194296ae-ab2e-5f79-8cd4-7183a0a5a0d1"
|
||||||
Logging = "56ddb016-857b-54e1-b83d-db4d58db5568"
|
Logging = "56ddb016-857b-54e1-b83d-db4d58db5568"
|
||||||
Parameters = "d96e819e-fc66-5662-9728-84c9c7592b0a"
|
Parameters = "d96e819e-fc66-5662-9728-84c9c7592b0a"
|
||||||
|
|
|
@ -25,7 +25,11 @@
|
||||||
<!--<loadscreen-component></loadscreen-component>-->
|
<!--<loadscreen-component></loadscreen-component>-->
|
||||||
|
|
||||||
<div id="content">
|
<div id="content">
|
||||||
<navbar-component></navbar-component>
|
<% if authenticated() %>
|
||||||
|
<navbar-logged></navbar-logged>
|
||||||
|
<% else %>
|
||||||
|
<navbar-not-logged></navbar-not-logged>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<%@yield%>
|
<%@yield%>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,193 @@
|
||||||
|
module AuthenticationController
|
||||||
|
|
||||||
|
using Genie, Genie.Requests, Genie.Renderer, Genie.Renderer.Json, Genie.Renderer.Html, GenieSession, SearchLight, GenieAuthentication, GenieAuthorisation
|
||||||
|
using Logging
|
||||||
|
using JSON3, Random, Base64, HTTP, Dates
|
||||||
|
using Server.Users, Server.EmailSupport, Server.TemplateEditor, Server.Cookies, Server.DatabaseSupport
|
||||||
|
import Server.TemplateEditor.generate_layout_html
|
||||||
|
import Server.DatabaseSupport.select_from_table
|
||||||
|
using JWTs
|
||||||
|
|
||||||
|
#---Helpers----------------------------------------------------------
|
||||||
|
|
||||||
|
const keyset = JWKSet("https://www.googleapis.com/oauth2/v3/certs")
|
||||||
|
refresh!(keyset)
|
||||||
|
|
||||||
|
current_user() = findone(Users.User, id = get_authentication())
|
||||||
|
|
||||||
|
function send_signup_confirmation_email(receiver,confirmation_code)
|
||||||
|
subject,message = ["Sign-up confirmation","Hello!\r\nYour confirmation code is "*confirmation_code*"\r\n"]
|
||||||
|
message = "Content-Type: text/html\r\n"*message
|
||||||
|
return send_email(receiver,subject,message)
|
||||||
|
end
|
||||||
|
|
||||||
|
function register_google()
|
||||||
|
jws = rawpayload()
|
||||||
|
jws_split = split(jws,".")
|
||||||
|
payload_encoded = jws_split[2]
|
||||||
|
rem = length(payload_encoded)%4
|
||||||
|
if rem!= 0
|
||||||
|
payload_encoded = payload_encoded* "="^(4-rem)
|
||||||
|
end
|
||||||
|
payload = String(base64decode(payload_encoded))
|
||||||
|
json = JSON3.read(payload)
|
||||||
|
sub = json[:sub]
|
||||||
|
email = json[:email]
|
||||||
|
user = findone(User, email = email)
|
||||||
|
if isnothing(user)
|
||||||
|
# ENABLE WHEN IN PRODUCTION
|
||||||
|
user = User(email = email,google_id = sub) |> save!
|
||||||
|
authenticate(user.id, GenieSession.session(params()))
|
||||||
|
assign_role(user, findone(Role, name = "free"))
|
||||||
|
save(user)
|
||||||
|
return true
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
jwt = JWT(payload="")
|
||||||
|
jwt.header = jws_split[1]
|
||||||
|
jwt.payload = jws_split[2]
|
||||||
|
jwt.signature = jws_split[3]
|
||||||
|
if validate!(jwt, keyset)
|
||||||
|
if user.google_id==""
|
||||||
|
user.google_id = sub
|
||||||
|
save(user)
|
||||||
|
authenticate(user.id, GenieSession.session(params()))
|
||||||
|
return 3
|
||||||
|
elseif user.google_id==sub
|
||||||
|
authenticate(user.id, GenieSession.session(params()))
|
||||||
|
return 3
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function get_locale()
|
||||||
|
data = payload()
|
||||||
|
if :locale in keys(data)
|
||||||
|
return data[:locale]
|
||||||
|
else
|
||||||
|
return "en"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
const auth_info = Dict(
|
||||||
|
"en" => Dict(
|
||||||
|
:title => "LibSoc - Login/Sign Up",
|
||||||
|
:description => ""
|
||||||
|
),
|
||||||
|
"ru" => Dict(
|
||||||
|
:title => "LibSoc - Логин/Регистрация",
|
||||||
|
:description => ""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
#---Routing functions---------------------------------------------------
|
||||||
|
|
||||||
|
controller = "authentication"
|
||||||
|
const dict_layouts = Dict(
|
||||||
|
:auth => generate_layout_html("main",controller,"auth",libraries=["GoogleAuth"]),
|
||||||
|
:profile => generate_layout_html("main",controller,"profile"),
|
||||||
|
:email_confirmation => generate_layout_html("main",controller,"email_confirmation"),
|
||||||
|
)
|
||||||
|
|
||||||
|
function auth()
|
||||||
|
locale = get_locale()
|
||||||
|
set_cookies(params())
|
||||||
|
html(:authentication,:auth, layout = dict_layouts[:auth], context = @__MODULE__,
|
||||||
|
title = auth_info[locale][:title],
|
||||||
|
description = auth_info[locale][:description]
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
function profile()
|
||||||
|
set_cookies(params())
|
||||||
|
html(:authentication,:profile, layout = dict_layouts[:profile], context = @__MODULE__,
|
||||||
|
title = "Chiron | Profile",
|
||||||
|
description = ""
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
function email_confirmation()
|
||||||
|
set_cookies(params())
|
||||||
|
html(:authentication,:email_confirmation, layout = dict_layouts[:email_confirmation], context = @__MODULE__,
|
||||||
|
title = "Chiron | Email Confirmation",
|
||||||
|
description = ""
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
function confirm_email()
|
||||||
|
code = rawpayload()
|
||||||
|
user = current_user()
|
||||||
|
if code==user.confirmation_code
|
||||||
|
GenieAuthorisation.Relationship!(user, findone(Role, name = "unconfirmed")) |> delete
|
||||||
|
assign_role(user, findone(Role, name = "free"))
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function register()
|
||||||
|
data = jsonpayload()
|
||||||
|
user = findone(User, email = data["email"])
|
||||||
|
if isnothing(user)
|
||||||
|
user = User(email = data["email"],
|
||||||
|
password = data["password"] |> Users.hash_password,
|
||||||
|
) |> save!
|
||||||
|
authenticate(user.id, GenieSession.session(params()))
|
||||||
|
assign_role(user, findone(Role, name = "free"))
|
||||||
|
confirmation_code = randstring('0':'9', 5)
|
||||||
|
user.confirmation_code = confirmation_code
|
||||||
|
save(user)
|
||||||
|
#send_signup_confirmation_email(data["email"],confirmation_code)
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function login()
|
||||||
|
data = jsonpayload()
|
||||||
|
user = findone(User, email = data["email"])
|
||||||
|
if isnothing(user)
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
if (user.password==Users.hash_password(data["password"]))
|
||||||
|
authenticate(user.id, GenieSession.session(params()))
|
||||||
|
return 2
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function logout()
|
||||||
|
deauthenticate(GenieSession.session(params()))
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
function change_user()
|
||||||
|
data = jsonpayload()
|
||||||
|
user = findone(Users.User, id = get_authentication())
|
||||||
|
for (field,value) in data
|
||||||
|
setfield!(user, Symbol(field), value)
|
||||||
|
end
|
||||||
|
save(user)
|
||||||
|
return JSON3.write(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
function get_user()
|
||||||
|
try
|
||||||
|
user = findone(Users.User, id = get_authentication())
|
||||||
|
return JSON3.write(user)
|
||||||
|
catch ex
|
||||||
|
return JSON3.write(false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,2 @@
|
||||||
|
<auth-component></auth-component>
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
<confirmation-component></confirmation-component>
|
|
@ -0,0 +1,2 @@
|
||||||
|
|
||||||
|
<profile-component></profile-component>
|
|
@ -1,6 +1,6 @@
|
||||||
module BasicController
|
module BasicController
|
||||||
|
|
||||||
using Genie, Genie.Renderer, Genie.Renderer.Html, Genie.Requests
|
using Genie, Genie.Renderer, Genie.Renderer.Html, Genie.Requests, GenieAuthentication
|
||||||
using JSON3
|
using JSON3
|
||||||
using SearchLight
|
using SearchLight
|
||||||
using Server.DatabaseSupport, Server.TemplateEditor
|
using Server.DatabaseSupport, Server.TemplateEditor
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module CommunesController
|
module CommunesController
|
||||||
|
|
||||||
using Genie, Genie.Renderer, Genie.Renderer.Html, Genie.Requests
|
using Genie, Genie.Renderer, Genie.Renderer.Html, Genie.Requests, GenieAuthentication
|
||||||
using JSON3
|
using JSON3
|
||||||
using SearchLight
|
using SearchLight
|
||||||
using Server.DatabaseSupport, Server.TemplateEditor
|
using Server.DatabaseSupport, Server.TemplateEditor
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module CooperativesController
|
module CooperativesController
|
||||||
|
|
||||||
using Genie, Genie.Renderer, Genie.Renderer.Html, Genie.Requests
|
using Genie, Genie.Renderer, Genie.Renderer.Html, Genie.Requests, GenieAuthentication
|
||||||
using JSON3
|
using JSON3
|
||||||
using SearchLight
|
using SearchLight
|
||||||
using Server.DatabaseSupport, Server.TemplateEditor
|
using Server.DatabaseSupport, Server.TemplateEditor
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
module GroupsController
|
module GroupsController
|
||||||
|
|
||||||
using Genie, Genie.Renderer, Genie.Renderer.Html, Genie.Requests
|
using Genie, Genie.Renderer, Genie.Renderer.Html, Genie.Requests, GenieAuthentication
|
||||||
using JSON3
|
using JSON3
|
||||||
using SearchLight
|
using SearchLight
|
||||||
using Server.DatabaseSupport, Server.TemplateEditor
|
using Server.DatabaseSupport, Server.TemplateEditor
|
||||||
|
import Server.DatabaseSupport: select_from_table
|
||||||
|
|
||||||
controller = "groups"
|
controller = "groups"
|
||||||
dict_layouts = Dict(
|
dict_layouts = Dict(
|
||||||
|
@ -56,4 +57,13 @@ function groups_add_post()
|
||||||
insert_into_table("groups_requests",data)
|
insert_into_table("groups_requests",data)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function get_user_groups()
|
||||||
|
user_id = get_authentication()
|
||||||
|
data = select_from_table("groups" => ["*"],
|
||||||
|
where_data = ["user_id" => user_id])
|
||||||
|
ns = names(data)
|
||||||
|
data_dict = map(x -> Dict(zip(ns,values(x))),eachrow(data))
|
||||||
|
return JSON3.write(data_dict)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module PartiesController
|
module PartiesController
|
||||||
|
|
||||||
using Genie, Genie.Renderer, Genie.Renderer.Html, Genie.Requests
|
using Genie, Genie.Renderer, Genie.Renderer.Html, Genie.Requests, GenieAuthentication
|
||||||
using JSON3
|
using JSON3
|
||||||
using SearchLight
|
using SearchLight
|
||||||
using Server.DatabaseSupport, Server.TemplateEditor
|
using Server.DatabaseSupport, Server.TemplateEditor
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module PartnersController
|
module PartnersController
|
||||||
|
|
||||||
using Genie, Genie.Renderer, Genie.Renderer.Html, Genie.Requests
|
using Genie, Genie.Renderer, Genie.Renderer.Html, Genie.Requests, GenieAuthentication
|
||||||
using JSON3
|
using JSON3
|
||||||
using SearchLight
|
using SearchLight
|
||||||
using Server.DatabaseSupport, Server.TemplateEditor
|
using Server.DatabaseSupport, Server.TemplateEditor
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
module Users
|
||||||
|
|
||||||
|
using SearchLight, SearchLight.Validation, Server.UsersValidator
|
||||||
|
using SHA
|
||||||
|
using Random
|
||||||
|
|
||||||
|
export User
|
||||||
|
|
||||||
|
Base.@kwdef mutable struct User <: AbstractModel
|
||||||
|
### FIELDS
|
||||||
|
id::DbId = DbId()
|
||||||
|
email::String = ""
|
||||||
|
password::String = ""
|
||||||
|
google_id::String = ""
|
||||||
|
confirmation_code::String = ""
|
||||||
|
verified::Bool = false
|
||||||
|
end
|
||||||
|
|
||||||
|
Validation.validator(u::Type{User}) = ModelValidator([
|
||||||
|
ValidationRule(:email, UsersValidator.not_empty),
|
||||||
|
ValidationRule(:email, UsersValidator.unique),
|
||||||
|
ValidationRule(:password, UsersValidator.not_empty)
|
||||||
|
])
|
||||||
|
|
||||||
|
function hash_password(password::String)
|
||||||
|
sha256(password) |> bytes2hex
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,21 @@
|
||||||
|
module UsersValidator
|
||||||
|
|
||||||
|
using SearchLight, SearchLight.Validation, SearchLight.QueryBuilder
|
||||||
|
|
||||||
|
function not_empty(field::Symbol, m::T, args::Vararg{Any})::ValidationResult where {T<:AbstractModel}
|
||||||
|
isempty(getfield(m, field)) && return ValidationResult(invalid, :not_empty, "should not be empty")
|
||||||
|
|
||||||
|
ValidationResult(valid)
|
||||||
|
end
|
||||||
|
|
||||||
|
function unique(field::Symbol, m::T, args::Vararg{Any})::ValidationResult where {T<:AbstractModel}
|
||||||
|
ispersisted(m) && return ValidationResult(valid) # don't validate updates
|
||||||
|
|
||||||
|
if SearchLight.count(typeof(m), where("$field = ?", getfield(m, field))) > 0
|
||||||
|
return ValidationResult(invalid, :unique, "is already used")
|
||||||
|
end
|
||||||
|
|
||||||
|
ValidationResult(valid)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
label {
|
||||||
|
font-size: 1.3rem;
|
||||||
|
font-family: var(--sans-serif);
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-pane {
|
||||||
|
position: relative;
|
||||||
|
padding: 3.4rem;
|
||||||
|
padding-top: 3.4rem;
|
||||||
|
padding-bottom: 3.4rem;
|
||||||
|
width: 30rem;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-title {
|
||||||
|
position: relative;
|
||||||
|
top: 0.2rem;
|
||||||
|
margin-bottom: 2.7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-label {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.authEmailInput, .authPasswordInput {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 0.34rem;
|
||||||
|
color: #353535;
|
||||||
|
height: 2.73rem;
|
||||||
|
padding-left: 0.34rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.authEmailInput {
|
||||||
|
margin-bottom: 0.682rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-button {
|
||||||
|
margin-top: 1.365rem;
|
||||||
|
height: 3.412rem;
|
||||||
|
width: 100%;
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
font-size: 1.3rem;
|
||||||
|
color: white;
|
||||||
|
background-color: var(--red);
|
||||||
|
border-color: var(--red);
|
||||||
|
border-radius: 0.512rem;
|
||||||
|
filter: drop-shadow(0.068rem 0.136rem 0.068rem rgb(0 0 0 / 0.4));
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-button:active {
|
||||||
|
background-color: var(--darker-pink);
|
||||||
|
}
|
||||||
|
|
||||||
|
#email-msg,#password-msg {
|
||||||
|
display: inline;
|
||||||
|
color:red;
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-line {
|
||||||
|
margin-top: 1.5rem;
|
||||||
|
width: 100%;
|
||||||
|
height: 0.07rem;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 0.1rem;
|
||||||
|
background: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-methods-group {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: auto ; /*auto auto*/
|
||||||
|
justify-content: center;
|
||||||
|
gap: 2.7rem;
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-methods-group img {
|
||||||
|
height: auto;
|
||||||
|
width: 3.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-methods-group> div {
|
||||||
|
position: relative;
|
||||||
|
border-radius: 6.8rem;
|
||||||
|
width: 3.4rem;
|
||||||
|
height: 3.4rem;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#google-btn {
|
||||||
|
position: absolute;
|
||||||
|
top: -0.8rem;
|
||||||
|
left: -0.8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#google-logo {
|
||||||
|
position: relative;
|
||||||
|
background: white;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#google-btn-wrapper {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
#google-btn div {
|
||||||
|
position: absolute;
|
||||||
|
height: 5rem;
|
||||||
|
width: 5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#google-btn iframe {
|
||||||
|
position: absolute;
|
||||||
|
height: 10rem;
|
||||||
|
width: 10rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.password-field {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.eye-icon {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
cursor: pointer;
|
||||||
|
opacity: 0.25;
|
||||||
|
top: 2.6rem;
|
||||||
|
right: 0.8rem;
|
||||||
|
width: 1.7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.eye-icon * {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#forgot-password {
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
height: 2rem;
|
||||||
|
color:#5f5f5f;
|
||||||
|
margin-left: auto;
|
||||||
|
width: max-content;
|
||||||
|
font-family: var(--sans-serif);
|
||||||
|
font-size: 1.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#remember-me {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 1rem;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#remember-me-checkbox {
|
||||||
|
min-height: 1.5rem;
|
||||||
|
min-width: 1.5rem;
|
||||||
|
flex: 0;
|
||||||
|
accent-color: var(--gray);
|
||||||
|
}
|
||||||
|
|
||||||
|
#remember-me label {
|
||||||
|
position: relative;
|
||||||
|
margin-top: -0.2rem;
|
||||||
|
color: #5f5f5f;
|
||||||
|
}
|
|
@ -1,21 +1,7 @@
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--light-blue:hsl(195, 67%, 95%);
|
--red:#c52a28;
|
||||||
--darker-pink:hsl(344, 60%, 47%);
|
--gray: #5B6970;
|
||||||
--pink:hsl(344, 73%, 57%);
|
|
||||||
--dark-green:hsl(176, 63%, 25%);
|
|
||||||
--green:hsl(147, 33%, 60%);
|
|
||||||
--orange:hsl(30, 97%, 72%);
|
|
||||||
--light-orange: hsl(19, 76%, 72%);
|
|
||||||
--dark-brown:hsl(23, 47%, 20%);
|
|
||||||
--brown:hsl(23, 47%, 30%);
|
|
||||||
--light-brown: hsl(23, 47%, 50%);
|
|
||||||
--dark-pink:hsl(343, 39%, 16%);
|
|
||||||
--red:hsl(359, 72%, 61%);
|
|
||||||
--dark-blue:hsl(217, 25%, 16%);
|
|
||||||
--grey-blue:hsl(223, 13%, 22%);
|
|
||||||
--cream:hsl(34, 43%, 90%);
|
|
||||||
--dark-cream:hsl(33, 26%, 84%);
|
|
||||||
--sans-serif: "OpenSans";
|
--sans-serif: "OpenSans";
|
||||||
--serif: "Lora";
|
--serif: "Lora";
|
||||||
}
|
}
|
||||||
|
@ -48,12 +34,10 @@ body {
|
||||||
|
|
||||||
#content {
|
#content {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: flex;
|
display: grid;
|
||||||
flex-direction: column;
|
grid-template-rows: max-content auto max-content;
|
||||||
justify-content: space-between;
|
|
||||||
height: 100%;
|
height: 100%;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
flex-grow: 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---Fonts---------------------------------------------------------*/
|
/*---Fonts---------------------------------------------------------*/
|
||||||
|
@ -475,9 +459,8 @@ input[type=number]::-webkit-outer-spin-button {
|
||||||
|
|
||||||
.pane {
|
.pane {
|
||||||
background: white;
|
background: white;
|
||||||
border: 0;
|
border: 0.1rem solid rgb(187, 187, 187);
|
||||||
border-radius: 0.635rem;
|
border-radius: 0.635rem;
|
||||||
box-shadow: 0 0 0.314rem rgb(187, 187, 187);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.pane-container {
|
.pane-container {
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
#notifications-div>button {
|
||||||
|
cursor: pointer;
|
||||||
|
margin-left: 0.341rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifications-div>:nth-child(1) {
|
||||||
|
width: 1.706rem;
|
||||||
|
height: 1.706rem;
|
||||||
|
background-color: #ccc;
|
||||||
|
border-radius: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifications-div>:nth-child(2) {
|
||||||
|
width: 2.047rem;
|
||||||
|
height: 2.047rem;
|
||||||
|
background-color: #ccc;
|
||||||
|
border-radius: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifications-div>:nth-child(3) {
|
||||||
|
width: 2.389rem;
|
||||||
|
height: 2.389rem;
|
||||||
|
background-color: #ccc;
|
||||||
|
border-radius: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifications-div>button>div {
|
||||||
|
cursor: pointer;
|
||||||
|
margin: auto;
|
||||||
|
background-color: white;
|
||||||
|
border-radius: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifications-div>:nth-child(1)>div {
|
||||||
|
width: 1.228rem;
|
||||||
|
height: 1.228rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifications-div>:nth-child(2)>div {
|
||||||
|
width: 1.57rem;
|
||||||
|
height: 1.57rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifications-div>:nth-child(3)>div {
|
||||||
|
width: 1.843rem;
|
||||||
|
height: 1.843rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
|
@ -0,0 +1,160 @@
|
||||||
|
|
||||||
|
import {getData, sendData} from "/js/libraries/serverTools.js"
|
||||||
|
|
||||||
|
export function getUser(user,callbackOuter) {
|
||||||
|
let callback = function(response) {
|
||||||
|
Object.assign(user,JSON.parse(response))
|
||||||
|
if(callbackOuter!=undefined) {
|
||||||
|
callbackOuter()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getData("/xx/get-user",callback)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function changeUser(name,value,user) {
|
||||||
|
if (user[name]!=value && user[name]!=undefined) {
|
||||||
|
user[name] = value
|
||||||
|
let data = new Object();
|
||||||
|
data[name] = value
|
||||||
|
sendData("/xx/change-user",data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function changePasswordVisibility(button) {
|
||||||
|
let input = button.previousElementSibling
|
||||||
|
let type = input.type
|
||||||
|
if (type=="text") {
|
||||||
|
input.type = "password";
|
||||||
|
button.style.opacity = 0.25
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
input.type = "text";
|
||||||
|
button.style.opacity = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function checkEmail(email,msg) {
|
||||||
|
if (email.includes("@")) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
msg.innerHTML = "must contain '@'"
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function checkPassword(password,msg) {
|
||||||
|
let passwordLength = password.length
|
||||||
|
if (passwordLength<8) {
|
||||||
|
msg.innerHTML = "must be 8 characters"
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
let numNumbers = password.match(/\d/g)?.length || 0;
|
||||||
|
if (numNumbers<1) {
|
||||||
|
msg.innerHTML = "mush have digits"
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
let numLetters = password.match(/\D/g)?.length || 0;
|
||||||
|
if (numLetters<2) {
|
||||||
|
msg.innerHTML = "must have letters"
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
export function redirectLogged() {
|
||||||
|
let callback = function(responseText) {
|
||||||
|
let response = JSON.parse(responseText)
|
||||||
|
if (response) {
|
||||||
|
window.location.href = "/";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getData("/xx/check-login",callback)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function redirectNotLogged() {
|
||||||
|
let callback = function(responseText) {
|
||||||
|
let response = JSON.parse(responseText)
|
||||||
|
if (!response) {
|
||||||
|
window.location.href = "/";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getData("/xx/check-login",callback)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Redirect to the landing page
|
||||||
|
export function toLandingPage(response) {
|
||||||
|
if (response!=0) {
|
||||||
|
window.location.href = "/";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Redirect to the dashboard page
|
||||||
|
export function toDashboard() {
|
||||||
|
window.location.href = "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process log in
|
||||||
|
export function processLoginResponse(response,msgs,remember) {
|
||||||
|
if (response==0) {
|
||||||
|
msgs.email.innerHTML = "not found"
|
||||||
|
}
|
||||||
|
else if (response==1) {
|
||||||
|
msgs.password.innerHTML = "is wrong"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (remember) {
|
||||||
|
let date = new Date()
|
||||||
|
date.setMonth(date.getMonth()+1)
|
||||||
|
date = date.toUTCString()
|
||||||
|
document.cookie = "__genierememberme=; expires=" + date + "; path=/;SameSite=Lax";
|
||||||
|
}
|
||||||
|
toDashboard()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Log in
|
||||||
|
export function login(msgs,inputs) {
|
||||||
|
msgs.email.innerHTML = ""
|
||||||
|
msgs.password.innerHTML = ""
|
||||||
|
let data = {email: inputs.email.value, password: inputs.password.value, remember: inputs.remember.checked}
|
||||||
|
sendData('/xx/login-post', data, (response) => processLoginResponse(response,msgs,inputs.remember.checked))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process sign in
|
||||||
|
function processSignupResponse(response,msgs) {
|
||||||
|
if (response) {
|
||||||
|
toDashboard()
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
msgs.email.innerHTML = "already exists"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sign up
|
||||||
|
export function signup(msgs,inputs) {
|
||||||
|
msgs.email.innerHTML = ""
|
||||||
|
let email = inputs.email.value
|
||||||
|
let password = inputs.password.value
|
||||||
|
if (checkEmail(email,msgs.email)==false) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (checkPassword(password,msgs.password)==false) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let data = {email: email, password: password}
|
||||||
|
sendData('/xx/signup-post', data, (response) => processSignupResponse(response,msgs))
|
||||||
|
}
|
||||||
|
|
||||||
|
export function confirmEmail(msg,code,callback) {
|
||||||
|
msg.innerHTML = ""
|
||||||
|
sendData('xx/confirm-email',code,callback)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Log out
|
||||||
|
export function logout() {
|
||||||
|
var xmlHttp = new XMLHttpRequest();
|
||||||
|
xmlHttp.open( "GET", "/logout", false ); // false for synchronous request
|
||||||
|
xmlHttp.send( null );
|
||||||
|
window.location.href = "/";
|
||||||
|
}
|
|
@ -7,5 +7,7 @@
|
||||||
"communes": "Communes",
|
"communes": "Communes",
|
||||||
"cooperatives": "Cooperatives",
|
"cooperatives": "Cooperatives",
|
||||||
"parties": "Parties",
|
"parties": "Parties",
|
||||||
"partners": "Partners"
|
"partners": "Partners",
|
||||||
|
"login": "Login",
|
||||||
|
"profile": "Profile"
|
||||||
}
|
}
|
|
@ -10,6 +10,7 @@ import watch from "rollup-plugin-watch";
|
||||||
|
|
||||||
const production = !process.env.ROLLUP_WATCH;
|
const production = !process.env.ROLLUP_WATCH;
|
||||||
|
|
||||||
|
|
||||||
function serve() {
|
function serve() {
|
||||||
let server;
|
let server;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,128 @@
|
||||||
|
<svelte:options tag="auth-component" />
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
// Import statements
|
||||||
|
import { onMount, setContext,getContext } from 'svelte'
|
||||||
|
import { sendText } from "/js/libraries/serverTools.js"
|
||||||
|
import * as AuthTools from "/js/libraries/authTools.js"
|
||||||
|
import "/js/components/login-component.js"
|
||||||
|
import "/js/components/signup-component.js"
|
||||||
|
|
||||||
|
// Main code
|
||||||
|
AuthTools.redirectLogged()
|
||||||
|
|
||||||
|
let loginComponent
|
||||||
|
let signupComponent
|
||||||
|
|
||||||
|
let context = {
|
||||||
|
googleInit: false
|
||||||
|
}
|
||||||
|
setContext("auth",context)
|
||||||
|
|
||||||
|
function switchFocus(component) {
|
||||||
|
if (component==loginComponent) {
|
||||||
|
loginComponent.focused = true
|
||||||
|
signupComponent.focused = false
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
loginComponent.focused = false
|
||||||
|
signupComponent.focused = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function callbackGoogle(data) {
|
||||||
|
console.log(data)
|
||||||
|
sendText("/signup-google",data.credential,(response) => AuthTools.processLoginResponse(response,context.msgs,context.remember.checked))
|
||||||
|
}
|
||||||
|
|
||||||
|
function initGoogle() {
|
||||||
|
if (typeof google != 'undefined') {
|
||||||
|
google.accounts.id.initialize({
|
||||||
|
client_id: '93612176787-sr8qjqem4e3kok4msrnj8s1illt85a9g.apps.googleusercontent.com',
|
||||||
|
callback: callbackGoogle,
|
||||||
|
auto_select: true,
|
||||||
|
context: "signin"
|
||||||
|
})
|
||||||
|
context.googleInit = true
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setTimeout(initGoogle,100)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
initGoogle()
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div id="auth-group">
|
||||||
|
<div id="auth-grid-group">
|
||||||
|
<login-component bind:this={loginComponent} on:click={() => switchFocus(loginComponent)} on:keydown={() => ""}></login-component>
|
||||||
|
<signup-component bind:this={signupComponent} on:click={() => switchFocus(signupComponent)} on:keydown={() => ""}></signup-component>
|
||||||
|
</div>
|
||||||
|
<div id="auth-or" class="pane">
|
||||||
|
<span>OR</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
@import '/css/common.css';
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-size: 1.4rem;
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
}
|
||||||
|
|
||||||
|
#auth-group {
|
||||||
|
margin: auto;
|
||||||
|
width: auto;
|
||||||
|
margin-bottom: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#auth-grid-group {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 30rem 30rem;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 1.37rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#auth-or {
|
||||||
|
display: flex;
|
||||||
|
position: absolute;
|
||||||
|
margin: auto;
|
||||||
|
top: 40%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
width: 5.4rem;
|
||||||
|
height: 5.4rem;
|
||||||
|
border-radius: 6.8rem;
|
||||||
|
background-color: white;
|
||||||
|
align-items:center;
|
||||||
|
justify-content:center;
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 1200px) {
|
||||||
|
#auth-grid-group {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 30rem;
|
||||||
|
grid-template-rows: auto auto;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 1.37rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#auth-or {
|
||||||
|
top: 46.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#auth-group {
|
||||||
|
margin-top: 2rem;
|
||||||
|
margin-bottom: 3rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,131 @@
|
||||||
|
<svelte:options tag="confirmation-component" />
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
// Import statements
|
||||||
|
import { onMount } from 'svelte'
|
||||||
|
import * as AuthTools from "/js/libraries/authTools.js"
|
||||||
|
|
||||||
|
// Export statements
|
||||||
|
|
||||||
|
// Main code
|
||||||
|
let confirmationInputs = []
|
||||||
|
let confirmationMsg
|
||||||
|
let confirmationButton
|
||||||
|
|
||||||
|
function onlyNumberKey(ind,evt) {
|
||||||
|
// Only ASCII character in that range allowed
|
||||||
|
var value = evt.data
|
||||||
|
if (value in ["0","1","2","3","4","5","6","7","8","9"]) {
|
||||||
|
if (ind<4) {
|
||||||
|
confirmationInputs[ind+1].focus()
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
AuthTools.confirmEmail(confirmationMsg,getCode(),callback)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
confirmationInputs[ind].value = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCode() {
|
||||||
|
let code = ""
|
||||||
|
for (let input of confirmationInputs) {
|
||||||
|
code += input.value
|
||||||
|
}
|
||||||
|
return parseInt(code)
|
||||||
|
}
|
||||||
|
|
||||||
|
function callback(response) {
|
||||||
|
if (response=="true") {
|
||||||
|
AuthTools.toDashboard()
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
confirmationMsg.innerHTML = "Wrong code"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="pane auth-pane">
|
||||||
|
<h2 class="auth-title title-highlight">CONFIRMATION CODE</h2>
|
||||||
|
<div id="confirmationInputs">
|
||||||
|
<input bind:this={confirmationInputs[0]} class="authConfirmationInput" type="text" maxlength="1" on:input={(evt) => onlyNumberKey(0,evt)}><span class="dash">-</span>
|
||||||
|
<input bind:this={confirmationInputs[1]} class="authConfirmationInput" type="text" maxlength="1" on:input={(evt) => onlyNumberKey(1,evt)}><span class="dash">-</span>
|
||||||
|
<input bind:this={confirmationInputs[2]} class="authConfirmationInput" type="text" maxlength="1" on:input={(evt) => onlyNumberKey(2,evt)}><span class="dash">-</span>
|
||||||
|
<input bind:this={confirmationInputs[3]} class="authConfirmationInput" type="text" maxlength="1" on:input={(evt) => onlyNumberKey(3,evt)}><span class="dash">-</span>
|
||||||
|
<input bind:this={confirmationInputs[4]} class="authConfirmationInput" type="text" maxlength="1" on:input={(evt) => onlyNumberKey(4,evt)}>
|
||||||
|
</div>
|
||||||
|
<span bind:this={confirmationMsg} id="confirmation-msg"></span>
|
||||||
|
<button bind:this={confirmationButton} class="auth-button" on:click="{() => AuthTools.confirmEmail(confirmationMsg,getCode(),callback)}">Confirm</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
@import '/css/common.css';
|
||||||
|
|
||||||
|
.auth-pane {
|
||||||
|
position: relative;
|
||||||
|
padding: 3.4rem;
|
||||||
|
padding-top: 5.5rem;
|
||||||
|
padding-bottom: 5.5rem;
|
||||||
|
width: 33rem;
|
||||||
|
height: auto;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-title {
|
||||||
|
position: relative;
|
||||||
|
left: 0.7rem;
|
||||||
|
top: 0.2rem;
|
||||||
|
margin-bottom: 1.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.authConfirmationInput {
|
||||||
|
position: relative;
|
||||||
|
width: 3.16rem;
|
||||||
|
font-family: var(--serif,serif);
|
||||||
|
font-size: 3rem;
|
||||||
|
border-radius: 0.34rem;
|
||||||
|
margin-bottom: 0.7rem;
|
||||||
|
text-align: center;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-bottom: 0.3 rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dash {
|
||||||
|
display: block;
|
||||||
|
font-size: 3rem;
|
||||||
|
font-family: var(--serif,serif);
|
||||||
|
}
|
||||||
|
|
||||||
|
#confirmationInputs {
|
||||||
|
margin: auto;
|
||||||
|
display: grid;
|
||||||
|
justify-content: space-between;
|
||||||
|
grid-auto-flow: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-button {
|
||||||
|
margin-top: 1.4rem;
|
||||||
|
height: 3.4rem;
|
||||||
|
width: 100%;
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
font-size: 1.6rem;
|
||||||
|
color: white;
|
||||||
|
background-color: var(--pink);
|
||||||
|
border-color: var(--pink);
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
filter: drop-shadow(0.07rem 0.14rem 0.07rem rgb(0 0 0 / 0.4));
|
||||||
|
}
|
||||||
|
|
||||||
|
#confirmation-msg {
|
||||||
|
display: inline;
|
||||||
|
color:red;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,108 @@
|
||||||
|
<svelte:options tag="login-component" />
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
// Import statements
|
||||||
|
import { onMount, getContext } from 'svelte'
|
||||||
|
import * as AuthTools from "/js/libraries/authTools.js"
|
||||||
|
|
||||||
|
// Export statements
|
||||||
|
export let focused = false
|
||||||
|
|
||||||
|
// Main code
|
||||||
|
|
||||||
|
let emailInput
|
||||||
|
let passwordInput
|
||||||
|
let inputs
|
||||||
|
|
||||||
|
let passwordVisibilityButton
|
||||||
|
|
||||||
|
let emailMsg
|
||||||
|
let passwordMsg
|
||||||
|
let msgs
|
||||||
|
let rememberMe
|
||||||
|
|
||||||
|
let googleButton
|
||||||
|
|
||||||
|
let parentProps = getContext("auth")
|
||||||
|
|
||||||
|
function renderGoogle() {
|
||||||
|
if (parentProps.googleInit) {
|
||||||
|
google.accounts.id.renderButton(googleButton,{
|
||||||
|
theme: 'outline',
|
||||||
|
size: 'large'
|
||||||
|
})
|
||||||
|
let iframe = googleButton.getElementsByTagName('iframe')[0]
|
||||||
|
iframe.style.height = "5rem"
|
||||||
|
iframe.style.width = "5rem"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setTimeout(renderGoogle,100)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
|
||||||
|
rememberMe.checked = true
|
||||||
|
|
||||||
|
inputs = {email: emailInput, password: passwordInput, remember: rememberMe}
|
||||||
|
msgs = {email: emailMsg, password: passwordMsg}
|
||||||
|
|
||||||
|
parentProps.msgs = msgs
|
||||||
|
parentProps.remember = rememberMe
|
||||||
|
parentProps.loginGoogle = googleButton
|
||||||
|
|
||||||
|
document.addEventListener("keypress", function(event) {
|
||||||
|
if (event.code == "Enter") {
|
||||||
|
if (focused) {
|
||||||
|
AuthTools.login(msgs,inputs)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
renderGoogle()
|
||||||
|
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div id="login-group"class="pane auth-pane">
|
||||||
|
<h2 class="auth-title">LOG IN</h2>
|
||||||
|
<label class="auth-label" for="emailInput">Email </label><span bind:this={emailMsg} id="email-msg"></span>
|
||||||
|
<input bind:this={emailInput} id="emailInput" class="authEmailInput" type="email">
|
||||||
|
<div class="password-field">
|
||||||
|
<label class="auth-label" for="passwordInput">Password </label><span bind:this={passwordMsg} id="password-msg"></span>
|
||||||
|
<input bind:this={passwordInput} id="passwordInput" class="authPasswordInput" type="password">
|
||||||
|
<button bind:this={passwordVisibilityButton} class="eye-icon" on:click="{() => AuthTools.changePasswordVisibility(passwordVisibilityButton)}">
|
||||||
|
<object type="image/svg+xml" data="/img/auth/eye_icon.svg" title="eye icon"></object>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div id="remember-me">
|
||||||
|
<input bind:this={rememberMe} type="checkbox" id="remember-me-checkbox"><label id="remember-me-label" for="passwordInput">remember me</label>
|
||||||
|
</div>
|
||||||
|
<button class="auth-button" on:click="{() => AuthTools.login(msgs,inputs)}">Log in</button>
|
||||||
|
<a id="forgot-password" href="forgot-password">Forgot password?</a>
|
||||||
|
<hr class="auth-line">
|
||||||
|
<div class="auth-methods-group">
|
||||||
|
<div id="google-btn-wrapper">
|
||||||
|
<div bind:this={googleButton} id="google-btn"></div>
|
||||||
|
<img src="/img/auth/google_icon.svg" id="google-logo" alt="google icon">
|
||||||
|
</div>
|
||||||
|
<!--
|
||||||
|
<button on:click={openGoogleWindow}>
|
||||||
|
<img src="img/auth/google_icon.svg" id="navbar-logo" alt="google icon">
|
||||||
|
</button>
|
||||||
|
<button onclick="">
|
||||||
|
<img src="img/auth/facebook_icon.svg" id="navbar-logo" alt="facebook icon">
|
||||||
|
</button>
|
||||||
|
<button onclick="">
|
||||||
|
<img src="img/auth/linkedin_icon.svg" id="navbar-logo" alt="linkedin icon">
|
||||||
|
</button>-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
@import '/css/common.css';
|
||||||
|
@import '/css/auth.css';
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,241 @@
|
||||||
|
<svelte:options tag="signup-component" />
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
// Import statements
|
||||||
|
import { onMount, getContext } from 'svelte'
|
||||||
|
import * as AuthTools from "/js/libraries/authTools.js"
|
||||||
|
|
||||||
|
// Export statements
|
||||||
|
export let focused = false
|
||||||
|
|
||||||
|
// Main code
|
||||||
|
|
||||||
|
let signupGroup
|
||||||
|
let emailInput
|
||||||
|
let passwordInput
|
||||||
|
let passwordVisibilityButton
|
||||||
|
let inputs
|
||||||
|
let googleButton
|
||||||
|
|
||||||
|
let emailMsg
|
||||||
|
let passwordMsg
|
||||||
|
let msgs
|
||||||
|
let rememberMe
|
||||||
|
|
||||||
|
let dialog
|
||||||
|
let signUp
|
||||||
|
let signUpField
|
||||||
|
|
||||||
|
let parentProps = getContext("auth")
|
||||||
|
|
||||||
|
function removeMsg(msg) {
|
||||||
|
if (msg.innerHTML!="") {
|
||||||
|
msg.innerHTML = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function showDialog() {
|
||||||
|
dialog.style.display = "block"
|
||||||
|
}
|
||||||
|
|
||||||
|
function hide() {
|
||||||
|
if (dialog!=null) {
|
||||||
|
dialog.style.display = "none";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendEmail() {
|
||||||
|
let email = signUpField.value
|
||||||
|
if (email.includes("@")) {
|
||||||
|
sendText("/get-email",email)
|
||||||
|
signUpField.value = ""
|
||||||
|
signUpField.placeholder = "Subscribed!"
|
||||||
|
signUpField.style.setProperty("--c", "hsl(147, 33%, 60%)")
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
signUpField.value = ""
|
||||||
|
signUpField.placeholder = "must contain '@'"
|
||||||
|
signUpField.style.setProperty("--c", "hsl(0, 100%, 60%)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearField() {
|
||||||
|
signUpField.placeholder = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderGoogle() {
|
||||||
|
if (parentProps.googleInit) {
|
||||||
|
google.accounts.id.renderButton(googleButton,{
|
||||||
|
theme: 'outline',
|
||||||
|
size: 'large'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setTimeout(renderGoogle,100)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
|
||||||
|
rememberMe.checked = true
|
||||||
|
inputs = {email: emailInput, password: passwordInput}
|
||||||
|
msgs = {email: emailMsg, password: passwordMsg}
|
||||||
|
|
||||||
|
document.addEventListener("keypress", function(event) {
|
||||||
|
if (event.code == "Enter") {
|
||||||
|
if (focused) {
|
||||||
|
AuthTools.signup(msgs,inputs,toLandingPage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
//renderGoogle()
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div id="signup-group" class="pane auth-pane" bind:this={signupGroup}>
|
||||||
|
<h2 class="auth-title">SIGN UP</h2>
|
||||||
|
<label class="auth-label" for="emailInput">Email </label><span bind:this={emailMsg} id="email-msg" on:change={() => removeMsg(emailMsg)}></span>
|
||||||
|
<input bind:this={emailInput} id="emailInput" class="authEmailInput" type="email">
|
||||||
|
<div class="password-field">
|
||||||
|
<label class="auth-label" for="emailInput">Password </label><span bind:this={passwordMsg} id="password-msg"></span>
|
||||||
|
<input bind:this={passwordInput} id="passwordInput" class="authPasswordInput" type="password" on:change={() => removeMsg(passwordMsg)}>
|
||||||
|
<button bind:this={passwordVisibilityButton} class="eye-icon" on:click="{() => AuthTools.changePasswordVisibility(passwordVisibilityButton)}">
|
||||||
|
<object type="image/svg+xml" data="/img/auth/eye_icon.svg" title="eye-icon"></object>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div id="remember-me">
|
||||||
|
<input bind:this={rememberMe} type="checkbox" id="remember-me-checkbox"><label id="remember-me-label" for="passwordInput">remember me</label>
|
||||||
|
</div>
|
||||||
|
<button class="auth-button" on:click="{showDialog}">Sign up</button> <!--() => AuthTools.signup(msgs,inputs,AuthTools.toLandingPage)-->
|
||||||
|
<p id="forgot-password"></p>
|
||||||
|
<hr class="auth-line">
|
||||||
|
<div class="auth-methods-group">
|
||||||
|
<button on:click="{showDialog}">
|
||||||
|
<img src="/img/auth/google_icon.svg" id="navbar-logo" alt="google icon">
|
||||||
|
</button>
|
||||||
|
<!--<button onclick="">
|
||||||
|
<img src="img/auth/facebook_icon.svg" id="navbar-logo" alt="facebook icon">
|
||||||
|
</button>
|
||||||
|
<button onclick="">
|
||||||
|
<img src="img/auth/linkedin_icon.svg" id="navbar-logo" alt="linkedin icon">
|
||||||
|
</button>-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div bind:this={dialog} id="dialog">
|
||||||
|
<button id="shadow" on:click={hide}></button>
|
||||||
|
<div id="wrapper" class="pane">
|
||||||
|
<h2>Registration is closed</h2>
|
||||||
|
<p>We are still in the process of opening.</p>
|
||||||
|
<p>Sign up for updates to know when it becomes available:</p>
|
||||||
|
<div id="newsletter-container">
|
||||||
|
<input bind:this={signUpField} on:click={clearField} id="newsletterEmailInput" type="text">
|
||||||
|
<button bind:this={signUp} on:click={sendEmail} id="newsletterEmailButton">sign up</button>
|
||||||
|
</div>
|
||||||
|
<button id="no-button" on:click={hide}>No thanks</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
@import '/css/common.css';
|
||||||
|
@import '/css/auth.css';
|
||||||
|
|
||||||
|
#dialog {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrapper p {
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrapper h2 {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#shadow {
|
||||||
|
position: fixed;
|
||||||
|
cursor: default;
|
||||||
|
top: 50%; right: 50%;
|
||||||
|
transform: translate(50%,-50%);
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
background:rgb(0, 0, 0, 0.2);
|
||||||
|
z-index: 999999;
|
||||||
|
}
|
||||||
|
|
||||||
|
#newsletter-container {
|
||||||
|
position: relative;
|
||||||
|
height: 3rem;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 1rem;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
#newsletterEmailInput {
|
||||||
|
height: 2.5rem;
|
||||||
|
border-radius: 0.2rem 0 0 0.2rem;
|
||||||
|
filter: drop-shadow( 0.07rem 0.14rem 0.07rem rgb(0 0 0 / 0.4));
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#newsletterEmailInput::placeholder { /* Chrome, Firefox, Opera, Safari 10.1+ */
|
||||||
|
color: var(--c,gray);
|
||||||
|
opacity: 1; /* Firefox */
|
||||||
|
}
|
||||||
|
|
||||||
|
#newsletterEmailButton {
|
||||||
|
width: 6.8rem;
|
||||||
|
height: 2.5rem;
|
||||||
|
background: var(--pink);
|
||||||
|
color: #ffffff;
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
font-size: 1.4rem;
|
||||||
|
border-radius: 0 0.2rem 0.2rem 0;
|
||||||
|
filter: drop-shadow( 0.07rem 0.14rem 0.07rem rgb(0 0 0 / 0.4));
|
||||||
|
}
|
||||||
|
|
||||||
|
#newsletterEmailButton:active {
|
||||||
|
background: var(--darker-pink);
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrapper {
|
||||||
|
top: 50%; right: 50%;
|
||||||
|
transform: translate(50%,-50%);
|
||||||
|
position: fixed;
|
||||||
|
max-width: 36rem;
|
||||||
|
width: 90vw;
|
||||||
|
padding: 2rem 4rem;
|
||||||
|
z-index: 1999999;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrapper * {
|
||||||
|
font-family: var(--sans-serif);
|
||||||
|
}
|
||||||
|
|
||||||
|
#no-button {
|
||||||
|
position: relative;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
width: 13rem;
|
||||||
|
height: 3rem;
|
||||||
|
margin-top: 2rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
background: #ffffff;
|
||||||
|
border: 0.2rem solid var(--pink);
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
font-size: 1.4rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
filter: drop-shadow( 0.07rem 0.14rem 0.07rem rgb(0 0 0 / 0.4));
|
||||||
|
}
|
||||||
|
|
||||||
|
#no-button:active {
|
||||||
|
background: hsl(343, 23%, 82%);
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
|
@ -71,17 +71,17 @@
|
||||||
<div bind:this={root} id="root" class="pane-centering">
|
<div bind:this={root} id="root" class="pane-centering">
|
||||||
<div class="pane-container">
|
<div class="pane-container">
|
||||||
<div id="sidebars-left" class="sidebar">
|
<div id="sidebars-left" class="sidebar">
|
||||||
<div bind:this={sidebarLeft} id="sidebar-left" class="pane">
|
<div bind:this={sidebarLeft} id="sidebar-left">
|
||||||
<slot name="sidebar-left"></slot>
|
<slot name="sidebar-left"></slot>
|
||||||
</div>
|
</div>
|
||||||
<div bind:this={sidebarLeft2} id="sidebar-left2" class="pane">
|
<div bind:this={sidebarLeft2} id="sidebar-left2">
|
||||||
<slot name="sidebar-left2"></slot>
|
<slot name="sidebar-left2"></slot>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div bind:this={sidebarRight} id="sidebar-right" class="pane sidebar">
|
<div bind:this={sidebarRight} id="sidebar-right" class="pane sidebar">
|
||||||
<slot name="sidebar-right"></slot>
|
<slot name="sidebar-right"></slot>
|
||||||
</div>
|
</div>
|
||||||
<div bind:this={mainPane} id="main-pane" class="pane">
|
<div bind:this={mainPane} id="main-pane">
|
||||||
<slot name="main" id="main-slot"></slot>
|
<slot name="main" id="main-slot"></slot>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -95,7 +95,10 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#root {
|
#root {
|
||||||
|
position: relative;
|
||||||
|
margin-top: auto;
|
||||||
min-height: var(--min-height,auto);
|
min-height: var(--min-height,auto);
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#main-pane {
|
#main-pane {
|
||||||
|
@ -105,10 +108,8 @@
|
||||||
padding-top: var(--padding-top,0rem);
|
padding-top: var(--padding-top,0rem);
|
||||||
padding-bottom: var(--padding-bottom,0rem);
|
padding-bottom: var(--padding-bottom,0rem);
|
||||||
text-align: justify;
|
text-align: justify;
|
||||||
background: var(--background,white);
|
|
||||||
box-shadow: var(--box-shadow,0 0 0.314rem rgb(187, 187, 187));
|
|
||||||
margin: auto;
|
margin: auto;
|
||||||
height: min-content;
|
height: 100%;
|
||||||
max-width: var(--width-main,66rem);
|
max-width: var(--width-main,66rem);
|
||||||
width: var(--width-main,66rem);
|
width: var(--width-main,66rem);
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
|
@ -124,13 +125,14 @@
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
margin-left: calc(-1*var(--width-left,22.5rem) - 1rem - 4rem);
|
margin-left: calc(-1*var(--width-left,22.5rem) - 1rem - 4rem);
|
||||||
width: calc(var(--width-left,22.5rem) + 4rem);
|
width: max-content;
|
||||||
|
max-width: 30rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
#sidebar-left,#sidebar-left2 {
|
#sidebar-left,#sidebar-left2 {
|
||||||
position: relative;
|
position: relative;
|
||||||
background-color: white;
|
background-color: white;
|
||||||
padding: 2rem 2rem;
|
padding: 0rem 0rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
#sidebar-left {
|
#sidebar-left {
|
||||||
|
@ -149,16 +151,16 @@
|
||||||
padding: 2rem 2rem;
|
padding: 2rem 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (max-width: 1880px) {
|
@media only screen and (max-width: 1340px) {
|
||||||
|
|
||||||
#main-pane {
|
#main-pane {
|
||||||
max-width: initial;
|
max-width: initial;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-width: var(--width-main,66rem);
|
max-width: var(--width-main,66rem);
|
||||||
padding-left: var(--padding-left-mobile,1.8rem);
|
padding-left: var(--padding-left-mobile,0rem);
|
||||||
padding-right: var(--padding-right-mobile,1.8rem);
|
padding-right: var(--padding-right-mobile,0rem);
|
||||||
padding-top: var(--padding-top-mobile,1.8rem);
|
padding-top: var(--padding-top-mobile,0rem);
|
||||||
padding-bottom: var(--padding-bottom-mobile,1.8rem);
|
padding-bottom: var(--padding-bottom-mobile,0rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
#sidebars-left, #sidebar-right {
|
#sidebars-left, #sidebar-right {
|
||||||
|
|
|
@ -32,8 +32,8 @@
|
||||||
<button on:click={() => {location.href='#'}} id="footer-up" aria-label="go up">
|
<button on:click={() => {location.href='#'}} id="footer-up" aria-label="go up">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="42.545" height="72.601" viewBox="0 0 42.545 72.601">
|
<svg xmlns="http://www.w3.org/2000/svg" width="42.545" height="72.601" viewBox="0 0 42.545 72.601">
|
||||||
<g id="Group_268" data-name="Group 268" transform="translate(-6.177 -2.399)">
|
<g id="Group_268" data-name="Group 268" transform="translate(-6.177 -2.399)">
|
||||||
<rect id="Rectangle_146" data-name="Rectangle 146" width="11" height="51" rx="5.5" transform="translate(22 24)" fill="#cb1816"/>
|
<rect id="Rectangle_146" data-name="Rectangle 146" width="11" height="51" rx="5.5" transform="translate(22 24)" fill="var(--red)"/>
|
||||||
<path id="Path_1145" data-name="Path 1145" d="M23.814,4.021a5,5,0,0,1,7.372,0l16.134,17.6c2.94,3.207,1.046,10.4-3.686,8.379S28.02,14.081,28.391,13.524,16.544,27.976,11.366,30,4.741,24.828,7.68,21.621Z" fill="#DD1C1A"/>
|
<path id="Path_1145" data-name="Path 1145" d="M23.814,4.021a5,5,0,0,1,7.372,0l16.134,17.6c2.94,3.207,1.046,10.4-3.686,8.379S28.02,14.081,28.391,13.524,16.544,27.976,11.366,30,4.741,24.828,7.68,21.621Z" fill="var(--red)"/>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
|
@ -54,8 +54,8 @@ footer {
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: auto;
|
height: auto;
|
||||||
background: #5B6970;/*var(--dark-green);*/
|
background: var(--gray);
|
||||||
border-top: #cb1816 solid 0.5rem;
|
border-top: var(--red) solid 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
footer p, footer a {
|
footer p, footer a {
|
||||||
|
|
|
@ -228,7 +228,7 @@
|
||||||
<p class="description">If there are no groups in your town with whom you can organize then do the following:</p>
|
<p class="description">If there are no groups in your town with whom you can organize then do the following:</p>
|
||||||
<ol>
|
<ol>
|
||||||
<li>Click on the map to show us where you are located;</li>
|
<li>Click on the map to show us where you are located;</li>
|
||||||
<li>Add a way to contact you or leave blank for a pin to point to our discord;</li>
|
<li>Add a way to contact you (an invite link or an email, not a phone number) or leave blank for a pin to point to our discord;</li>
|
||||||
<li>Press "Submit" to add yourself to our map;</li>
|
<li>Press "Submit" to add yourself to our map;</li>
|
||||||
<li>Verify yourself by having a chat with us at our Discord server to show on the map;</li>
|
<li>Verify yourself by having a chat with us at our Discord server to show on the map;</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
|
@ -163,7 +163,7 @@
|
||||||
font-family: var(--sans-serif,sans-serif);
|
font-family: var(--sans-serif,sans-serif);
|
||||||
width: 14rem;
|
width: 14rem;
|
||||||
line-height: 4rem;
|
line-height: 4rem;
|
||||||
background: #cb1816;
|
background: var(--red);
|
||||||
color: white;
|
color: white;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,419 @@
|
||||||
|
<svelte:options tag="navbar-logged" />
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
// Import statements
|
||||||
|
import { onMount, getContext } from 'svelte'
|
||||||
|
import { writable } from 'svelte/store'
|
||||||
|
import { loadLocaleContent, locales } from "/js/libraries/serverTools.js"
|
||||||
|
|
||||||
|
// Main code
|
||||||
|
let hambInput
|
||||||
|
let navbar
|
||||||
|
let localesDropdown
|
||||||
|
let initiativesDropdown
|
||||||
|
let loaded = writable(0)
|
||||||
|
let content = writable({})
|
||||||
|
let logoText
|
||||||
|
|
||||||
|
let locale = loadLocaleContent(content,"navbar-component",loaded)
|
||||||
|
|
||||||
|
function changeNavbar() {
|
||||||
|
if (hambInput.checked) {
|
||||||
|
navbar.style.background = "white"
|
||||||
|
//navbar.style.boxShadow = "0 0 0.314rem rgb(187, 187, 187)"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setTimeout(()=> {
|
||||||
|
navbar.style.position = "relative"
|
||||||
|
navbar.style.background = ""
|
||||||
|
navbar.style.boxShadow = ""
|
||||||
|
}
|
||||||
|
,510)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function showDropdown(dropdown) {
|
||||||
|
let state = dropdown.style.display
|
||||||
|
initiativesDropdown.style.display = "none"
|
||||||
|
localesDropdown.style.display = "none"
|
||||||
|
if (state=="block") {
|
||||||
|
dropdown.style.display = "none"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dropdown.style.display = "block"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeLocale(lang) {
|
||||||
|
localStorage.setItem("locale",lang)
|
||||||
|
let locSplit = location.href.split("/")
|
||||||
|
let localesSymbols = Object.keys(locales)
|
||||||
|
locSplit = locSplit.filter(x => !localesSymbols.includes(x))
|
||||||
|
let loc = locSplit.slice(0,locSplit.length-1).join("/") + "/" + lang + "/" + locSplit[locSplit.length-1]
|
||||||
|
location.href = loc
|
||||||
|
}
|
||||||
|
|
||||||
|
function fixHeading() {
|
||||||
|
if (locale=="ru") {
|
||||||
|
let func = () => {
|
||||||
|
if (logoText==undefined) {
|
||||||
|
setTimeout(func,100)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (((window.innerWidth < 1700 && window.innerWidth > 1400) || window.innerWidth < 400) && logoText.style.lineHeight!="100%") {
|
||||||
|
logoText.style.lineHeight = "120%"
|
||||||
|
logoText.style.top = "1rem"
|
||||||
|
logoText.style.width = "16rem"
|
||||||
|
}
|
||||||
|
else if (((window.innerWidth > 1700) || (window.innerWidth > 400 && window.innerWidth < 1400)) && logoText.style.lineHeight!="400%") {
|
||||||
|
logoText.style.lineHeight = "400%"
|
||||||
|
logoText.style.top = "0rem"
|
||||||
|
logoText.style.width = "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func()
|
||||||
|
addEventListener("resize", func)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function hide(dropdown) {
|
||||||
|
let callback = () => {
|
||||||
|
dropdown.style.display = "none"
|
||||||
|
}
|
||||||
|
setTimeout(callback,100)
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
fixHeading()
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- Navigation bar -->
|
||||||
|
{#key loaded}
|
||||||
|
{#if Object.keys($content).length!=0}
|
||||||
|
<header bind:this={navbar} id="navbar">
|
||||||
|
<!-- Hamburger icon -->
|
||||||
|
<input bind:this={hambInput} type="checkbox" id="side-menu" on:click={changeNavbar}>
|
||||||
|
<label id="hamb" for="side-menu"><span id="hamb-line"></span></label>
|
||||||
|
<!-- Logo -->
|
||||||
|
<a id=logo-container href={"/" + locale + "/"}>
|
||||||
|
<img src="/img/common/flag.png" id="navbar-logo" alt="logo">
|
||||||
|
<span bind:this={logoText} id="navbar-logo-text" >{@html $content.orgName}</span>
|
||||||
|
</a>
|
||||||
|
<!-- Menu -->
|
||||||
|
<nav id="nav">
|
||||||
|
<ul id="menu">
|
||||||
|
<li><a href={"/"+locale+"/join-us"}>{$content.joinUs}</a></li>
|
||||||
|
<li><a href={"/"+locale+"/manifesto"}>{$content.manifesto}</a></li>
|
||||||
|
<!-- Options dropdown -->
|
||||||
|
<!-- A list of links pointing to different pages of the website. Implemented as a div opened on :hover-->
|
||||||
|
<li id="options-container">
|
||||||
|
<button on:click={() => showDropdown(initiativesDropdown)} on:focusout={() => hide(initiativesDropdown)} class="options-button">{$content.initiatives}</button>
|
||||||
|
<div bind:this={initiativesDropdown} class="options-dropdown">
|
||||||
|
<a href={"/"+locale+"/groups"}>{$content.groups}</a>
|
||||||
|
<a href={"/"+locale+"/communes"}>{$content.communes}</a>
|
||||||
|
<a href={"/"+locale+"/cooperatives"}>{$content.cooperatives}</a>
|
||||||
|
<a href={"/"+locale+"/parties"}>{$content.parties}</a>
|
||||||
|
<a href={"/"+locale+"/partners"}>{$content.partners}</a>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li><a href={"/"+locale+"/profile"}>{$content.profile}</a></li>
|
||||||
|
<li id="locales">
|
||||||
|
<button on:click={() => showDropdown(localesDropdown)} on:focusout={() => hide(localesDropdown)}>
|
||||||
|
<picture>
|
||||||
|
<source srcset="/img/common/globe.webp">
|
||||||
|
<source srcset="/img/common/globe.png">
|
||||||
|
<img id="locales-img" alt="globe">
|
||||||
|
</picture>
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
<div bind:this={localesDropdown} class="options-dropdown">
|
||||||
|
{#each Object.entries(locales) as [loc,name]}
|
||||||
|
<button on:click={() => changeLocale(loc)}>{name}</button>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
{/if}
|
||||||
|
{/key}
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
@import '/css/common.css';
|
||||||
|
|
||||||
|
/* Header */
|
||||||
|
#navbar{
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
width: min(100%,116rem);
|
||||||
|
z-index: 1000000000;
|
||||||
|
height: 5.26rem;
|
||||||
|
padding-left: 0rem;
|
||||||
|
padding-right: 0rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar * {
|
||||||
|
font-family: var(--sans-serif, sans-serif);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Logo */
|
||||||
|
#logo-container {
|
||||||
|
display: flex;
|
||||||
|
position: absolute;
|
||||||
|
margin-left: 1rem;
|
||||||
|
height: 100%;
|
||||||
|
max-height: 5.26rem;
|
||||||
|
color: black;
|
||||||
|
z-index: 1;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar-logo {
|
||||||
|
height: 3.5rem;
|
||||||
|
width: 3.5rem;
|
||||||
|
object-fit: contain;
|
||||||
|
border-radius: 10rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar-logo-text {
|
||||||
|
position: relative;
|
||||||
|
word-wrap: normal;
|
||||||
|
height: 100%;
|
||||||
|
line-height: 400%;
|
||||||
|
font-size: 1.4rem;
|
||||||
|
color: #292222;
|
||||||
|
font-family: var(--sans-serif, sans-serif);
|
||||||
|
font-weight: 400;
|
||||||
|
padding-left: 1.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Nav menu */
|
||||||
|
#nav {
|
||||||
|
position: fixed;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: white;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
#menu > li > a, .options-button {
|
||||||
|
display: block;
|
||||||
|
padding: 1.2rem;
|
||||||
|
padding-top: 1rem;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
color: black;
|
||||||
|
font-size: 1.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu > li > a:active{
|
||||||
|
background-color: #f7aec0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu li {
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav{
|
||||||
|
max-height: 0;
|
||||||
|
/*transition: max-height .5s ease-out;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Menu Icon */
|
||||||
|
#hamb{
|
||||||
|
position: absolute;
|
||||||
|
cursor: pointer;
|
||||||
|
right: 0rem;
|
||||||
|
padding: 2.8rem 2rem;
|
||||||
|
z-index: 9999;
|
||||||
|
}/* Style label tag */
|
||||||
|
|
||||||
|
#hamb-line {
|
||||||
|
background: black;
|
||||||
|
display: block;
|
||||||
|
height: 2px;
|
||||||
|
position: relative;
|
||||||
|
width: 24px;
|
||||||
|
|
||||||
|
} /* Style span tag */
|
||||||
|
|
||||||
|
#hamb-line::before,
|
||||||
|
#hamb-line::after{
|
||||||
|
background: black;
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
height: 100%;
|
||||||
|
position: absolute;
|
||||||
|
transition: all .2s ease-out;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
#hamb-line::before{
|
||||||
|
top: 5px;
|
||||||
|
}
|
||||||
|
#hamb-line::after{
|
||||||
|
top: -5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#side-menu {
|
||||||
|
display: none;
|
||||||
|
} /* Hide checkbox */
|
||||||
|
|
||||||
|
/* Toggle menu icon */
|
||||||
|
#side-menu:checked ~ nav {
|
||||||
|
display: block;
|
||||||
|
max-height: 100%;
|
||||||
|
padding-top: 5.625rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#side-menu:checked ~ #logo-container {
|
||||||
|
position: fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
#side-menu:checked ~ #hamb {
|
||||||
|
position: fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
#side-menu:checked ~ #logo-container {
|
||||||
|
position: fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
#side-menu:checked ~ #hamb #hamb-line {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#side-menu:checked ~ #hamb #hamb-line::before {
|
||||||
|
transform: rotate(-45deg);
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#side-menu:checked ~ #hamb #hamb-line::after {
|
||||||
|
transform: rotate(45deg);
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Options */
|
||||||
|
|
||||||
|
.options-dropdown {
|
||||||
|
position: absolute;
|
||||||
|
display: none;
|
||||||
|
top: 5.6rem;
|
||||||
|
right: 1.8rem;
|
||||||
|
border: #404040 solid 0.1rem;
|
||||||
|
background-color: white;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.options-dropdown button, .options-dropdown a {
|
||||||
|
display: block;
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
font-size: 1.2rem;
|
||||||
|
width: 100%;
|
||||||
|
padding: 1rem;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.options-dropdown button:hover, .options-dropdown a:hover {
|
||||||
|
background-color: var(--red);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.options-button {
|
||||||
|
width: 100%;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Localization */
|
||||||
|
|
||||||
|
#locales {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
#locales button {
|
||||||
|
width: 100%;
|
||||||
|
text-align: left;
|
||||||
|
height: 4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#locales button:hover {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#locales-img {
|
||||||
|
position: relative;
|
||||||
|
top: 0rem;
|
||||||
|
height: 2rem;
|
||||||
|
margin-left: 1.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
#options-dropdown>:first-child {
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#options-dropdown>:nth-child(2) {
|
||||||
|
padding-top: 0.5rem;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Responsiveness */
|
||||||
|
@media only screen and (min-width: 1200px) {
|
||||||
|
|
||||||
|
#navbar {
|
||||||
|
position: relative;
|
||||||
|
width: min(100%,116rem);
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
padding-right: 4rem;
|
||||||
|
padding-left: 4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav {
|
||||||
|
max-height: none;
|
||||||
|
top: 0;
|
||||||
|
position: relative;
|
||||||
|
float: right;
|
||||||
|
width: fit-content;
|
||||||
|
background-color: transparent;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
#side-menu:checked ~ nav {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu li {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu > li > a:hover, .options-button:hover, #navbar-logo-text:hover {
|
||||||
|
color: rgb(127, 127, 127);
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu > li > a, .options-button {
|
||||||
|
padding: 0.9rem;
|
||||||
|
padding-top: 1.9rem;
|
||||||
|
padding-bottom: 1.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hamb {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#locales {
|
||||||
|
position: relative;
|
||||||
|
margin-right: 1.8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#locales-img {
|
||||||
|
top: 0.9rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
|
@ -1,4 +1,4 @@
|
||||||
<svelte:options tag="navbar-component" />
|
<svelte:options tag="navbar-not-logged" />
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
@ -121,6 +121,7 @@
|
||||||
<a href={"/"+locale+"/partners"}>{$content.partners}</a>
|
<a href={"/"+locale+"/partners"}>{$content.partners}</a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
<li><a href={"/"+locale+"/auth"}>{$content.login}</a></li>
|
||||||
<li id="locales">
|
<li id="locales">
|
||||||
<button on:click={() => showDropdown(localesDropdown)} on:focusout={() => hide(localesDropdown)}>
|
<button on:click={() => showDropdown(localesDropdown)} on:focusout={() => hide(localesDropdown)}>
|
||||||
<picture>
|
<picture>
|
||||||
|
@ -320,7 +321,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.options-dropdown button:hover, .options-dropdown a:hover {
|
.options-dropdown button:hover, .options-dropdown a:hover {
|
||||||
background-color: rgb(187 53 52 / 96%);
|
background-color: var(--red);
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
<svelte:options tag="profile-communes" />
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
// Import statements
|
||||||
|
import { onMount } from 'svelte'
|
||||||
|
import * as AuthTools from "/js/libraries/authTools.js"
|
||||||
|
|
||||||
|
// Main code
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,265 @@
|
||||||
|
<svelte:options tag="profile-component" />
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
// Import libraries
|
||||||
|
import { onMount, afterUpdate, setContext } from 'svelte'
|
||||||
|
import * as AuthTools from "/js/libraries/authTools.js"
|
||||||
|
import {svgFromObject} from "/js/libraries/miscTools.js"
|
||||||
|
|
||||||
|
//Import components
|
||||||
|
import "/js/components/pane-aligner.js"
|
||||||
|
import "/js/components/profile-general.js"
|
||||||
|
import "/js/components/profile-groups.js"
|
||||||
|
|
||||||
|
// Main code
|
||||||
|
AuthTools.redirectNotLogged()
|
||||||
|
|
||||||
|
let root
|
||||||
|
let general
|
||||||
|
let groups
|
||||||
|
let communes
|
||||||
|
let coops
|
||||||
|
let parties
|
||||||
|
let panes
|
||||||
|
|
||||||
|
let generalButton
|
||||||
|
let groupsButton
|
||||||
|
let communesButton
|
||||||
|
let coopsButton
|
||||||
|
let partiesButton
|
||||||
|
let buttons
|
||||||
|
|
||||||
|
let locationPopup
|
||||||
|
|
||||||
|
let user = {}
|
||||||
|
AuthTools.getUser(user)
|
||||||
|
|
||||||
|
function changePane(pane,button) {
|
||||||
|
for (let p of panes) {
|
||||||
|
p.style.display = "none"
|
||||||
|
}
|
||||||
|
for (let b of buttons) {
|
||||||
|
styleField(b,400,"#636363")
|
||||||
|
}
|
||||||
|
pane.style.display = "initial"
|
||||||
|
|
||||||
|
styleField(button,500,"#c52a28")
|
||||||
|
}
|
||||||
|
|
||||||
|
function styleField(div,weight,color) {
|
||||||
|
div.style.fontWeight = weight
|
||||||
|
let svgObject = div.querySelector("object")
|
||||||
|
let svgItem = svgFromObject(svgObject)
|
||||||
|
svgItem.setAttribute("fill", color)
|
||||||
|
}
|
||||||
|
|
||||||
|
function fillFields() {
|
||||||
|
if (Object.keys(user).length!=0 && root!=undefined) {
|
||||||
|
for (let b of buttons) {
|
||||||
|
styleField(b,400,"#636363")
|
||||||
|
}
|
||||||
|
styleField(generalButton,500,"#c52a28")
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setTimeout(fillFields, 100)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function showLocationOverlay() {
|
||||||
|
locationPopup.style.display = "block"
|
||||||
|
}
|
||||||
|
|
||||||
|
setContext("profile-component",showLocationOverlay)
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
general.user = user
|
||||||
|
|
||||||
|
panes = [general,groups,communes,coops,parties]
|
||||||
|
buttons = [generalButton,groupsButton,communesButton,coopsButton,partiesButton]
|
||||||
|
|
||||||
|
fillFields()
|
||||||
|
general.style.display = "initial"
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div bind:this={locationPopup} class="overlay" style="display: none">
|
||||||
|
<div id="location-overlay-content">
|
||||||
|
<p>wegwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww</p>
|
||||||
|
</div>
|
||||||
|
<button class="overlay-button" on:click={() => locationPopup.style.display = "none"}></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<pane-aligner>
|
||||||
|
<div id="left-column" class="pane" slot="sidebar-left" bind:this={root}>
|
||||||
|
<button bind:this={generalButton} on:click={() => changePane(general,generalButton)}>
|
||||||
|
<object id="general-img" class="icons" type="image/svg+xml" data="/img/profile/icons/general.svg" title="general"></object>
|
||||||
|
<span>general</span>
|
||||||
|
</button>
|
||||||
|
<button bind:this={groupsButton} on:click={() => changePane(groups,groupsButton)}>
|
||||||
|
<object id="groups-img" class="icons" type="image/svg+xml" data="/img/common/groups.svg" title="groups"></object>
|
||||||
|
<span>groups</span>
|
||||||
|
</button>
|
||||||
|
<button bind:this={communesButton} on:click={() => changePane(communes,communesButton)}>
|
||||||
|
<object id="communes-img" class="icons" type="image/svg+xml" data="/img/common/communes.svg" title="communes"></object>
|
||||||
|
<span>communes</span>
|
||||||
|
</button>
|
||||||
|
<button bind:this={coopsButton} on:click={() => changePane(coops,coopsButton)}>
|
||||||
|
<object id="coops-img" class="icons" type="image/svg+xml" data="/img/common/coops.svg" title="coops"></object>
|
||||||
|
<span>cooperatives</span>
|
||||||
|
</button>
|
||||||
|
<button bind:this={partiesButton} on:click={() => changePane(parties,partiesButton)}>
|
||||||
|
<object id="parties-img" class="icons" type="image/svg+xml" data="/img/common/parties.svg" title="parties"></object>
|
||||||
|
<span>parties</span>
|
||||||
|
</button>
|
||||||
|
<button on:click={AuthTools.logout} id="logout-button">
|
||||||
|
<object id="logout-img" class="icons" type="image/svg+xml" data="/img/profile/icons/logout.svg" title=""></object>
|
||||||
|
<span>logout</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div id="main-column" slot="main">
|
||||||
|
<profile-general bind:this={general} style="display: none;"></profile-general>
|
||||||
|
<profile-groups bind:this={groups} style="display: none;"></profile-groups>
|
||||||
|
<profile-communes bind:this={communes} style="display: none;"></profile-communes>
|
||||||
|
<profile-coops bind:this={coops} style="display: none;"></profile-coops>
|
||||||
|
<profile-parties bind:this={parties} style="display: none;"></profile-parties>
|
||||||
|
</div>
|
||||||
|
</pane-aligner>
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
@import '/css/common.css';
|
||||||
|
|
||||||
|
#location-overlay-content {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
height: 40rem;
|
||||||
|
width: 40rem;
|
||||||
|
background: white;
|
||||||
|
z-index: 10000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.overlay {
|
||||||
|
top: 0;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
z-index: 10000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.overlay-button {
|
||||||
|
position: absolute;
|
||||||
|
background: gray;
|
||||||
|
opacity: 0.5;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#general-img {
|
||||||
|
top: 0rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#groups-img {
|
||||||
|
top: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#coops-img {
|
||||||
|
top: 0rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#parties-img {
|
||||||
|
top: 0rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#logout-img {
|
||||||
|
width: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#logout-button {
|
||||||
|
padding-top: 1rem;
|
||||||
|
padding-left: 0.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#left-column {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
width: 15.2rem;
|
||||||
|
padding: 2rem;
|
||||||
|
border-radius: 0.64rem 0.64rem 0.64rem 0.64rem;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.icons {
|
||||||
|
position: relative;
|
||||||
|
width: 1.8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#left-column button span {
|
||||||
|
position: absolute;
|
||||||
|
padding-left: 3.4rem;
|
||||||
|
margin-top: 0rem;
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
}
|
||||||
|
|
||||||
|
#left-column button {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
#main-column {
|
||||||
|
padding: 1rem 2rem 1rem 2rem;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 0 0.64rem 0.64rem 0;
|
||||||
|
flex-grow: 1;
|
||||||
|
flex-shrink: 1;
|
||||||
|
min-height: 20rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
pane-aligner {
|
||||||
|
--width-main: 800px;
|
||||||
|
--width-left: 10.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 1340px) {
|
||||||
|
|
||||||
|
|
||||||
|
#left-column {
|
||||||
|
position: relative;
|
||||||
|
margin-left: 0rem;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 0.64rem 0.64rem 0rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#main-column {
|
||||||
|
border-radius: 0.64rem;
|
||||||
|
padding: 3rem 0.5rem;
|
||||||
|
padding-bottom: 1.5rem;
|
||||||
|
border-radius: 0rem 0rem 0.64rem 0.64rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#logout-button {
|
||||||
|
position: relative;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#left-column button {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
width: 10rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#logout-button {
|
||||||
|
padding-top: 1rem;
|
||||||
|
margin-bottom: 0rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<svelte:options tag="profile-coops" />
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
// Import statements
|
||||||
|
import { onMount } from 'svelte'
|
||||||
|
import * as AuthTools from "/js/libraries/authTools.js"
|
||||||
|
|
||||||
|
// Main code
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,415 @@
|
||||||
|
<svelte:options tag="profile-general" />
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
// Import statements
|
||||||
|
import { onMount, setContext } from 'svelte'
|
||||||
|
import * as AuthTools from "/js/libraries/authTools.js"
|
||||||
|
|
||||||
|
//Import components
|
||||||
|
import "/js/components/select-component.js"
|
||||||
|
import "/js/components/switch-component.js"
|
||||||
|
|
||||||
|
//Export statements
|
||||||
|
export let user = null
|
||||||
|
|
||||||
|
// Main code
|
||||||
|
let emailInput
|
||||||
|
|
||||||
|
let section
|
||||||
|
let saveEmailButton
|
||||||
|
let changePasswordInputDiv
|
||||||
|
let changePasswordMsg
|
||||||
|
let savePasswordButton
|
||||||
|
let passwordInput
|
||||||
|
let changePasswordDiv
|
||||||
|
let passwordVisibilityButton
|
||||||
|
let emailMsg
|
||||||
|
let passwordDiv
|
||||||
|
let emailDiv
|
||||||
|
let emailInputDiv
|
||||||
|
let prevEmail
|
||||||
|
|
||||||
|
function showSaveButton(button) {
|
||||||
|
prevEmail = emailInput.value
|
||||||
|
button.style.display = "initial"
|
||||||
|
emailMsg.style.display = "inline"
|
||||||
|
let windowWidth = window.innerWidth
|
||||||
|
if (windowWidth<1100) {
|
||||||
|
emailInputDiv.style.marginTop = "1rem"
|
||||||
|
emailDiv.style.flexDirection = "column"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//emailInput.style.width = "19rem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveEmail() {
|
||||||
|
let email = emailInput.value
|
||||||
|
if (AuthTools.checkEmail(email,emailMsg)) {
|
||||||
|
if (email!=user.email) {
|
||||||
|
AuthTools.changeUser("email",email,user)
|
||||||
|
}
|
||||||
|
resetEmailField()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetEmailField() {
|
||||||
|
if (prevEmail!=undefined) {
|
||||||
|
emailInput.value = prevEmail
|
||||||
|
}
|
||||||
|
emailInput.style.width = "100%"
|
||||||
|
emailMsg.style.display = "none"
|
||||||
|
emailDiv.style.flexDirection = "row"
|
||||||
|
emailInputDiv.style.marginTop = "0rem"
|
||||||
|
saveEmailButton.style.display = "none"
|
||||||
|
emailMsg.innerHTML = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
function launchChangePassword() {
|
||||||
|
let windowWidth = window.innerWidth
|
||||||
|
if (windowWidth<1100) {
|
||||||
|
changePasswordInputDiv.style.display = "flex";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
changePasswordInputDiv.style.display = "initial";
|
||||||
|
}
|
||||||
|
changePasswordDiv.style.display = "none";
|
||||||
|
passwordInput.focus()
|
||||||
|
}
|
||||||
|
|
||||||
|
function savePassword() {
|
||||||
|
let password = passwordInput.value
|
||||||
|
if (AuthTools.checkPassword(password,changePasswordMsg)) {
|
||||||
|
if (password!=user.password) {
|
||||||
|
AuthTools.changeUser("password",password,user)
|
||||||
|
}
|
||||||
|
changePasswordMsg.innerHTML = ""
|
||||||
|
resetPasswordField()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetPasswordField() {
|
||||||
|
changePasswordInputDiv.style.display = "none";
|
||||||
|
changePasswordDiv.style.display = "initial";
|
||||||
|
changePasswordMsg.innerHTML = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
function fillFields() {
|
||||||
|
if (user!=null && Object.keys(user).length!=0 && section!=undefined) {
|
||||||
|
emailInput.value = user.email
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setTimeout(fillFields, 10)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function resizeInput(el) {
|
||||||
|
el.nextElementSibling.innerHTML = el.value
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
|
||||||
|
fillFields()
|
||||||
|
|
||||||
|
document.addEventListener("click", function(event) {
|
||||||
|
if (passwordDiv.focused) {
|
||||||
|
resetEmailField()
|
||||||
|
}
|
||||||
|
else if (emailDiv.focused) {
|
||||||
|
resetPasswordField()
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
resetEmailField()
|
||||||
|
resetPasswordField()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<section bind:this={section} id="general-section">
|
||||||
|
<h2 class="title-highlight">General</h2>
|
||||||
|
<div bind:this={emailDiv} on:mouseenter={emailDiv.focused=true} on:mouseleave={emailDiv.focused=false}>
|
||||||
|
<div class="title-msg">
|
||||||
|
<span>Email:</span>
|
||||||
|
<span bind:this={emailMsg} id="signup-email-msg"></span>
|
||||||
|
</div>
|
||||||
|
<div bind:this={emailInputDiv} id="emailInputDiv">
|
||||||
|
<button bind:this={saveEmailButton} id="save-email" class="save-button" on:click={saveEmail}>save</button>
|
||||||
|
<div class="input-wrapper">
|
||||||
|
<input bind:this={emailInput} id="emailInput" class="text-input" type="text" on:click={() => showSaveButton(saveEmailButton)} on:input={() => resizeInput(emailInput)}>
|
||||||
|
<div class="ghost-input"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div bind:this={passwordDiv} on:mouseenter={passwordDiv.focused=true} on:mouseleave={passwordDiv.focused=false} id="change-password-line-wrapper">
|
||||||
|
<div id="change-password-line">
|
||||||
|
<div class="title-msg">
|
||||||
|
<span>Password:</span>
|
||||||
|
<span bind:this={changePasswordMsg} id="signup-password-msg"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div bind:this={changePasswordDiv} id="change-password-div">
|
||||||
|
<button id="change-password" on:click={launchChangePassword}>change
|
||||||
|
<object type="image/svg+xml" data="/img/profile/icons/pencil.svg" title="pencil-icon"></object>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div bind:this={changePasswordInputDiv} id="change-password-input-div">
|
||||||
|
<button bind:this={savePasswordButton} id="save-password" class="save-button" on:click={savePassword}>save</button>
|
||||||
|
<input bind:this={passwordInput} id="passwordInput" class="text-input" type="password">
|
||||||
|
<button bind:this={passwordVisibilityButton} class="eye-icon" on:click="{() => AuthTools.changePasswordVisibility(passwordVisibilityButton)}">
|
||||||
|
<object type="image/svg+xml" data="/img/auth/eye_icon.svg" title="eye icon"></object>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
@import '/css/common.css';
|
||||||
|
|
||||||
|
/*---General section-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
.ghost-input {
|
||||||
|
display: block;
|
||||||
|
visibility: hidden;
|
||||||
|
height: 0;
|
||||||
|
|
||||||
|
padding-left: 0.5rem;
|
||||||
|
padding-right: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-wrapper {
|
||||||
|
display: inline-block;
|
||||||
|
max-width: calc(100% - 10rem);
|
||||||
|
min-width: 0rem;
|
||||||
|
height: 2.5rem;
|
||||||
|
position: relative;
|
||||||
|
right: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
font-size: 1.15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#general-section {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
#general-section h2 {
|
||||||
|
margin: auto;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#general-section >div {
|
||||||
|
height: 3.5rem;
|
||||||
|
padding-bottom: 0.75rem;
|
||||||
|
padding-top: 0.75rem;
|
||||||
|
border-bottom: 0.14rem solid;
|
||||||
|
border-color: #cdcdcd;
|
||||||
|
}
|
||||||
|
|
||||||
|
#general-section >div >:first-child {
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add padding to every line to center the diving line*/
|
||||||
|
#general-section >div:last-child {
|
||||||
|
padding-bottom: 0.75rem;
|
||||||
|
padding-top: 0.75rem;
|
||||||
|
border-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#general-section >div div,
|
||||||
|
#general-section >div input,
|
||||||
|
#general-section >div :not(:first-child) input {
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 1.15rem;
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
color: #292222;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#general-section >div>:last-child {
|
||||||
|
padding-right: 1.35rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-input {
|
||||||
|
position: relative;
|
||||||
|
width: 20.475rem;
|
||||||
|
direction: rtl;
|
||||||
|
border: 0;
|
||||||
|
outline: none;
|
||||||
|
bottom: 0.341rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---Email-------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#emailInput {
|
||||||
|
position: relative;
|
||||||
|
right: 0;
|
||||||
|
top: 0.1rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#save-email {
|
||||||
|
display: none;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#signup-email-msg,
|
||||||
|
#signup-password-msg {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
color:red;
|
||||||
|
font-weight: 400;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
#signup-email-msg {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#general-section >div:nth-child(2) {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
#emailInputDiv {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: right;
|
||||||
|
align-items: center;
|
||||||
|
height: 2rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-msg {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-msg * {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---Change password-------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#change-password-line {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
#change-password-div {
|
||||||
|
width: 9.3rem;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#change-password {
|
||||||
|
position: absolute;
|
||||||
|
cursor: pointer;
|
||||||
|
width: 8rem;
|
||||||
|
height: 2.73rem;
|
||||||
|
font-size: 1.15rem;
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
font-weight: 500;
|
||||||
|
text-align: right;
|
||||||
|
padding-right: 2rem;
|
||||||
|
margin-top: -0.55rem;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#change-password > object {
|
||||||
|
pointer-events: none;
|
||||||
|
position: absolute;
|
||||||
|
width: 1.5rem;
|
||||||
|
right: 0.0rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#change-password-input-div {
|
||||||
|
display: none;
|
||||||
|
float: right;
|
||||||
|
position: relative;
|
||||||
|
margin-top: -1.7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#passwordInput {
|
||||||
|
width: 15rem;
|
||||||
|
right: 0.65rem;
|
||||||
|
margin-left: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.save-button {
|
||||||
|
position: relative;
|
||||||
|
bottom: 0.34rem;
|
||||||
|
margin-right: 0.6rem;
|
||||||
|
height: 2.73rem;
|
||||||
|
width: 4.778rem;
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
font-size: 1.15rem;
|
||||||
|
color: white;
|
||||||
|
background-color: var(--red);
|
||||||
|
border-color: var(--red);
|
||||||
|
border-radius: 0.512rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#save-password {
|
||||||
|
bottom: 0.6rem
|
||||||
|
}
|
||||||
|
|
||||||
|
.eye-icon {
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
cursor: pointer;
|
||||||
|
opacity: 0.25;
|
||||||
|
height: 2.2rem;
|
||||||
|
width: 1.7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.eye-icon * {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@media only screen and (max-width: 1100px) {
|
||||||
|
|
||||||
|
#change-password-line-wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: auto;
|
||||||
|
min-height: 4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#change-password-input-div {
|
||||||
|
margin-top: 1rem;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
#general-section >div:nth-child(2) {
|
||||||
|
height: auto;
|
||||||
|
min-height: 4rem;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
#passwordInput {
|
||||||
|
width: 100%;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#emailInput {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#save-password {
|
||||||
|
bottom: 0rem
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,300 @@
|
||||||
|
<svelte:options tag="profile-groups" />
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
// Import statements
|
||||||
|
import { onMount, getContext } from 'svelte'
|
||||||
|
import { writable } from 'svelte/store'
|
||||||
|
import { getData } from "/js/libraries/serverTools.js"
|
||||||
|
|
||||||
|
//Import components
|
||||||
|
import "/js/components/select-component.js"
|
||||||
|
import "/js/components/switch-component.js"
|
||||||
|
|
||||||
|
//Export statements
|
||||||
|
export let groups = null
|
||||||
|
|
||||||
|
// Main code
|
||||||
|
let section
|
||||||
|
let user_groups
|
||||||
|
let content = writable({})
|
||||||
|
let loaded = writable(0)
|
||||||
|
|
||||||
|
let membersInput
|
||||||
|
let saveMembersButton
|
||||||
|
let membersInputDiv
|
||||||
|
|
||||||
|
let contactInput
|
||||||
|
let saveContactButton
|
||||||
|
let contactInputDiv
|
||||||
|
|
||||||
|
let locale = "en"
|
||||||
|
|
||||||
|
let inputContact
|
||||||
|
let inputMembers
|
||||||
|
|
||||||
|
function groups_callback(response) {
|
||||||
|
user_groups = JSON.parse(response)
|
||||||
|
inputContact = getContact(user_groups[0].contact)
|
||||||
|
inputMembers = user_groups[0].members
|
||||||
|
loaded.update((val) => {
|
||||||
|
return val + 1
|
||||||
|
})
|
||||||
|
}
|
||||||
|
getData("/xx/get_user_groups",groups_callback)
|
||||||
|
|
||||||
|
function getAddress(g) {
|
||||||
|
let location = [g.country,g.state,g.town].filter(x => x!=null)
|
||||||
|
return location.map(x => locale=="en" ? x : translate($content,x)).join(", ")
|
||||||
|
}
|
||||||
|
|
||||||
|
function getContact(c) {
|
||||||
|
if (c==null) {
|
||||||
|
return "https://discord.gg/Qk8KUk787z"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function launchChangeLocation() {
|
||||||
|
showLocationOverlay()
|
||||||
|
}
|
||||||
|
|
||||||
|
function launchChangeMembers() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function showSaveButton(button) {
|
||||||
|
button.style.display = "initial"
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetMembersField() {
|
||||||
|
saveMembersButton.style.display = "none"
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetContactField() {
|
||||||
|
saveContactButton.style.display = "none"
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveMembers() {
|
||||||
|
let email = emailInput.value
|
||||||
|
if (AuthTools.checkEmail(email,emailMsg)) {
|
||||||
|
if (email!=user.email) {
|
||||||
|
AuthTools.changeUser("email",email,user)
|
||||||
|
}
|
||||||
|
resetMembersField()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveContact() {}
|
||||||
|
|
||||||
|
let showLocationOverlay = getContext("profile-component")
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
|
||||||
|
document.addEventListener("click", function(event) {
|
||||||
|
if (membersInputDiv.focused) {
|
||||||
|
resetContactField()
|
||||||
|
}
|
||||||
|
else if (contactInputDiv.focused) {
|
||||||
|
resetMembersField()
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
resetMembersField()
|
||||||
|
resetContactField()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#key $loaded}
|
||||||
|
{#if $loaded==1}
|
||||||
|
|
||||||
|
<h2>Groups</h2>
|
||||||
|
<h3>My group</h3>
|
||||||
|
<section bind:this={section} class="entries-section">
|
||||||
|
<div>
|
||||||
|
<div class="change-field-line">
|
||||||
|
<span>Location:</span>
|
||||||
|
<div class="change-field-div">
|
||||||
|
<button class="change-field-button" on:click={launchChangeLocation}>{getAddress(user_groups[0])}
|
||||||
|
<object type="image/svg+xml" data="/img/profile/icons/pencil.svg" title="pencil-icon" class="pencil"></object>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="change-field-line">
|
||||||
|
<span>Members:</span>
|
||||||
|
<div bind:this={membersInputDiv} class="change-field-div input-pencil">
|
||||||
|
<button bind:this={saveMembersButton} class="save-button" on:click={saveMembers}>save</button>
|
||||||
|
<input bind:this={membersInput} id="membersInput" class="text-input" type="text" bind:value={inputMembers} on:click={() => showSaveButton(saveMembersButton)}>
|
||||||
|
<button class="text-input-pencil-button" on:click={() => membersInput.focus()}>
|
||||||
|
<object type="image/svg+xml" data="/img/profile/icons/pencil.svg" title="pencil-icon" class="pencil"></object>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="change-field-line">
|
||||||
|
<span>Contact:</span>
|
||||||
|
<div bind:this={contactInputDiv} class="change-field-div input-pencil">
|
||||||
|
<button bind:this={saveContactButton} class="save-button" on:click={saveContact}>save</button>
|
||||||
|
<input bind:this={contactInput} id="contactInput" class="text-input" type="text" bind:value={inputContact} on:click={() => showSaveButton(saveContactButton)}>
|
||||||
|
<button class="text-input-pencil-button" on:click={() => contactInput.focus()}>
|
||||||
|
<object type="image/svg+xml" data="/img/profile/icons/pencil.svg" title="pencil-icon" class="pencil"></object>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<h3>Requests</h3>
|
||||||
|
<section bind:this={section} class="entries-section">
|
||||||
|
|
||||||
|
</section>
|
||||||
|
{/if}
|
||||||
|
{/key}
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
@import '/css/common.css';
|
||||||
|
|
||||||
|
.text-input-pencil-button {
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
height: 2.3rem;
|
||||||
|
width: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-input-pencil-button object {
|
||||||
|
top: 0rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pencil {
|
||||||
|
pointer-events: none;
|
||||||
|
position: absolute;
|
||||||
|
width: 1.5rem;
|
||||||
|
right: 0.0rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.change-field-div input.text-input {
|
||||||
|
position: relative;
|
||||||
|
width: 20.475rem;
|
||||||
|
direction: rtl;
|
||||||
|
border: 0;
|
||||||
|
outline: none;
|
||||||
|
bottom: 0.341rem;
|
||||||
|
position: relative;
|
||||||
|
top: 0.1rem;
|
||||||
|
font-style: var(--sans-serif,sans-serif)
|
||||||
|
}
|
||||||
|
|
||||||
|
#membersInput {
|
||||||
|
width: 5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#contactInput {
|
||||||
|
max-width: 18rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.save-button {
|
||||||
|
position: relative;
|
||||||
|
bottom: 0.34rem;
|
||||||
|
margin-right: 0.6rem;
|
||||||
|
height: 2.73rem;
|
||||||
|
width: 4.778rem;
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
font-size: 1.15rem;
|
||||||
|
color: white;
|
||||||
|
background-color: var(--red);
|
||||||
|
border-color: var(--red);
|
||||||
|
border-radius: 0.512rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entries-section {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entries-section >div {
|
||||||
|
height: 3.5rem;
|
||||||
|
padding-bottom: 0.75rem;
|
||||||
|
padding-top: 0.75rem;
|
||||||
|
border-bottom: 0.14rem solid;
|
||||||
|
border-color: #cdcdcd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add padding to every line to center the diving line*/
|
||||||
|
.entries-section >div:last-child {
|
||||||
|
padding-bottom: 0.75rem;
|
||||||
|
padding-top: 0.75rem;
|
||||||
|
border-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---Change field-------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
.change-field-line {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.change-field-div {
|
||||||
|
width: max-content;
|
||||||
|
}
|
||||||
|
|
||||||
|
.change-field-button {
|
||||||
|
position: relative;
|
||||||
|
cursor: pointer;
|
||||||
|
height: 2.73rem;
|
||||||
|
font-size: 1.15rem;
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
font-weight: 500;
|
||||||
|
text-align: right;
|
||||||
|
padding-right: 1.9rem;
|
||||||
|
margin-top: -0.55rem;
|
||||||
|
background-color: transparent;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---General section-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-container {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry {
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
font-size: 1.15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
font-size: 1.15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#groups-section {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
#groups-section h2 {
|
||||||
|
margin: auto;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<svelte:options tag="profile-parties" />
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
// Import statements
|
||||||
|
import { onMount } from 'svelte'
|
||||||
|
import * as AuthTools from "/js/libraries/authTools.js"
|
||||||
|
|
||||||
|
// Main code
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -12,8 +12,8 @@ server {
|
||||||
add_header Pragma public;
|
add_header Pragma public;
|
||||||
add_header Cache-Control "public";
|
add_header Cache-Control "public";
|
||||||
}
|
}
|
||||||
location ~* \.(?:css|js|json)$ {
|
location ~* \.(?:css|js|json|txt)$ {
|
||||||
expires 1d;
|
expires 1h;
|
||||||
add_header Pragma public;
|
add_header Pragma public;
|
||||||
add_header Cache-Control "public";
|
add_header Cache-Control "public";
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ server {
|
||||||
add_header Pragma public;
|
add_header Pragma public;
|
||||||
add_header Cache-Control "public";
|
add_header Cache-Control "public";
|
||||||
}
|
}
|
||||||
|
|
||||||
location /js/ {}
|
location /js/ {}
|
||||||
location /css {}
|
location /css {}
|
||||||
location /img/ {}
|
location /img/ {}
|
||||||
|
@ -29,18 +30,29 @@ server {
|
||||||
location /fonts/ {}
|
location /fonts/ {}
|
||||||
location /favicon.ico {}
|
location /favicon.ico {}
|
||||||
location /robots.txt {}
|
location /robots.txt {}
|
||||||
|
location /sitemap.txt {}
|
||||||
location ~ /loaderio-58f125137ee61345d68285d88016ce2a {}
|
location ~ /loaderio-58f125137ee61345d68285d88016ce2a {}
|
||||||
|
|
||||||
location / {
|
map $request_uri $language_redirect {
|
||||||
proxy_pass http://127.0.0.1:8001/;
|
~^/(check-login|login-post|logout|signup-post|signup-google|change-user|get-user|confirm-email) ""; # Excluded URIs, no redirection
|
||||||
|
~^/([a-zA-Z]{2})/ ""; # Matches URIs that start with a two-letter language code and sets it to an empty string
|
||||||
|
default /en; # Redirects all other URIs to the /en prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
rewrite https://www.libsoc.org/communities https://www.libsoc.org/en/communes permanent;
|
location / {
|
||||||
|
rewrite ^ $language_redirect$request_uri? permanent;
|
||||||
|
proxy_pass http://127.0.0.1:8001;
|
||||||
|
}
|
||||||
|
|
||||||
|
rewrite /en/communities /en/communes permanent;
|
||||||
|
rewrite /en/coops /en/cooperatives permanent;
|
||||||
|
rewrite /en/affiliates /en/partners permanent;
|
||||||
|
|
||||||
|
|
||||||
listen 443 http3;
|
listen 443 http3;
|
||||||
listen 443 ssl http2;
|
listen 443 ssl http2;
|
||||||
ssl_certificate /etc/letsencrypt/live/libsoc.org/fullchain.pem; # managed by Certbot
|
ssl_certificate /etc/letsencrypt/live/libsoc.org-0001/fullchain.pem; # managed by Certbot
|
||||||
ssl_certificate_key /etc/letsencrypt/live/libsoc.org/privkey.pem; # managed by Certbot
|
ssl_certificate_key /etc/letsencrypt/live/libsoc.org-0001/privkey.pem; # managed by Certbot
|
||||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||||
|
|
||||||
|
@ -51,6 +63,7 @@ server {
|
||||||
|
|
||||||
resolver 1.1.1.1 1.0.0.1 valid=300s;
|
resolver 1.1.1.1 1.0.0.1 valid=300s;
|
||||||
resolver_timeout 5s;
|
resolver_timeout 5s;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
|
@ -59,17 +72,20 @@ server {
|
||||||
server_name libsoc.org;
|
server_name libsoc.org;
|
||||||
|
|
||||||
listen 443 ssl http2; # managed by Certbot
|
listen 443 ssl http2; # managed by Certbot
|
||||||
ssl_certificate /etc/letsencrypt/live/libsoc.org/fullchain.pem; # managed by Certbot
|
ssl_certificate /etc/letsencrypt/live/libsoc.org-0001/fullchain.pem; # managed by Certbot
|
||||||
ssl_certificate_key /etc/letsencrypt/live/libsoc.org/privkey.pem; # managed by Certbot
|
ssl_certificate_key /etc/letsencrypt/live/libsoc.org-0001/privkey.pem; # managed by Certbot
|
||||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
return 301 https://www.libsoc.org$request_uri;
|
|
||||||
|
|
||||||
listen 80;
|
return 301 https://www.libsoc.org$request_uri;
|
||||||
listen [::]:80;
|
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
|
||||||
|
server_name www.libsoc.org libsoc.org;
|
||||||
|
|
||||||
server_name www.libsoc.org libsoc.org;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,12 +8,9 @@ function up()
|
||||||
primary_key()
|
primary_key()
|
||||||
column(:email, :string)
|
column(:email, :string)
|
||||||
column(:password, :string, limit = 100)
|
column(:password, :string, limit = 100)
|
||||||
column(:name, :string)
|
|
||||||
column(:profile_picture, :int)
|
|
||||||
column(:country, :int)
|
|
||||||
column(:newsletter, :bool)
|
|
||||||
column(:notifications, :int)
|
|
||||||
column(:confirmation_code, :string)
|
column(:confirmation_code, :string)
|
||||||
|
column(:google_id, :string)
|
||||||
|
column(:verified, :bool)
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,12 @@ function up()
|
||||||
column(:latitude, :float)
|
column(:latitude, :float)
|
||||||
column(:longitude, :float)
|
column(:longitude, :float)
|
||||||
column(:members, :int)
|
column(:members, :int)
|
||||||
|
column(:user_id, :int)
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
add_foreign_key(:groups,:user_id,:users,:id)
|
||||||
|
add_index(:groups, :user_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
function down()
|
function down()
|
||||||
|
|
|
@ -18,7 +18,6 @@ function up()
|
||||||
column(:name, :string)
|
column(:name, :string)
|
||||||
column(:market, :string)
|
column(:market, :string)
|
||||||
column(:website, :string)
|
column(:website, :string)
|
||||||
column(:description, :string)
|
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -0,0 +1,39 @@
|
||||||
|
module CreateTableGroupsRequests
|
||||||
|
|
||||||
|
import SearchLight.Migrations: create_table, column, primary_key, add_index, drop_table
|
||||||
|
|
||||||
|
include("../../lib/DatabaseSupport.jl")
|
||||||
|
using .DatabaseSupport
|
||||||
|
|
||||||
|
function up()
|
||||||
|
create_table(:groups_requests) do
|
||||||
|
[
|
||||||
|
primary_key()
|
||||||
|
column(:group_id, :integer)
|
||||||
|
column(:user_id, :integer)
|
||||||
|
column(:country, :string)
|
||||||
|
column(:state, :string)
|
||||||
|
column(:town, :string)
|
||||||
|
column(:contact, :string)
|
||||||
|
column(:latitude, :float)
|
||||||
|
column(:longitude, :float)
|
||||||
|
column(:verified, :bool)
|
||||||
|
column(:added, :bool)
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
add_foreign_key(:groups_requests,:user_id,:users,:id)
|
||||||
|
add_foreign_key(:groups_requests,:group_id,:groups,:id)
|
||||||
|
|
||||||
|
add_index(:groups_requests, :user_id)
|
||||||
|
|
||||||
|
set_default("groups_requests","verified",false)
|
||||||
|
set_default("groups_requests","added",false)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function down()
|
||||||
|
drop_table(:groups_requests)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,24 @@
|
||||||
|
module CreateTableGroupsUsers
|
||||||
|
|
||||||
|
import SearchLight.Migrations: create_table, column, primary_key, add_index, drop_table
|
||||||
|
|
||||||
|
function up()
|
||||||
|
create_table(:groups_users) do
|
||||||
|
[
|
||||||
|
primary_key()
|
||||||
|
column(:user_id, :int)
|
||||||
|
column(:group_id, :int)
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
add_foreign_key(:groups_users,:user_id,:users,:id)
|
||||||
|
add_foreign_key(:groups_users,:group_id,:groups,:id)
|
||||||
|
add_index(:groups_users, :user_id)
|
||||||
|
add_index(:groups_users, :group_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
function down()
|
||||||
|
drop_table(:groups_users)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,24 @@
|
||||||
|
module CreateTableCommunesUsers
|
||||||
|
|
||||||
|
import SearchLight.Migrations: create_table, column, primary_key, add_index, drop_table
|
||||||
|
|
||||||
|
function up()
|
||||||
|
create_table(:communes_users) do
|
||||||
|
[
|
||||||
|
primary_key()
|
||||||
|
column(:user_id, :int)
|
||||||
|
column(:commune_id, :int)
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
add_foreign_key(:communes_users,:user_id,:users,:id)
|
||||||
|
add_foreign_key(:communes_users,:commune_id,:communes,:id)
|
||||||
|
add_index(:communes_users, :user_id)
|
||||||
|
add_index(:communes_users, :commune_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
function down()
|
||||||
|
drop_table(:communes_users)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,24 @@
|
||||||
|
module CreateTableCooperativesUsers
|
||||||
|
|
||||||
|
import SearchLight.Migrations: create_table, column, primary_key, add_index, drop_table
|
||||||
|
|
||||||
|
function up()
|
||||||
|
create_table(:cooperatives_users) do
|
||||||
|
[
|
||||||
|
primary_key()
|
||||||
|
column(:user_id, :int)
|
||||||
|
column(:cooperative_id, :int)
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
add_foreign_key(:cooperatives_users,:user_id,:users,:id)
|
||||||
|
add_foreign_key(:cooperatives_users,:cooperative_id,:cooperatives,:id)
|
||||||
|
add_index(:cooperatives_users, :user_id)
|
||||||
|
add_index(:cooperatives_users, :cooperative_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
function down()
|
||||||
|
drop_table(:cooperatives_users)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,24 @@
|
||||||
|
module CreateTablePartiesUsers
|
||||||
|
|
||||||
|
import SearchLight.Migrations: create_table, column, primary_key, add_index, drop_table
|
||||||
|
|
||||||
|
function up()
|
||||||
|
create_table(:parties_users) do
|
||||||
|
[
|
||||||
|
primary_key()
|
||||||
|
column(:user_id, :int)
|
||||||
|
column(:party_id, :int)
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
add_foreign_key(:parties_users,:user_id,:users,:id)
|
||||||
|
add_foreign_key(:parties_users,:party_id,:parties,:id)
|
||||||
|
add_index(:parties_users, :user_id)
|
||||||
|
add_index(:parties_users, :party_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
function down()
|
||||||
|
drop_table(:parties_users)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,27 @@
|
||||||
|
module Cookies
|
||||||
|
|
||||||
|
using HTTP, Dates, Genie
|
||||||
|
|
||||||
|
export set_cookies, set_remember, remove_remember
|
||||||
|
|
||||||
|
function set_cookies(params)
|
||||||
|
request = params[:REQUEST]
|
||||||
|
response = params[:RESPONSE]
|
||||||
|
if !occursin("__genierememberme",string(request))
|
||||||
|
headers = Genie.Responses.getheaders(response)
|
||||||
|
headers["Set-Cookie"] = replace(headers["Set-Cookie"],"Max-Age=2592000;" => "")
|
||||||
|
Genie.Responses.setheaders!(response,headers)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#=
|
||||||
|
function set_remember(params)
|
||||||
|
#cookie_remember = HTTP.Cookies.Cookie("__genieremember", params[:SESSION].id, path="/", expires=now() + Dates.Month(1), httponly=true,samesite=HTTP.Cookies.SameSiteLaxMode)
|
||||||
|
#HTTP.Cookies.addcookie!(params[:RESPONSE],cookie_remember)
|
||||||
|
end
|
||||||
|
|
||||||
|
function remove_remember(params)
|
||||||
|
#cookie_remember = HTTP.Cookies.Cookie("__genieremember", params[:SESSION].#id, path="/", httponly=true,samesite=HTTP.Cookies.SameSiteLaxMode)
|
||||||
|
#HTTP.Cookies.addcookie!(params[:RESPONSE],cookie_remember)
|
||||||
|
end
|
||||||
|
=#
|
||||||
|
end
|
|
@ -0,0 +1,53 @@
|
||||||
|
module EmailSupport
|
||||||
|
|
||||||
|
using Genie, Genie.Requests, Genie.Renderer.Json
|
||||||
|
using SMTPClient, JSON3, Random
|
||||||
|
|
||||||
|
export send_email
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------
|
||||||
|
|
||||||
|
function send_email(receiver,subject,message)
|
||||||
|
url = "smtps://mail.privateemail.com:465"
|
||||||
|
rcpt = ["<"*receiver*">","<info@chrn.health>"]
|
||||||
|
from = "<no-reply@chrn.health>"
|
||||||
|
|
||||||
|
# Message body as RFC5322 within an IO
|
||||||
|
to = [receiver]
|
||||||
|
from = "no-reply@chrn.health"
|
||||||
|
replyto = "Chiron <info@chrn.health>"
|
||||||
|
body = get_body(to, from, subject, message; replyto)
|
||||||
|
|
||||||
|
resp = send(url, rcpt, from, body, opt)
|
||||||
|
return resp
|
||||||
|
end
|
||||||
|
|
||||||
|
# Load credentails
|
||||||
|
function load_credentials_inner(path)
|
||||||
|
credentials_text = open(joinpath(path,"credentials.json")) do f
|
||||||
|
read(f, String)
|
||||||
|
end
|
||||||
|
credentials_json = JSON3.read(credentials_text)
|
||||||
|
opt.username = credentials_json[:username]
|
||||||
|
opt.passwd = credentials_json[:password]
|
||||||
|
return
|
||||||
|
end
|
||||||
|
function load_credentials(path)
|
||||||
|
load_credentials_inner(path)
|
||||||
|
end
|
||||||
|
function load_credentials()
|
||||||
|
path = @__DIR__
|
||||||
|
load_credentials_inner(path)
|
||||||
|
end
|
||||||
|
|
||||||
|
opt = SendOptions(
|
||||||
|
isSSL = true,
|
||||||
|
username = "",
|
||||||
|
passwd = ""
|
||||||
|
)
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------
|
||||||
|
|
||||||
|
load_credentials()
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"username": "info@chrn.health",
|
||||||
|
"password": "Ur4tdgishg"
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
using Genie
|
||||||
|
|
||||||
|
import Server.AuthenticationController
|
||||||
|
import Server.Users
|
||||||
|
import SearchLight: findone
|
||||||
|
|
||||||
|
export current_user
|
||||||
|
current_user() = findone(Users.User, id = get_authentication())
|
|
@ -0,0 +1,171 @@
|
||||||
|
|
||||||
|
label {
|
||||||
|
font-size: 1.3rem;
|
||||||
|
font-family: var(--sans-serif);
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-pane {
|
||||||
|
position: relative;
|
||||||
|
padding: 3.4rem;
|
||||||
|
padding-top: 3.4rem;
|
||||||
|
padding-bottom: 3.4rem;
|
||||||
|
width: 30rem;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-title {
|
||||||
|
position: relative;
|
||||||
|
top: 0.2rem;
|
||||||
|
margin-bottom: 2.7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-label {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.authEmailInput, .authPasswordInput {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 0.34rem;
|
||||||
|
color: #353535;
|
||||||
|
height: 2.73rem;
|
||||||
|
padding-left: 0.34rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.authEmailInput {
|
||||||
|
margin-bottom: 0.682rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-button {
|
||||||
|
margin-top: 1.365rem;
|
||||||
|
height: 3.412rem;
|
||||||
|
width: 100%;
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
font-size: 1.3rem;
|
||||||
|
color: white;
|
||||||
|
background-color: var(--red);
|
||||||
|
border-color: var(--red);
|
||||||
|
border-radius: 0.512rem;
|
||||||
|
filter: drop-shadow(0.068rem 0.136rem 0.068rem rgb(0 0 0 / 0.4));
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-button:active {
|
||||||
|
background-color: var(--darker-pink);
|
||||||
|
}
|
||||||
|
|
||||||
|
#email-msg,#password-msg {
|
||||||
|
display: inline;
|
||||||
|
color:red;
|
||||||
|
font-family: var(--sans-serif,sans-serif);
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-line {
|
||||||
|
margin-top: 1.5rem;
|
||||||
|
width: 100%;
|
||||||
|
height: 0.07rem;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 0.1rem;
|
||||||
|
background: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-methods-group {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: auto ; /*auto auto*/
|
||||||
|
justify-content: center;
|
||||||
|
gap: 2.7rem;
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-methods-group img {
|
||||||
|
height: auto;
|
||||||
|
width: 3.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-methods-group> div {
|
||||||
|
position: relative;
|
||||||
|
border-radius: 6.8rem;
|
||||||
|
width: 3.4rem;
|
||||||
|
height: 3.4rem;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#google-btn {
|
||||||
|
position: absolute;
|
||||||
|
top: -0.8rem;
|
||||||
|
left: -0.8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#google-logo {
|
||||||
|
position: relative;
|
||||||
|
background: white;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#google-btn-wrapper {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
#google-btn div {
|
||||||
|
position: absolute;
|
||||||
|
height: 5rem;
|
||||||
|
width: 5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#google-btn iframe {
|
||||||
|
position: absolute;
|
||||||
|
height: 10rem;
|
||||||
|
width: 10rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.password-field {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.eye-icon {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
cursor: pointer;
|
||||||
|
opacity: 0.25;
|
||||||
|
top: 2.6rem;
|
||||||
|
right: 0.8rem;
|
||||||
|
width: 1.7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.eye-icon * {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#forgot-password {
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
height: 2rem;
|
||||||
|
color:#5f5f5f;
|
||||||
|
margin-left: auto;
|
||||||
|
width: max-content;
|
||||||
|
font-family: var(--sans-serif);
|
||||||
|
font-size: 1.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#remember-me {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 1rem;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#remember-me-checkbox {
|
||||||
|
min-height: 1.5rem;
|
||||||
|
min-width: 1.5rem;
|
||||||
|
flex: 0;
|
||||||
|
accent-color: var(--gray);
|
||||||
|
}
|
||||||
|
|
||||||
|
#remember-me label {
|
||||||
|
position: relative;
|
||||||
|
margin-top: -0.2rem;
|
||||||
|
color: #5f5f5f;
|
||||||
|
}
|
|
@ -1,21 +1,7 @@
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--light-blue:hsl(195, 67%, 95%);
|
--red:#c52a28;
|
||||||
--darker-pink:hsl(344, 60%, 47%);
|
--gray: #5B6970;
|
||||||
--pink:hsl(344, 73%, 57%);
|
|
||||||
--dark-green:hsl(176, 63%, 25%);
|
|
||||||
--green:hsl(147, 33%, 60%);
|
|
||||||
--orange:hsl(30, 97%, 72%);
|
|
||||||
--light-orange: hsl(19, 76%, 72%);
|
|
||||||
--dark-brown:hsl(23, 47%, 20%);
|
|
||||||
--brown:hsl(23, 47%, 30%);
|
|
||||||
--light-brown: hsl(23, 47%, 50%);
|
|
||||||
--dark-pink:hsl(343, 39%, 16%);
|
|
||||||
--red:hsl(359, 72%, 61%);
|
|
||||||
--dark-blue:hsl(217, 25%, 16%);
|
|
||||||
--grey-blue:hsl(223, 13%, 22%);
|
|
||||||
--cream:hsl(34, 43%, 90%);
|
|
||||||
--dark-cream:hsl(33, 26%, 84%);
|
|
||||||
--sans-serif: "OpenSans";
|
--sans-serif: "OpenSans";
|
||||||
--serif: "Lora";
|
--serif: "Lora";
|
||||||
}
|
}
|
||||||
|
@ -48,12 +34,10 @@ body {
|
||||||
|
|
||||||
#content {
|
#content {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: flex;
|
display: grid;
|
||||||
flex-direction: column;
|
grid-template-rows: max-content auto max-content;
|
||||||
justify-content: space-between;
|
|
||||||
height: 100%;
|
height: 100%;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
flex-grow: 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---Fonts---------------------------------------------------------*/
|
/*---Fonts---------------------------------------------------------*/
|
||||||
|
@ -475,9 +459,8 @@ input[type=number]::-webkit-outer-spin-button {
|
||||||
|
|
||||||
.pane {
|
.pane {
|
||||||
background: white;
|
background: white;
|
||||||
border: 0;
|
border: 0.1rem solid rgb(187, 187, 187);
|
||||||
border-radius: 0.635rem;
|
border-radius: 0.635rem;
|
||||||
box-shadow: 0 0 0.314rem rgb(187, 187, 187);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.pane-container {
|
.pane-container {
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
#notifications-div>button {
|
||||||
|
cursor: pointer;
|
||||||
|
margin-left: 0.341rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifications-div>:nth-child(1) {
|
||||||
|
width: 1.706rem;
|
||||||
|
height: 1.706rem;
|
||||||
|
background-color: #ccc;
|
||||||
|
border-radius: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifications-div>:nth-child(2) {
|
||||||
|
width: 2.047rem;
|
||||||
|
height: 2.047rem;
|
||||||
|
background-color: #ccc;
|
||||||
|
border-radius: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifications-div>:nth-child(3) {
|
||||||
|
width: 2.389rem;
|
||||||
|
height: 2.389rem;
|
||||||
|
background-color: #ccc;
|
||||||
|
border-radius: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifications-div>button>div {
|
||||||
|
cursor: pointer;
|
||||||
|
margin: auto;
|
||||||
|
background-color: white;
|
||||||
|
border-radius: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifications-div>:nth-child(1)>div {
|
||||||
|
width: 1.228rem;
|
||||||
|
height: 1.228rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifications-div>:nth-child(2)>div {
|
||||||
|
width: 1.57rem;
|
||||||
|
height: 1.57rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notifications-div>:nth-child(3)>div {
|
||||||
|
width: 1.843rem;
|
||||||
|
height: 1.843rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="#636363" d="M12,9A3,3 0 0,1 15,12A3,3 0 0,1 12,15A3,3 0 0,1 9,12A3,3 0 0,1 12,9M12,4.5C17,4.5 21.27,7.61 23,12C21.27,16.39 17,19.5 12,19.5C7,19.5 2.73,16.39 1,12C2.73,7.61 7,4.5 12,4.5M3.18,12C4.83,15.36 8.24,17.5 12,17.5C15.76,17.5 19.17,15.36 20.82,12C19.17,8.64 15.76,6.5 12,6.5C8.24,6.5 4.83,8.64 3.18,12Z" /></svg>
|
After Width: | Height: | Size: 391 B |
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg height="100%" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;" version="1.1" viewBox="0 0 512 512" width="100%" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:serif="http://www.serif.com/" xmlns:xlink="http://www.w3.org/1999/xlink"><g><path d="M512,256c0,-141.385 -114.615,-256 -256,-256c-141.385,0 -256,114.615 -256,256c0,127.777 93.616,233.685 216,252.89l0,-178.89l-65,0l0,-74l65,0l0,-56.4c0,-64.16 38.219,-99.6 96.695,-99.6c28.009,0 57.305,5 57.305,5l0,63l-32.281,0c-31.801,0 -41.719,19.733 -41.719,39.978l0,48.022l71,0l-11.35,74l-59.65,0l0,178.89c122.385,-19.205 216,-125.113 216,-252.89Z" style="fill:#1877f2;fill-rule:nonzero;"/><path d="M355.65,330l11.35,-74l-71,0l0,-48.022c0,-20.245 9.917,-39.978 41.719,-39.978l32.281,0l0,-63c0,0 -29.297,-5 -57.305,-5c-58.476,0 -96.695,35.44 -96.695,99.6l0,56.4l-65,0l0,74l65,0l0,178.89c13.033,2.045 26.392,3.11 40,3.11c13.608,0 26.966,-1.065 40,-3.11l0,-178.89l59.65,0Z" style="fill:#fff;fill-rule:nonzero;"/></g></svg>
|
After Width: | Height: | Size: 1.1 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 128 128" id="Social_Icons" version="1.1" viewBox="0 0 128 128" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g id="_x31__stroke"><g id="Google"><rect clip-rule="evenodd" fill="none" fill-rule="evenodd" height="128" width="128"/><path clip-rule="evenodd" d="M27.585,64c0-4.157,0.69-8.143,1.923-11.881L7.938,35.648 C3.734,44.183,1.366,53.801,1.366,64c0,10.191,2.366,19.802,6.563,28.332l21.558-16.503C28.266,72.108,27.585,68.137,27.585,64" fill="#FBBC05" fill-rule="evenodd"/><path clip-rule="evenodd" d="M65.457,26.182c9.031,0,17.188,3.2,23.597,8.436L107.698,16 C96.337,6.109,81.771,0,65.457,0C40.129,0,18.361,14.484,7.938,35.648l21.569,16.471C34.477,37.033,48.644,26.182,65.457,26.182" fill="#EA4335" fill-rule="evenodd"/><path clip-rule="evenodd" d="M65.457,101.818c-16.812,0-30.979-10.851-35.949-25.937 L7.938,92.349C18.361,113.516,40.129,128,65.457,128c15.632,0,30.557-5.551,41.758-15.951L86.741,96.221 C80.964,99.86,73.689,101.818,65.457,101.818" fill="#34A853" fill-rule="evenodd"/><path clip-rule="evenodd" d="M126.634,64c0-3.782-0.583-7.855-1.457-11.636H65.457v24.727 h34.376c-1.719,8.431-6.397,14.912-13.092,19.13l20.474,15.828C118.981,101.129,126.634,84.861,126.634,64" fill="#4285F4" fill-rule="evenodd"/></g></g></svg>
|
After Width: | Height: | Size: 1.4 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'><svg enable-background="new 0 0 32 32" height="32px" id="Layer_1" version="1.0" viewBox="0 0 32 32" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><circle clip-rule="evenodd" cx="16" cy="16" fill="#007BB5" fill-rule="evenodd" r="16"/><g><rect fill="#FFFFFF" height="14" width="4" x="7" y="11"/><path d="M20.499,11c-2.791,0-3.271,1.018-3.499,2v-2h-4v14h4v-8c0-1.297,0.703-2,2-2c1.266,0,2,0.688,2,2v8h4v-7 C25,14,24.479,11,20.499,11z" fill="#FFFFFF"/><circle cx="9" cy="8" fill="#FFFFFF" r="2"/></g></g><g/><g/><g/><g/><g/><g/></svg>
|
After Width: | Height: | Size: 732 B |
|
@ -1 +1 @@
|
||||||
<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" fill="#5B6970"><path d="m0 0h16v16h-16z" fill="none"/><path d="m0 8v7h3v-4h3v4h6v-7l-6-5zm10-7-2.4 2 5.4 4.5v5.5h3v-7z"/></svg>
|
<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" fill="none"><path d="m0 8v7h3v-4h3v4h6v-7l-6-5zm10-7-2.4 2 5.4 4.5v5.5h3v-7z" fill="#5B6970"/><path d="m0 0h16v16h-16z"/></svg>
|
Before Width: | Height: | Size: 210 B After Width: | Height: | Size: 210 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m12 2a10 10 0 1 0 10 10 10 10 0 0 0 -10-10zm1 14a1 1 0 0 1 -2 0v-5a1 1 0 0 1 2 0zm-1-7a1 1 0 1 1 1-1 1 1 0 0 1 -1 1z" fill="#5B6970"/><path d="m0 0h24v24h-24z" fill="#fff" opacity="0" transform="matrix(-1 0 0 -1 24 24)"/></svg>
|
After Width: | Height: | Size: 296 B |
|
@ -0,0 +1,3 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36">
|
||||||
|
<path id="logout_FILL0_wght400_GRAD0_opsz48" d="M9,42a2.878,2.878,0,0,1-2.1-.9A2.878,2.878,0,0,1,6,39V9a2.878,2.878,0,0,1,.9-2.1A2.878,2.878,0,0,1,9,6H23.55V9H9V39H23.55v3Zm24.3-9.25L31.15,30.6l5.1-5.1H18.75v-3h17.4l-5.1-5.1,2.15-2.15,8.8,8.8Z" transform="translate(-6 -6)" fill="#5d6162"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 384 B |
|
@ -0,0 +1,3 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="41" height="41" viewBox="0 0 41 41">
|
||||||
|
<image id="edit_FILL0_wght400_GRAD0_opsz48" width="41" height="41" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABjUlEQVRoQ+2Y4W0CMQxGYYNuwAilG5QN2g3KBJRNygSwQbtB2YAyQjfoBtSWOBRFiZ3cnZ0P6ZDyK7njvXyOpdx8due/+Z3zzyaB1glOCRgksKF3Lmn80Nhp70dK4IFgv6/wHTdLrGj85URQBFLwRRIoAi9E+ymUCyfxlJpHEWC2Nxp7QWJLcx/xfEsBLptnGl8BlCTBB/odRSCs+TVBHQokYBJIHVhN4hx1p5uvdwlJ3SYnwfBcaslW6imQgv8lsEVQPrEEd6djDp6f8xLIlQ0fYAZ8FCSExuQjoNU8z3OfD5N4jbpTVsI6AQ2eweLWKda8Zxs1h7c8Ay7wVgJu8BYCrvBjC7jDjynQBH4sgWbwYwg0hR8q0Bx+iAAEfF8BGPg+AlDwtQJw8DUCkPClArDwJQLQ8JoAPLwmcKIFS+GuOugmJV50KyalK+UFHV5LIBQIRSF2vtvc0gS6dVDwNQmkqrLq60FFWVctLU0gfikEfN8EYOA1gaooWy22/jJn7jUJmG+x8gdTAq0T+AcZc54xVe/5CAAAAABJRU5ErkJggg=="/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 849 B |
|
@ -0,0 +1,686 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="account-pic" viewBox="0 0 513 513" enable-background="new 0 0 513 513" xml:space="preserve">
|
||||||
|
<path fill="#EA7B7D" opacity="1.000000" stroke="none" d="M514.000000,236.000000
|
||||||
|
C514.000000,251.020889 514.000000,266.041779 513.649536,281.201965
|
||||||
|
C512.888672,281.849335 512.190796,282.316132 512.111084,282.871674
|
||||||
|
C511.019714,290.475494 510.695221,298.261810 508.845551,305.669434
|
||||||
|
C504.923767,321.375336 501.127411,337.220123 495.550781,352.371674
|
||||||
|
C490.953735,364.861694 484.648285,376.914246 477.675354,388.287201
|
||||||
|
C469.958191,400.874146 461.249268,412.991150 451.799774,424.336212
|
||||||
|
C443.546783,434.244781 433.838074,442.979706 424.431122,451.871979
|
||||||
|
C419.719513,456.325775 414.246552,459.974152 408.756470,463.912781
|
||||||
|
C406.608948,459.028748 404.249908,454.344727 403.158661,449.381897
|
||||||
|
C401.025513,439.680664 400.117157,429.698151 397.773376,420.057770
|
||||||
|
C393.074188,400.728973 384.557465,382.831238 375.020050,365.521027
|
||||||
|
C370.586609,357.474365 364.448792,350.366730 359.100708,342.458130
|
||||||
|
C359.567963,339.037079 360.018005,335.991302 360.566040,332.584503
|
||||||
|
C360.707428,331.478424 360.750854,330.733398 360.890717,329.536377
|
||||||
|
C360.411621,324.276947 359.836090,319.469543 359.273193,314.487061
|
||||||
|
C359.285858,314.312012 359.183441,313.976257 359.182800,313.601257
|
||||||
|
C358.505737,311.450165 357.829315,309.674072 357.096497,307.959045
|
||||||
|
C357.040070,308.020111 357.166382,307.909119 357.151794,307.616943
|
||||||
|
C356.839508,306.841309 356.541809,306.357819 356.198853,305.873474
|
||||||
|
C356.153595,305.872589 356.227966,305.820984 356.195923,305.534912
|
||||||
|
C355.841400,304.789337 355.518951,304.329834 355.107544,303.936646
|
||||||
|
C355.018646,304.003021 355.206238,303.883575 355.201660,303.558167
|
||||||
|
C354.802307,302.493439 354.407501,301.754120 354.014099,301.003906
|
||||||
|
C354.015472,300.993073 353.996704,300.981689 353.974152,300.709167
|
||||||
|
C353.612366,300.027954 353.273102,299.619293 352.827759,298.924225
|
||||||
|
C352.619659,298.461639 352.517670,298.285431 352.363861,297.868530
|
||||||
|
C351.916229,297.361511 351.520416,297.095215 351.106384,296.868866
|
||||||
|
C351.088196,296.908844 351.173798,296.889099 351.129639,296.601501
|
||||||
|
C350.711761,295.891174 350.338104,295.468414 349.980988,295.022186
|
||||||
|
C349.997528,294.998688 349.950073,295.031586 349.907898,294.706573
|
||||||
|
C348.991486,293.459564 348.117218,292.537537 347.137085,291.316650
|
||||||
|
C346.814484,290.655609 346.597687,290.293457 346.404358,289.813019
|
||||||
|
C346.427826,289.694702 346.026001,289.538177 345.831299,289.364624
|
||||||
|
C345.493134,289.092743 345.349701,288.994446 345.110474,288.603455
|
||||||
|
C344.399200,287.814423 343.783722,287.318054 343.097412,286.873566
|
||||||
|
C343.026550,286.925415 343.187195,286.854584 343.139221,286.574432
|
||||||
|
C342.705017,285.895844 342.318726,285.497437 341.947144,285.071167
|
||||||
|
C341.961853,285.043304 341.898895,285.041687 341.825653,284.817505
|
||||||
|
C341.570374,284.314148 341.316101,284.141113 340.860748,283.863190
|
||||||
|
C340.534851,283.381866 340.293518,283.159637 339.918762,282.747803
|
||||||
|
C339.566040,282.306152 339.302551,282.102081 338.925476,281.706421
|
||||||
|
C338.628143,281.275024 338.403107,281.083923 338.024841,280.701233
|
||||||
|
C337.633545,280.251709 337.354034,280.042511 336.967102,279.644562
|
||||||
|
C336.686890,279.215118 336.467560,279.029480 336.081360,278.657837
|
||||||
|
C335.684631,278.193085 335.408264,277.969360 335.026672,277.563873
|
||||||
|
C334.747864,277.155334 334.533020,276.978760 334.153137,276.605957
|
||||||
|
C333.751953,276.122772 333.474518,275.885986 333.151886,275.480957
|
||||||
|
C333.106720,275.312744 332.931213,275.011841 332.844269,274.735840
|
||||||
|
C332.190033,273.954315 331.622772,273.448761 331.033813,272.973236
|
||||||
|
C331.012177,273.003265 331.064667,272.946136 330.995422,272.653015
|
||||||
|
C330.347473,271.846222 329.768768,271.332581 329.121246,270.828735
|
||||||
|
C329.052429,270.838593 329.189789,270.859924 329.123840,270.555267
|
||||||
|
C328.399048,269.473419 327.740234,268.696228 327.045868,267.946045
|
||||||
|
C327.010345,267.973022 327.097870,267.955719 327.064514,267.665863
|
||||||
|
C326.693390,266.921082 326.355591,266.466156 326.017242,266.000183
|
||||||
|
C326.016663,265.989105 325.997223,265.978363 325.930542,265.739441
|
||||||
|
C325.715973,265.179169 325.473114,264.966003 325.148438,264.902954
|
||||||
|
C325.161621,264.944885 325.198792,264.865234 325.160889,264.486053
|
||||||
|
C323.690247,259.741913 322.257446,255.376953 320.813232,250.683548
|
||||||
|
C320.713593,249.926819 320.625397,249.498550 320.616821,248.673187
|
||||||
|
C318.847839,239.206482 316.999298,230.136887 315.425018,220.882874
|
||||||
|
C325.048187,209.279083 335.349365,198.496567 343.515594,186.286224
|
||||||
|
C354.837616,169.357254 364.731812,151.456390 374.865417,133.758698
|
||||||
|
C378.457886,127.484657 380.960876,120.586807 383.978271,113.988556
|
||||||
|
C383.995361,114.003372 383.972076,113.966606 384.223877,113.807907
|
||||||
|
C384.651276,113.098106 384.826904,112.546997 385.080566,111.819031
|
||||||
|
C385.158661,111.642181 385.225739,111.261406 385.438354,111.033051
|
||||||
|
C385.774200,110.208626 385.897369,109.612564 386.076050,108.631439
|
||||||
|
C386.765503,105.528435 387.815369,102.831184 387.951752,100.088501
|
||||||
|
C388.295837,93.171082 385.811890,90.546196 378.774231,90.999680
|
||||||
|
C374.370697,91.283432 369.826141,92.191185 365.721436,93.787331
|
||||||
|
C351.728424,99.228638 339.691040,107.922951 328.617279,117.867462
|
||||||
|
C306.773834,137.483337 292.288147,162.370239 278.644653,188.104599
|
||||||
|
C272.459381,187.474991 266.699493,186.854324 260.486023,186.126190
|
||||||
|
C250.358963,186.672348 240.685547,187.325974 230.909729,187.645721
|
||||||
|
C229.120026,184.063156 227.497009,180.779190 225.735123,177.571503
|
||||||
|
C213.024612,154.430664 199.118484,132.157196 178.481827,115.038651
|
||||||
|
C166.522659,105.118279 153.893494,96.158127 138.698120,91.789146
|
||||||
|
C133.921600,90.415802 128.469727,89.127167 124.438560,92.944710
|
||||||
|
C120.207924,96.951149 122.360313,102.267998 123.497704,107.109436
|
||||||
|
C123.649200,107.754311 123.920364,108.371086 124.157280,109.243233
|
||||||
|
C124.285248,109.822701 124.506912,110.045639 124.816811,110.130013
|
||||||
|
C124.790176,110.105629 124.768829,110.174622 124.780151,110.393814
|
||||||
|
C124.791473,110.613014 124.988998,111.005028 125.016037,111.293442
|
||||||
|
C125.319313,112.075935 125.595558,112.570015 125.893593,113.436935
|
||||||
|
C126.583313,115.505013 127.155907,117.245331 127.933197,118.888847
|
||||||
|
C144.348648,153.597961 163.473175,186.584579 189.715347,214.954758
|
||||||
|
C193.574753,219.127121 196.253342,223.201889 193.785187,229.250885
|
||||||
|
C193.701797,229.835007 193.707275,230.176071 193.464661,230.832916
|
||||||
|
C192.601898,235.115036 191.987228,239.081406 191.297699,243.371857
|
||||||
|
C191.214508,244.138901 191.206192,244.581833 191.083099,245.406372
|
||||||
|
C190.934235,246.846115 190.900131,247.904266 190.906418,248.975723
|
||||||
|
C190.946808,248.989044 190.902969,248.916153 190.664886,249.212097
|
||||||
|
C189.924973,252.341217 189.423157,255.174377 188.859940,258.166199
|
||||||
|
C188.798553,258.324829 188.814636,258.664642 188.595612,258.903992
|
||||||
|
C188.231720,259.761871 188.086868,260.380402 187.878387,261.142761
|
||||||
|
C187.814743,261.286621 187.833328,261.600647 187.626129,261.783325
|
||||||
|
C187.308975,262.309631 187.199005,262.653198 186.905792,263.292511
|
||||||
|
C180.095764,271.633270 173.740311,279.922699 166.771301,287.659485
|
||||||
|
C158.658325,296.666260 152.450134,306.611176 151.203049,318.753967
|
||||||
|
C150.380264,326.765442 151.042725,334.929443 150.742172,343.179291
|
||||||
|
C131.598190,366.845032 119.361450,393.641113 112.062065,422.656494
|
||||||
|
C108.743324,435.848633 106.941971,449.422546 104.142502,462.869812
|
||||||
|
C102.728333,462.276062 101.453682,461.817688 100.545471,460.967773
|
||||||
|
C89.038895,450.200043 77.500648,439.463287 66.169266,428.512939
|
||||||
|
C62.778244,425.235962 59.635670,421.568146 57.011787,417.655273
|
||||||
|
C47.914017,404.088165 38.088184,390.868927 30.456888,376.498993
|
||||||
|
C23.072790,362.594574 16.979519,347.767090 12.310448,332.726868
|
||||||
|
C7.856178,318.378571 5.988375,303.229218 2.887524,288.452118
|
||||||
|
C2.763702,287.862030 1.651623,287.479340 1.000001,287.000000
|
||||||
|
C1.000000,273.979095 1.000000,260.958221 1.300240,247.244965
|
||||||
|
C1.400320,244.701752 1.200160,242.850876 1.000000,241.000000
|
||||||
|
C1.000000,237.307098 1.000000,233.614182 1.359694,229.772308
|
||||||
|
C2.134809,228.777603 2.800037,227.967499 2.926459,227.080582
|
||||||
|
C4.019210,219.414719 4.331128,211.567627 6.161662,204.089325
|
||||||
|
C12.963929,176.299896 22.437262,149.626877 37.761063,125.080322
|
||||||
|
C46.061306,111.784515 54.983459,99.032440 65.320732,87.433167
|
||||||
|
C79.799126,71.187210 95.901649,56.426167 114.537239,45.041058
|
||||||
|
C128.742203,36.362766 143.368484,28.091438 158.589172,21.423813
|
||||||
|
C182.200195,11.080681 206.977005,4.323318 232.962723,2.935838
|
||||||
|
C234.006638,2.880100 234.988983,1.671474 236.000000,1.000003
|
||||||
|
C236.750000,1.000000 237.500000,1.000000 238.300781,1.336543
|
||||||
|
C240.756851,3.317096 243.110275,4.448632 245.000000,1.000000
|
||||||
|
C254.687561,1.000000 264.375122,1.000000 274.245056,1.372616
|
||||||
|
C275.272766,2.162385 276.082520,2.833764 276.968842,2.957769
|
||||||
|
C286.931580,4.351604 296.925415,5.532055 306.873566,7.019388
|
||||||
|
C330.479279,10.548635 352.717285,18.978046 373.655762,29.652117
|
||||||
|
C394.968109,40.516788 415.260193,53.665508 431.960632,71.418442
|
||||||
|
C439.880066,79.836937 448.534271,87.619072 455.928741,96.464340
|
||||||
|
C468.436066,111.425522 478.673035,127.927826 487.275574,145.506210
|
||||||
|
C501.093628,173.741943 509.968414,203.254761 512.140442,234.698105
|
||||||
|
C512.173157,235.172623 513.354614,235.567795 514.000000,236.000000
|
||||||
|
z"/>
|
||||||
|
<path fill="#CCC2C8" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M104.452324,462.823273
|
||||||
|
C106.941971,449.422546 108.743324,435.848633 112.062065,422.656494
|
||||||
|
C119.361450,393.641113 131.598190,366.845032 150.967651,343.447449
|
||||||
|
C154.454727,348.673889 156.743530,354.358185 160.503967,358.795258
|
||||||
|
C173.642975,374.298462 190.905792,380.693787 211.090744,380.318542
|
||||||
|
C217.213715,386.160065 224.525116,389.438049 232.365631,390.669281
|
||||||
|
C241.485840,392.101410 250.799500,392.301697 260.026062,393.502930
|
||||||
|
C260.349823,433.642670 260.676758,473.316071 260.802063,513.122742
|
||||||
|
C260.328339,513.445984 260.128204,513.693970 260.000000,514.000000
|
||||||
|
C257.299988,514.000000 254.599976,514.000000 251.196747,513.737671
|
||||||
|
C248.662369,513.650146 246.831177,513.825073 245.000000,514.000000
|
||||||
|
C240.975449,514.000000 236.950912,514.000000 232.802765,513.657043
|
||||||
|
C231.673462,512.878235 230.688232,512.120300 229.658966,512.054810
|
||||||
|
C214.090561,511.064941 199.069077,507.365173 184.156845,503.069458
|
||||||
|
C164.687897,497.461121 146.085800,489.765076 128.753891,479.274200
|
||||||
|
C120.396240,474.215393 112.537163,468.332855 104.452324,462.823273
|
||||||
|
z"/>
|
||||||
|
<path fill="#BEB4BA" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M261.003723,512.989441
|
||||||
|
C260.676758,473.316071 260.349823,433.642670 260.027679,393.498047
|
||||||
|
C260.032471,393.026764 260.046661,393.029877 260.479736,393.022827
|
||||||
|
C268.225647,391.842438 275.731262,391.334930 282.792023,389.290771
|
||||||
|
C288.733490,387.570587 295.382141,386.137482 299.457214,379.965576
|
||||||
|
C326.667816,381.643250 350.343445,363.588776 358.265259,342.943604
|
||||||
|
C358.720856,342.890320 358.902191,342.861877 359.083557,342.833435
|
||||||
|
C364.448792,350.366730 370.586609,357.474365 375.020050,365.521027
|
||||||
|
C384.557465,382.831238 393.074188,400.728973 397.773376,420.057770
|
||||||
|
C400.117157,429.698151 401.025513,439.680664 403.158661,449.381897
|
||||||
|
C404.249908,454.344727 406.608948,459.028748 408.607849,464.239624
|
||||||
|
C408.249542,464.933716 407.628784,465.158295 407.114380,465.530029
|
||||||
|
C387.010834,480.059845 365.242401,491.453125 341.821869,499.552490
|
||||||
|
C323.366272,505.934784 304.468719,510.559082 284.909668,512.097473
|
||||||
|
C284.227417,512.151184 283.634521,513.340149 283.000000,514.000000
|
||||||
|
C278.975464,514.000000 274.950897,514.000000 270.176331,513.711792
|
||||||
|
C266.618774,513.278931 263.811249,513.134216 261.003723,512.989441
|
||||||
|
z"/>
|
||||||
|
<path fill="#EBE7E9" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M260.802063,513.122742
|
||||||
|
C263.811249,513.134216 266.618774,513.278931 269.713135,513.711792
|
||||||
|
C266.969391,514.000000 263.938812,514.000000 260.454102,514.000000
|
||||||
|
C260.128204,513.693970 260.328339,513.445984 260.802063,513.122742
|
||||||
|
z"/>
|
||||||
|
<path fill="#EBE7E9" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M245.428467,514.000000
|
||||||
|
C246.831177,513.825073 248.662369,513.650146 250.746765,513.737671
|
||||||
|
C249.285645,514.000000 247.571289,514.000000 245.428467,514.000000
|
||||||
|
z"/>
|
||||||
|
<path fill="#FFD2D7" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M1.000000,241.428467
|
||||||
|
C1.200160,242.850876 1.400320,244.701752 1.300240,246.776306
|
||||||
|
C1.000000,245.285645 1.000000,243.571289 1.000000,241.428467
|
||||||
|
z"/>
|
||||||
|
<path fill="#E0DCDD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M211.001480,379.990509
|
||||||
|
C190.905792,380.693787 173.642975,374.298462 160.503967,358.795258
|
||||||
|
C156.743530,354.358185 154.454727,348.673889 151.265640,343.293335
|
||||||
|
C151.042725,334.929443 150.380264,326.765442 151.203049,318.753967
|
||||||
|
C152.450134,306.611176 158.658325,296.666260 166.771301,287.659485
|
||||||
|
C173.740311,279.922699 180.095764,271.633270 187.103149,263.105896
|
||||||
|
C187.600281,262.282562 187.716797,261.941620 187.833328,261.600647
|
||||||
|
C187.833328,261.600647 187.814743,261.286621 188.116455,260.917572
|
||||||
|
C188.550308,259.920563 188.682480,259.292603 188.814636,258.664642
|
||||||
|
C188.814636,258.664642 188.798553,258.324829 189.144714,257.913574
|
||||||
|
C189.961578,254.640259 190.432266,251.778214 190.902969,248.916153
|
||||||
|
C190.902969,248.916153 190.946808,248.989044 191.154480,248.769028
|
||||||
|
C191.307404,247.374268 191.252640,246.199524 191.197876,245.024780
|
||||||
|
C191.206192,244.581833 191.214508,244.138901 191.613251,243.201141
|
||||||
|
C192.573395,238.643280 193.143082,234.580215 193.712769,230.517151
|
||||||
|
C193.707275,230.176071 193.701797,229.835007 194.077423,229.011169
|
||||||
|
C195.974625,223.018661 197.490738,217.508926 199.345795,211.940918
|
||||||
|
C201.817001,209.876862 203.919922,207.838776 206.087585,205.872009
|
||||||
|
C210.563675,201.810776 214.826965,197.455246 219.655197,193.862289
|
||||||
|
C223.030762,191.350327 227.198303,189.902634 231.012131,187.979614
|
||||||
|
C240.685547,187.325974 250.358963,186.672348 260.342468,186.444824
|
||||||
|
C260.761017,227.451370 260.869507,268.031799 260.740112,308.725891
|
||||||
|
C260.337189,308.897888 260.172150,308.956177 259.539825,308.970581
|
||||||
|
C253.740875,308.942719 248.406372,308.871613 243.079636,309.042511
|
||||||
|
C241.901611,309.080292 240.121613,309.705597 239.762634,310.547913
|
||||||
|
C239.394333,311.411987 240.189651,313.050537 240.913452,314.025024
|
||||||
|
C241.671799,315.045959 242.933426,315.703979 244.004745,316.479614
|
||||||
|
C248.055679,319.412415 252.118683,322.328552 256.157166,325.236542
|
||||||
|
C257.067139,324.407806 258.512390,323.091522 259.972778,322.216309
|
||||||
|
C260.165009,323.798157 260.511475,324.941833 260.492035,326.079285
|
||||||
|
C260.355835,334.053802 260.144104,342.027039 259.706207,349.770752
|
||||||
|
C258.157684,346.950043 256.859558,344.359283 255.144684,340.936829
|
||||||
|
C252.956131,345.465698 251.631958,349.636414 249.175873,352.974274
|
||||||
|
C244.801987,358.918427 239.743393,364.358734 234.675751,370.178711
|
||||||
|
C226.587387,373.561920 218.794434,376.776215 211.001480,379.990509
|
||||||
|
M226.835876,263.789429
|
||||||
|
C225.998428,258.384125 223.202942,254.496170 217.832474,252.988266
|
||||||
|
C212.991531,251.629059 208.577087,252.691727 205.026184,256.397003
|
||||||
|
C201.140274,260.451782 200.496170,266.823517 203.371155,271.646027
|
||||||
|
C206.080322,276.190369 211.542465,278.603760 216.621262,277.500458
|
||||||
|
C222.893372,276.137970 226.318207,271.820679 226.835876,263.789429
|
||||||
|
z"/>
|
||||||
|
<path fill="#D9D3D5" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M259.956543,350.000671
|
||||||
|
C260.144104,342.027039 260.355835,334.053802 260.492035,326.079285
|
||||||
|
C260.511475,324.941833 260.165009,323.798157 260.096252,321.998993
|
||||||
|
C260.477997,320.914337 260.751404,320.488037 261.376526,319.995789
|
||||||
|
C264.343079,318.488281 267.129303,317.276123 269.499115,315.506348
|
||||||
|
C270.649780,314.647034 271.746368,312.613403 271.519806,311.353821
|
||||||
|
C271.332062,310.310150 269.260468,309.164429 267.858429,308.881287
|
||||||
|
C265.637390,308.432770 263.278534,308.666931 260.977966,308.612244
|
||||||
|
C260.869507,268.031799 260.761017,227.451370 260.796082,186.552277
|
||||||
|
C266.699493,186.854324 272.459381,187.474991 278.914307,188.319595
|
||||||
|
C291.576019,192.217087 300.389923,199.895523 307.288422,210.109360
|
||||||
|
C308.122162,211.343781 309.729248,212.055908 310.997894,213.387329
|
||||||
|
C312.022064,216.177170 313.026245,218.589783 314.020935,221.414658
|
||||||
|
C315.108368,226.666641 316.162292,231.516632 317.315125,236.343002
|
||||||
|
C318.331757,240.599136 319.458862,244.828888 320.537231,249.070282
|
||||||
|
C320.625397,249.498550 320.713593,249.926819 320.623291,250.968689
|
||||||
|
C322.029449,256.009918 323.614105,260.437592 325.198792,264.865234
|
||||||
|
C325.198792,264.865234 325.161621,264.944885 325.223755,265.136627
|
||||||
|
C325.450226,265.624634 325.687347,265.841309 325.997223,265.978363
|
||||||
|
C325.997223,265.978363 326.016663,265.989105 326.042725,266.292328
|
||||||
|
C326.411804,267.048950 326.754852,267.502319 327.097870,267.955719
|
||||||
|
C327.097870,267.955719 327.010345,267.973022 327.056396,268.275726
|
||||||
|
C327.798218,269.338928 328.493988,270.099426 329.189789,270.859924
|
||||||
|
C329.189789,270.859924 329.052429,270.838593 329.129364,271.154846
|
||||||
|
C329.825745,271.962769 330.445221,272.454437 331.064667,272.946136
|
||||||
|
C331.064667,272.946136 331.012177,273.003265 331.072632,273.281616
|
||||||
|
C331.732452,274.043915 332.331848,274.527893 332.931213,275.011841
|
||||||
|
C332.931213,275.011841 333.106720,275.312744 333.240234,275.754425
|
||||||
|
C333.674774,276.414856 333.975830,276.633636 334.276886,276.852386
|
||||||
|
C334.533020,276.978760 334.747864,277.155334 335.123718,277.823120
|
||||||
|
C335.617859,278.475677 335.909760,278.687286 336.201660,278.898865
|
||||||
|
C336.467560,279.029480 336.686890,279.215118 337.074341,279.889191
|
||||||
|
C337.571594,280.528931 337.854126,280.735229 338.136658,280.941559
|
||||||
|
C338.403107,281.083923 338.628143,281.275024 339.024841,281.937866
|
||||||
|
C339.494598,282.569092 339.751312,282.777252 340.008026,282.985413
|
||||||
|
C340.293518,283.159637 340.534851,283.381866 340.966736,284.063202
|
||||||
|
C341.383728,284.725189 341.616180,284.914307 341.898895,285.041687
|
||||||
|
C341.898895,285.041687 341.961853,285.043304 341.999207,285.352783
|
||||||
|
C342.420074,286.059692 342.803650,286.457123 343.187195,286.854584
|
||||||
|
C343.187195,286.854584 343.026550,286.925415 343.178345,287.173981
|
||||||
|
C343.955536,287.913757 344.580902,288.404968 345.206268,288.896179
|
||||||
|
C345.349701,288.994446 345.493134,289.092743 345.876648,289.438477
|
||||||
|
C346.116699,289.685883 346.380920,289.931335 346.380920,289.931335
|
||||||
|
C346.597687,290.293457 346.814484,290.655609 347.184052,291.658813
|
||||||
|
C348.207916,293.210449 349.079010,294.121002 349.950073,295.031586
|
||||||
|
C349.950073,295.031586 349.997528,294.998688 350.022308,295.312134
|
||||||
|
C350.422668,296.046722 350.798248,296.467896 351.173798,296.889099
|
||||||
|
C351.173798,296.889099 351.088196,296.908844 351.187195,297.098938
|
||||||
|
C351.662689,297.562439 352.039185,297.835846 352.415680,298.109222
|
||||||
|
C352.517670,298.285431 352.619659,298.461639 352.871033,299.188538
|
||||||
|
C353.345856,300.153381 353.671265,300.567535 353.996704,300.981689
|
||||||
|
C353.996704,300.981689 354.015472,300.993073 354.007812,301.335846
|
||||||
|
C354.402161,302.413605 354.804199,303.148590 355.206238,303.883575
|
||||||
|
C355.206238,303.883575 355.018646,304.003021 355.090637,304.240479
|
||||||
|
C355.517731,304.925629 355.872864,305.373291 356.227966,305.820984
|
||||||
|
C356.227966,305.820984 356.153595,305.872589 356.172882,306.176147
|
||||||
|
C356.516907,306.956207 356.841644,307.432648 357.166382,307.909119
|
||||||
|
C357.166382,307.909119 357.040070,308.020111 357.049561,308.341949
|
||||||
|
C357.767151,310.434601 358.475311,312.205444 359.183441,313.976257
|
||||||
|
C359.183441,313.976257 359.285858,314.312012 359.201691,314.954956
|
||||||
|
C359.676453,320.394745 360.235382,325.191528 360.794250,329.988342
|
||||||
|
C360.750854,330.733398 360.707428,331.478424 360.285736,332.761963
|
||||||
|
C359.268677,336.523132 358.629852,339.745819 357.991058,342.968475
|
||||||
|
C350.343445,363.588776 326.667816,381.643250 299.167816,379.732178
|
||||||
|
C290.352600,376.355316 282.288818,373.212067 274.104248,369.733521
|
||||||
|
C272.627472,367.771759 271.155029,366.227570 269.937866,364.503143
|
||||||
|
C266.554016,359.709045 263.276215,354.840057 259.956543,350.000671
|
||||||
|
M292.954834,252.577637
|
||||||
|
C284.554016,254.437103 280.101990,261.094727 282.225677,268.622253
|
||||||
|
C284.200958,275.623901 292.044647,279.524200 298.966736,276.946747
|
||||||
|
C304.560913,274.863800 307.829224,269.117188 306.961121,262.890320
|
||||||
|
C306.101593,256.724701 301.323578,252.973465 292.954834,252.577637
|
||||||
|
z"/>
|
||||||
|
<path fill="#E8E1E3" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M230.909729,187.645721
|
||||||
|
C227.198303,189.902634 223.030762,191.350327 219.655197,193.862289
|
||||||
|
C214.826965,197.455246 210.563675,201.810776 206.087585,205.872009
|
||||||
|
C203.919922,207.838776 201.817001,209.876862 199.271240,211.543579
|
||||||
|
C198.672882,210.565842 198.382446,209.937576 198.318497,209.287033
|
||||||
|
C196.320541,188.961105 186.114044,172.083221 175.258102,155.637466
|
||||||
|
C166.415649,142.241974 154.793076,131.261627 141.908539,121.791832
|
||||||
|
C137.049515,118.220581 131.245193,115.935486 125.871803,113.064095
|
||||||
|
C125.595558,112.570015 125.319313,112.075935 125.138161,111.187073
|
||||||
|
C125.233253,110.792297 125.195129,110.356216 125.195129,110.356216
|
||||||
|
C125.195129,110.356216 124.768829,110.174622 124.768829,110.174622
|
||||||
|
C124.768829,110.174622 124.790176,110.105629 124.767502,109.900299
|
||||||
|
C124.613037,109.401230 124.410126,109.169861 124.136108,109.000877
|
||||||
|
C123.920364,108.371086 123.649200,107.754311 123.497704,107.109436
|
||||||
|
C122.360313,102.267998 120.207924,96.951149 124.438560,92.944710
|
||||||
|
C128.469727,89.127167 133.921600,90.415802 138.698120,91.789146
|
||||||
|
C153.893494,96.158127 166.522659,105.118279 178.481827,115.038651
|
||||||
|
C199.118484,132.157196 213.024612,154.430664 225.735123,177.571503
|
||||||
|
C227.497009,180.779190 229.120026,184.063156 230.909729,187.645721
|
||||||
|
z"/>
|
||||||
|
<path fill="#E2DBDC" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M310.977905,213.010101
|
||||||
|
C309.729248,212.055908 308.122162,211.343781 307.288422,210.109360
|
||||||
|
C300.389923,199.895523 291.576019,192.217087 279.339722,188.328522
|
||||||
|
C292.288147,162.370239 306.773834,137.483337 328.617279,117.867462
|
||||||
|
C339.691040,107.922951 351.728424,99.228638 365.721436,93.787331
|
||||||
|
C369.826141,92.191185 374.370697,91.283432 378.774231,90.999680
|
||||||
|
C385.811890,90.546196 388.295837,93.171082 387.951752,100.088501
|
||||||
|
C387.815369,102.831184 386.765503,105.528435 385.853577,108.852493
|
||||||
|
C385.459015,110.059547 385.342377,110.660477 385.225739,111.261406
|
||||||
|
C385.225739,111.261406 385.158661,111.642181 384.852539,112.001289
|
||||||
|
C384.354950,112.895798 384.163513,113.431198 383.972076,113.966599
|
||||||
|
C383.972076,113.966606 383.995361,114.003372 383.606873,113.994675
|
||||||
|
C373.302124,118.110992 364.961212,124.463203 356.839417,131.438354
|
||||||
|
C339.437592,146.383347 327.000336,164.799469 318.375488,185.727234
|
||||||
|
C314.813660,194.369843 313.379669,203.889404 310.977905,213.010101
|
||||||
|
z"/>
|
||||||
|
<path fill="#F4C9C9" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M125.893593,113.436935
|
||||||
|
C131.245193,115.935486 137.049515,118.220581 141.908539,121.791832
|
||||||
|
C154.793076,131.261627 166.415649,142.241974 175.258102,155.637466
|
||||||
|
C186.114044,172.083221 196.320541,188.961105 198.318497,209.287033
|
||||||
|
C198.382446,209.937576 198.672882,210.565842 198.932297,211.601837
|
||||||
|
C197.490738,217.508926 195.974625,223.018661 194.166290,228.768127
|
||||||
|
C196.253342,223.201889 193.574753,219.127121 189.715347,214.954758
|
||||||
|
C163.473175,186.584579 144.348648,153.597961 127.933197,118.888847
|
||||||
|
C127.155907,117.245331 126.583313,115.505013 125.893593,113.436935
|
||||||
|
z"/>
|
||||||
|
<path fill="#F1BBBC" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M310.997925,213.387329
|
||||||
|
C313.379669,203.889404 314.813660,194.369843 318.375488,185.727234
|
||||||
|
C327.000336,164.799469 339.437592,146.383347 356.839417,131.438354
|
||||||
|
C364.961212,124.463203 373.302124,118.110992 383.589783,113.979858
|
||||||
|
C380.960876,120.586807 378.457886,127.484657 374.865417,133.758698
|
||||||
|
C364.731812,151.456390 354.837616,169.357254 343.515594,186.286224
|
||||||
|
C335.349365,198.496567 325.048187,209.279083 315.144836,220.863037
|
||||||
|
C314.403778,221.019226 314.217133,221.010818 314.030457,221.002396
|
||||||
|
C313.026245,218.589783 312.022064,216.177170 310.997925,213.387329
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M314.020935,221.414658
|
||||||
|
C314.217133,221.010818 314.403778,221.019226 314.870605,221.047455
|
||||||
|
C316.999298,230.136887 318.847839,239.206482 320.616791,248.673187
|
||||||
|
C319.458862,244.828888 318.331757,240.599136 317.315125,236.343002
|
||||||
|
C316.162292,231.516632 315.108368,226.666641 314.020935,221.414658
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M325.160889,264.486053
|
||||||
|
C323.614105,260.437592 322.029449,256.009918 320.634705,251.297119
|
||||||
|
C322.257446,255.376953 323.690247,259.741913 325.160889,264.486053
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M360.890747,329.536377
|
||||||
|
C360.235382,325.191528 359.676453,320.394745 359.189026,315.130005
|
||||||
|
C359.836090,319.469543 360.411621,324.276947 360.890747,329.536377
|
||||||
|
z"/>
|
||||||
|
<path fill="#F4C9C9" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M193.464661,230.832916
|
||||||
|
C193.143082,234.580215 192.573395,238.643280 191.688126,242.877060
|
||||||
|
C191.987228,239.081406 192.601898,235.115036 193.464661,230.832916
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M358.265259,342.943604
|
||||||
|
C358.629852,339.745819 359.268677,336.523132 360.187744,333.122986
|
||||||
|
C360.018005,335.991302 359.567963,339.037079 359.100708,342.458130
|
||||||
|
C358.902191,342.861877 358.720856,342.890320 358.265259,342.943604
|
||||||
|
z"/>
|
||||||
|
<path fill="#F4C9C9" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M190.664886,249.212097
|
||||||
|
C190.432266,251.778214 189.961578,254.640259 189.206100,257.754944
|
||||||
|
C189.423157,255.174377 189.924973,252.341217 190.664886,249.212097
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M359.182800,313.601257
|
||||||
|
C358.475311,312.205444 357.767151,310.434601 357.105957,308.280884
|
||||||
|
C357.829315,309.674072 358.505737,311.450165 359.182800,313.601257
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M349.907898,294.706573
|
||||||
|
C349.079010,294.121002 348.207916,293.210449 347.289917,291.957703
|
||||||
|
C348.117218,292.537537 348.991486,293.459564 349.907898,294.706573
|
||||||
|
z"/>
|
||||||
|
<path fill="#F4C9C9" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M191.083099,245.406372
|
||||||
|
C191.252640,246.199524 191.307404,247.374268 191.114105,248.755707
|
||||||
|
C190.900131,247.904266 190.934235,246.846115 191.083099,245.406372
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M330.995422,272.653015
|
||||||
|
C330.445221,272.454437 329.825745,271.962769 329.198181,271.144989
|
||||||
|
C329.768768,271.332581 330.347473,271.846222 330.995422,272.653015
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M329.123840,270.555267
|
||||||
|
C328.493988,270.099426 327.798218,269.338928 327.091919,268.248749
|
||||||
|
C327.740234,268.696228 328.399048,269.473419 329.123840,270.555267
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M332.844269,274.735840
|
||||||
|
C332.331848,274.527893 331.732452,274.043915 331.094299,273.251587
|
||||||
|
C331.622772,273.448761 332.190033,273.954315 332.844269,274.735840
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M345.110474,288.603455
|
||||||
|
C344.580902,288.404968 343.955536,287.913757 343.249207,287.122131
|
||||||
|
C343.783722,287.318054 344.399200,287.814423 345.110474,288.603455
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M355.201660,303.558167
|
||||||
|
C354.804199,303.148590 354.402161,302.413605 354.006409,301.346680
|
||||||
|
C354.407501,301.754120 354.802307,302.493439 355.201660,303.558167
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M351.129639,296.601501
|
||||||
|
C350.798248,296.467896 350.422668,296.046722 350.005768,295.335632
|
||||||
|
C350.338104,295.468414 350.711761,295.891174 351.129639,296.601501
|
||||||
|
z"/>
|
||||||
|
<path fill="#F4C9C9" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M188.595612,258.903992
|
||||||
|
C188.682480,259.292603 188.550308,259.920563 188.180084,260.773743
|
||||||
|
C188.086868,260.380402 188.231720,259.761871 188.595612,258.903992
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M327.064514,267.665863
|
||||||
|
C326.754852,267.502319 326.411804,267.048950 326.043304,266.303406
|
||||||
|
C326.355591,266.466156 326.693390,266.921082 327.064514,267.665863
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M357.151794,307.616943
|
||||||
|
C356.841644,307.432648 356.516907,306.956207 356.218140,306.177032
|
||||||
|
C356.541809,306.357819 356.839508,306.841309 357.151794,307.616943
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M356.195923,305.534912
|
||||||
|
C355.872864,305.373291 355.517731,304.925629 355.179565,304.174133
|
||||||
|
C355.518951,304.329834 355.841400,304.789337 356.195923,305.534912
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M353.974121,300.709167
|
||||||
|
C353.671265,300.567535 353.345856,300.153381 352.977142,299.474915
|
||||||
|
C353.273102,299.619293 353.612366,300.027954 353.974121,300.709167
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M352.363861,297.868530
|
||||||
|
C352.039185,297.835846 351.662689,297.562439 351.205383,297.058960
|
||||||
|
C351.520416,297.095215 351.916229,297.361511 352.363861,297.868530
|
||||||
|
z"/>
|
||||||
|
<path fill="#F1BBBC" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M384.223877,113.807907
|
||||||
|
C384.163513,113.431198 384.354950,112.895798 384.774475,112.178146
|
||||||
|
C384.826904,112.546997 384.651276,113.098106 384.223877,113.807907
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M343.139221,286.574432
|
||||||
|
C342.803650,286.457123 342.420074,286.059692 341.984497,285.380615
|
||||||
|
C342.318726,285.497437 342.705017,285.895844 343.139221,286.574432
|
||||||
|
z"/>
|
||||||
|
<path fill="#F1BBBC" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M385.438354,111.033051
|
||||||
|
C385.342377,110.660477 385.459015,110.059547 385.798126,109.237564
|
||||||
|
C385.897369,109.612564 385.774200,110.208626 385.438354,111.033051
|
||||||
|
z"/>
|
||||||
|
<path fill="#F4C9C9" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M124.157272,109.243233
|
||||||
|
C124.410126,109.169861 124.613037,109.401230 124.794144,109.924683
|
||||||
|
C124.506912,110.045639 124.285248,109.822701 124.157272,109.243233
|
||||||
|
z"/>
|
||||||
|
<path fill="#F4C9C9" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M124.780151,110.393814
|
||||||
|
C124.768829,110.174622 125.195129,110.356216 125.195129,110.356216
|
||||||
|
C125.195129,110.356216 125.233253,110.792297 125.111130,110.898666
|
||||||
|
C124.988998,111.005028 124.791473,110.613014 124.780151,110.393814
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M334.153137,276.605957
|
||||||
|
C333.975830,276.633636 333.674774,276.414856 333.285400,275.922668
|
||||||
|
C333.474518,275.885986 333.751953,276.122772 334.153137,276.605957
|
||||||
|
z"/>
|
||||||
|
<path fill="#F4C9C9" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M187.626129,261.783325
|
||||||
|
C187.716797,261.941620 187.600281,262.282562 187.286407,262.810181
|
||||||
|
C187.199005,262.653198 187.308975,262.309631 187.626129,261.783325
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M325.930542,265.739441
|
||||||
|
C325.687347,265.841309 325.450226,265.624634 325.210571,265.094696
|
||||||
|
C325.473114,264.966003 325.715973,265.179169 325.930542,265.739441
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M346.404358,289.813019
|
||||||
|
C346.380920,289.931335 346.116699,289.685883 346.071350,289.612030
|
||||||
|
C346.026001,289.538177 346.427826,289.694702 346.404358,289.813019
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M341.825653,284.817505
|
||||||
|
C341.616180,284.914307 341.383728,284.725189 341.095520,284.274323
|
||||||
|
C341.316101,284.141113 341.570374,284.314148 341.825653,284.817505
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M339.918762,282.747803
|
||||||
|
C339.751312,282.777252 339.494598,282.569092 339.138489,282.129456
|
||||||
|
C339.302551,282.102081 339.566040,282.306152 339.918762,282.747803
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M338.024841,280.701233
|
||||||
|
C337.854126,280.735229 337.571594,280.528931 337.181824,280.077972
|
||||||
|
C337.354034,280.042511 337.633545,280.251709 338.024841,280.701233
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3B7BD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M336.081360,278.657837
|
||||||
|
C335.909760,278.687286 335.617859,278.475677 335.228912,278.004883
|
||||||
|
C335.408264,277.969360 335.684631,278.193085 336.081360,278.657837
|
||||||
|
z"/>
|
||||||
|
<path fill="#D4CED0" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M211.090744,380.318542
|
||||||
|
C218.794434,376.776215 226.587387,373.561920 234.703705,370.575012
|
||||||
|
C236.225922,378.957703 237.774445,380.741486 243.869568,380.988098
|
||||||
|
C255.511353,381.459229 255.656281,381.319641 256.060913,369.487579
|
||||||
|
C256.072998,369.134949 256.282776,368.789062 256.569244,367.938904
|
||||||
|
C257.852478,371.579498 258.939972,374.664795 260.081329,378.163086
|
||||||
|
C260.105682,383.393982 260.076202,388.211945 260.046692,393.029877
|
||||||
|
C260.046661,393.029877 260.032471,393.026764 260.030823,393.031677
|
||||||
|
C250.799500,392.301697 241.485840,392.101410 232.365631,390.669281
|
||||||
|
C224.525116,389.438049 217.213715,386.160065 211.090744,380.318542
|
||||||
|
z"/>
|
||||||
|
<path fill="#C9C0C5" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M260.479736,393.022827
|
||||||
|
C260.076202,388.211945 260.105682,383.393982 260.526337,378.237915
|
||||||
|
C271.721008,378.474976 273.500488,377.427826 274.225067,370.068817
|
||||||
|
C282.288818,373.212067 290.352600,376.355316 298.705750,379.731995
|
||||||
|
C295.382141,386.137482 288.733490,387.570587 282.792023,389.290771
|
||||||
|
C275.731262,391.334930 268.225647,391.842438 260.479736,393.022827
|
||||||
|
z"/>
|
||||||
|
<path fill="#FEFEFE" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M274.104248,369.733521
|
||||||
|
C273.500488,377.427826 271.721008,378.474976 260.472473,377.824951
|
||||||
|
C258.939972,374.664795 257.852478,371.579498 256.569244,367.938904
|
||||||
|
C256.282776,368.789062 256.072998,369.134949 256.060913,369.487579
|
||||||
|
C255.656281,381.319641 255.511353,381.459229 243.869568,380.988098
|
||||||
|
C237.774445,380.741486 236.225922,378.957703 234.999115,370.406067
|
||||||
|
C239.743393,364.358734 244.801987,358.918427 249.175873,352.974274
|
||||||
|
C251.631958,349.636414 252.956131,345.465698 255.144684,340.936829
|
||||||
|
C256.859558,344.359283 258.157684,346.950043 259.706177,349.770752
|
||||||
|
C263.276215,354.840057 266.554016,359.709045 269.937866,364.503143
|
||||||
|
C271.155029,366.227570 272.627472,367.771759 274.104248,369.733521
|
||||||
|
z"/>
|
||||||
|
<path fill="#545152" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M226.843674,264.196960
|
||||||
|
C226.318207,271.820679 222.893372,276.137970 216.621262,277.500458
|
||||||
|
C211.542465,278.603760 206.080322,276.190369 203.371155,271.646027
|
||||||
|
C200.496170,266.823517 201.140274,260.451782 205.026184,256.397003
|
||||||
|
C208.577087,252.691727 212.991531,251.629059 217.832474,252.988266
|
||||||
|
C223.202942,254.496170 225.998428,258.384125 226.843674,264.196960
|
||||||
|
M213.714188,261.026093
|
||||||
|
C212.543411,262.555603 210.993347,263.952118 210.387665,265.679718
|
||||||
|
C210.143784,266.375305 211.970764,268.695496 212.853363,268.694427
|
||||||
|
C214.525513,268.692444 217.100754,267.989136 217.685272,266.789825
|
||||||
|
C219.031723,264.027191 217.859756,261.682312 213.714188,261.026093
|
||||||
|
z"/>
|
||||||
|
<path fill="#E79F9F" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M261.024841,320.061737
|
||||||
|
C260.751404,320.488037 260.477997,320.914337 260.081116,321.557922
|
||||||
|
C258.512390,323.091522 257.067139,324.407806 256.157166,325.236542
|
||||||
|
C252.118683,322.328552 248.055679,319.412415 244.004745,316.479614
|
||||||
|
C242.933426,315.703979 241.671799,315.045959 240.913452,314.025024
|
||||||
|
C240.189651,313.050537 239.394333,311.411987 239.762634,310.547913
|
||||||
|
C240.121613,309.705597 241.901611,309.080292 243.079636,309.042511
|
||||||
|
C248.406372,308.871613 253.740875,308.942719 259.541077,309.416077
|
||||||
|
C260.347992,313.290894 260.686401,316.676331 261.024841,320.061737
|
||||||
|
z"/>
|
||||||
|
<path fill="#E08A8A" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M261.376526,319.995789
|
||||||
|
C260.686401,316.676331 260.347992,313.290894 260.008301,309.459991
|
||||||
|
C260.172150,308.956177 260.337189,308.897888 260.740112,308.725891
|
||||||
|
C263.278534,308.666931 265.637390,308.432770 267.858429,308.881287
|
||||||
|
C269.260468,309.164429 271.332062,310.310150 271.519806,311.353821
|
||||||
|
C271.746368,312.613403 270.649780,314.647034 269.499115,315.506348
|
||||||
|
C267.129303,317.276123 264.343079,318.488281 261.376526,319.995789
|
||||||
|
z"/>
|
||||||
|
<path fill="#292426" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M293.341583,252.539398
|
||||||
|
C301.323578,252.973465 306.101593,256.724701 306.961121,262.890320
|
||||||
|
C307.829224,269.117188 304.560913,274.863800 298.966736,276.946747
|
||||||
|
C292.044647,279.524200 284.200958,275.623901 282.225677,268.622253
|
||||||
|
C280.101990,261.094727 284.554016,254.437103 293.341583,252.539398
|
||||||
|
M292.354797,261.570312
|
||||||
|
C289.490845,264.210541 289.588135,266.860138 292.953247,268.696503
|
||||||
|
C293.991150,269.262878 296.293427,268.619019 297.330811,267.729370
|
||||||
|
C298.160095,267.018188 298.628174,264.405273 298.062531,263.847595
|
||||||
|
C296.772827,262.576111 294.750092,262.048157 292.354797,261.570312
|
||||||
|
z"/>
|
||||||
|
<path fill="#F3F3F3" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M214.107452,261.017273
|
||||||
|
C217.859756,261.682312 219.031723,264.027191 217.685272,266.789825
|
||||||
|
C217.100754,267.989136 214.525513,268.692444 212.853363,268.694427
|
||||||
|
C211.970764,268.695496 210.143784,266.375305 210.387665,265.679718
|
||||||
|
C210.993347,263.952118 212.543411,262.555603 214.107452,261.017273
|
||||||
|
z"/>
|
||||||
|
<path fill="#EDEBEC" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M292.690002,261.394226
|
||||||
|
C294.750092,262.048157 296.772827,262.576111 298.062531,263.847595
|
||||||
|
C298.628174,264.405273 298.160095,267.018188 297.330811,267.729370
|
||||||
|
C296.293427,268.619019 293.991150,269.262878 292.953247,268.696503
|
||||||
|
C289.588135,266.860138 289.490845,264.210541 292.690002,261.394226
|
||||||
|
z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 70 KiB |
|
@ -0,0 +1,229 @@
|
||||||
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
import { S as SvelteElement, i as init, a as attribute_to_object, b as insert_dev, s as safe_not_equal, d as dispatch_dev, v as validate_slots, c as setContext, o as onMount, g as getContext, e as globals, f as element, h as space, n as noop, j as add_location, k as attr_dev, l as append_dev, m as listen_dev, p as detach_dev, r as run_all, q as binding_callbacks } from './index-998178c7.js';
|
||||||
|
import { sendText } from '../../../../../../../../../js/libraries/serverTools.js';
|
||||||
|
import * as AuthTools from '../../../../../../../../../js/libraries/authTools.js';
|
||||||
|
import '../../../../../../../../../js/components/login-component.js';
|
||||||
|
import '../../../../../../../../../js/components/signup-component.js';
|
||||||
|
|
||||||
|
/* src\auth\auth-component.svelte generated by Svelte v3.52.0 */
|
||||||
|
|
||||||
|
const { console: console_1 } = globals;
|
||||||
|
const file = "src\\auth\\auth-component.svelte";
|
||||||
|
|
||||||
|
function create_fragment(ctx) {
|
||||||
|
let div2;
|
||||||
|
let div0;
|
||||||
|
let login_component;
|
||||||
|
let t0;
|
||||||
|
let signup_component;
|
||||||
|
let t1;
|
||||||
|
let div1;
|
||||||
|
let span;
|
||||||
|
let mounted;
|
||||||
|
let dispose;
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
div2 = element("div");
|
||||||
|
div0 = element("div");
|
||||||
|
login_component = element("login-component");
|
||||||
|
t0 = space();
|
||||||
|
signup_component = element("signup-component");
|
||||||
|
t1 = space();
|
||||||
|
div1 = element("div");
|
||||||
|
span = element("span");
|
||||||
|
span.textContent = "OR";
|
||||||
|
this.c = noop;
|
||||||
|
add_location(login_component, file, 59, 8, 1652);
|
||||||
|
add_location(signup_component, file, 60, 8, 1791);
|
||||||
|
attr_dev(div0, "id", "auth-grid-group");
|
||||||
|
add_location(div0, file, 58, 4, 1616);
|
||||||
|
add_location(span, file, 63, 8, 1983);
|
||||||
|
attr_dev(div1, "id", "auth-or");
|
||||||
|
attr_dev(div1, "class", "pane");
|
||||||
|
add_location(div1, file, 62, 4, 1942);
|
||||||
|
attr_dev(div2, "id", "auth-group");
|
||||||
|
add_location(div2, file, 57, 0, 1589);
|
||||||
|
},
|
||||||
|
l: function claim(nodes) {
|
||||||
|
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
insert_dev(target, div2, anchor);
|
||||||
|
append_dev(div2, div0);
|
||||||
|
append_dev(div0, login_component);
|
||||||
|
/*login_component_binding*/ ctx[3](login_component);
|
||||||
|
append_dev(div0, t0);
|
||||||
|
append_dev(div0, signup_component);
|
||||||
|
/*signup_component_binding*/ ctx[5](signup_component);
|
||||||
|
append_dev(div2, t1);
|
||||||
|
append_dev(div2, div1);
|
||||||
|
append_dev(div1, span);
|
||||||
|
|
||||||
|
if (!mounted) {
|
||||||
|
dispose = [
|
||||||
|
listen_dev(login_component, "click", /*click_handler*/ ctx[4], false, false, false),
|
||||||
|
listen_dev(login_component, "keydown", keydown_handler, false, false, false),
|
||||||
|
listen_dev(signup_component, "click", /*click_handler_1*/ ctx[6], false, false, false),
|
||||||
|
listen_dev(signup_component, "keydown", keydown_handler_1, false, false, false)
|
||||||
|
];
|
||||||
|
|
||||||
|
mounted = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
p: noop,
|
||||||
|
i: noop,
|
||||||
|
o: noop,
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(div2);
|
||||||
|
/*login_component_binding*/ ctx[3](null);
|
||||||
|
/*signup_component_binding*/ ctx[5](null);
|
||||||
|
mounted = false;
|
||||||
|
run_all(dispose);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_fragment.name,
|
||||||
|
type: "component",
|
||||||
|
source: "",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
const keydown_handler = () => "";
|
||||||
|
const keydown_handler_1 = () => "";
|
||||||
|
|
||||||
|
function instance($$self, $$props, $$invalidate) {
|
||||||
|
let { $$slots: slots = {}, $$scope } = $$props;
|
||||||
|
validate_slots('auth-component', slots, []);
|
||||||
|
AuthTools.redirectLogged();
|
||||||
|
let loginComponent;
|
||||||
|
let signupComponent;
|
||||||
|
let context = { googleInit: false };
|
||||||
|
setContext("auth", context);
|
||||||
|
|
||||||
|
function switchFocus(component) {
|
||||||
|
if (component == loginComponent) {
|
||||||
|
$$invalidate(0, loginComponent.focused = true, loginComponent);
|
||||||
|
$$invalidate(1, signupComponent.focused = false, signupComponent);
|
||||||
|
} else {
|
||||||
|
$$invalidate(0, loginComponent.focused = false, loginComponent);
|
||||||
|
$$invalidate(1, signupComponent.focused = true, signupComponent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function callbackGoogle(data) {
|
||||||
|
console.log(data);
|
||||||
|
sendText("/signup-google", data.credential, response => AuthTools.processLoginResponse(response, context.msgs, context.remember.checked));
|
||||||
|
}
|
||||||
|
|
||||||
|
function initGoogle() {
|
||||||
|
if (typeof google != 'undefined') {
|
||||||
|
google.accounts.id.initialize({
|
||||||
|
client_id: '93612176787-sr8qjqem4e3kok4msrnj8s1illt85a9g.apps.googleusercontent.com',
|
||||||
|
callback: callbackGoogle,
|
||||||
|
auto_select: true,
|
||||||
|
context: "signin"
|
||||||
|
});
|
||||||
|
|
||||||
|
context.googleInit = true;
|
||||||
|
} else {
|
||||||
|
setTimeout(initGoogle, 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
initGoogle();
|
||||||
|
const writable_props = [];
|
||||||
|
|
||||||
|
Object.keys($$props).forEach(key => {
|
||||||
|
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console_1.warn(`<auth-component> was created with unknown prop '${key}'`);
|
||||||
|
});
|
||||||
|
|
||||||
|
function login_component_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
loginComponent = $$value;
|
||||||
|
$$invalidate(0, loginComponent);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const click_handler = () => switchFocus(loginComponent);
|
||||||
|
|
||||||
|
function signup_component_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
signupComponent = $$value;
|
||||||
|
$$invalidate(1, signupComponent);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const click_handler_1 = () => switchFocus(signupComponent);
|
||||||
|
|
||||||
|
$$self.$capture_state = () => ({
|
||||||
|
onMount,
|
||||||
|
setContext,
|
||||||
|
getContext,
|
||||||
|
sendText,
|
||||||
|
AuthTools,
|
||||||
|
loginComponent,
|
||||||
|
signupComponent,
|
||||||
|
context,
|
||||||
|
switchFocus,
|
||||||
|
callbackGoogle,
|
||||||
|
initGoogle
|
||||||
|
});
|
||||||
|
|
||||||
|
$$self.$inject_state = $$props => {
|
||||||
|
if ('loginComponent' in $$props) $$invalidate(0, loginComponent = $$props.loginComponent);
|
||||||
|
if ('signupComponent' in $$props) $$invalidate(1, signupComponent = $$props.signupComponent);
|
||||||
|
if ('context' in $$props) context = $$props.context;
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($$props && "$$inject" in $$props) {
|
||||||
|
$$self.$inject_state($$props.$$inject);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
loginComponent,
|
||||||
|
signupComponent,
|
||||||
|
switchFocus,
|
||||||
|
login_component_binding,
|
||||||
|
click_handler,
|
||||||
|
signup_component_binding,
|
||||||
|
click_handler_1
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
class Auth_component extends SvelteElement {
|
||||||
|
constructor(options) {
|
||||||
|
super();
|
||||||
|
this.shadowRoot.innerHTML = `<style>@import '/css/common.css';span{font-size:1.4rem;font-family:var(--sans-serif,sans-serif)}#auth-group{margin:auto;width:auto;margin-bottom:3rem}#auth-grid-group{display:grid;grid-template-columns:30rem 30rem;justify-content:center;gap:1.37rem;width:100%}#auth-or{display:flex;position:absolute;margin:auto;top:40%;left:50%;transform:translate(-50%, -50%);width:5.4rem;height:5.4rem;border-radius:6.8rem;background-color:white;align-items:center;justify-content:center;font-family:var(--sans-serif,sans-serif);font-weight:500}@media only screen and (max-width: 1200px){#auth-grid-group{display:grid;grid-template-columns:30rem;grid-template-rows:auto auto;justify-content:center;gap:1.37rem;width:100%}#auth-or{top:46.4rem}#auth-group{margin-top:2rem;margin-bottom:3rem}}</style>`;
|
||||||
|
|
||||||
|
init(
|
||||||
|
this,
|
||||||
|
{
|
||||||
|
target: this.shadowRoot,
|
||||||
|
props: attribute_to_object(this.attributes),
|
||||||
|
customElement: true
|
||||||
|
},
|
||||||
|
instance,
|
||||||
|
create_fragment,
|
||||||
|
safe_not_equal,
|
||||||
|
{},
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
if (options) {
|
||||||
|
if (options.target) {
|
||||||
|
insert_dev(options.target, this, options.anchor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
customElements.define("auth-component", Auth_component);
|
||||||
|
|
||||||
|
export { Auth_component as default };
|
|
@ -0,0 +1,361 @@
|
||||||
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
import { S as SvelteElement, i as init, a as attribute_to_object, b as insert_dev, s as safe_not_equal, d as dispatch_dev, v as validate_slots, o as onMount, f as element, h as space, n as noop, k as attr_dev, j as add_location, l as append_dev, m as listen_dev, p as detach_dev, r as run_all, q as binding_callbacks } from './index-998178c7.js';
|
||||||
|
import * as AuthTools from '../../../../../../../../../js/libraries/authTools.js';
|
||||||
|
|
||||||
|
/* src\auth\confirmation-component.svelte generated by Svelte v3.52.0 */
|
||||||
|
const file = "src\\auth\\confirmation-component.svelte";
|
||||||
|
|
||||||
|
function create_fragment(ctx) {
|
||||||
|
let div1;
|
||||||
|
let h2;
|
||||||
|
let t1;
|
||||||
|
let div0;
|
||||||
|
let input0;
|
||||||
|
let span0;
|
||||||
|
let t3;
|
||||||
|
let input1;
|
||||||
|
let span1;
|
||||||
|
let t5;
|
||||||
|
let input2;
|
||||||
|
let span2;
|
||||||
|
let t7;
|
||||||
|
let input3;
|
||||||
|
let span3;
|
||||||
|
let t9;
|
||||||
|
let input4;
|
||||||
|
let t10;
|
||||||
|
let span4;
|
||||||
|
let t11;
|
||||||
|
let button;
|
||||||
|
let mounted;
|
||||||
|
let dispose;
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
div1 = element("div");
|
||||||
|
h2 = element("h2");
|
||||||
|
h2.textContent = "CONFIRMATION CODE";
|
||||||
|
t1 = space();
|
||||||
|
div0 = element("div");
|
||||||
|
input0 = element("input");
|
||||||
|
span0 = element("span");
|
||||||
|
span0.textContent = "-";
|
||||||
|
t3 = space();
|
||||||
|
input1 = element("input");
|
||||||
|
span1 = element("span");
|
||||||
|
span1.textContent = "-";
|
||||||
|
t5 = space();
|
||||||
|
input2 = element("input");
|
||||||
|
span2 = element("span");
|
||||||
|
span2.textContent = "-";
|
||||||
|
t7 = space();
|
||||||
|
input3 = element("input");
|
||||||
|
span3 = element("span");
|
||||||
|
span3.textContent = "-";
|
||||||
|
t9 = space();
|
||||||
|
input4 = element("input");
|
||||||
|
t10 = space();
|
||||||
|
span4 = element("span");
|
||||||
|
t11 = space();
|
||||||
|
button = element("button");
|
||||||
|
button.textContent = "Confirm";
|
||||||
|
this.c = noop;
|
||||||
|
attr_dev(h2, "class", "auth-title title-highlight");
|
||||||
|
add_location(h2, file, 55, 4, 1288);
|
||||||
|
attr_dev(input0, "class", "authConfirmationInput");
|
||||||
|
attr_dev(input0, "type", "text");
|
||||||
|
attr_dev(input0, "maxlength", "1");
|
||||||
|
add_location(input0, file, 57, 8, 1394);
|
||||||
|
attr_dev(span0, "class", "dash");
|
||||||
|
add_location(span0, file, 57, 146, 1532);
|
||||||
|
attr_dev(input1, "class", "authConfirmationInput");
|
||||||
|
attr_dev(input1, "type", "text");
|
||||||
|
attr_dev(input1, "maxlength", "1");
|
||||||
|
add_location(input1, file, 58, 8, 1569);
|
||||||
|
attr_dev(span1, "class", "dash");
|
||||||
|
add_location(span1, file, 58, 146, 1707);
|
||||||
|
attr_dev(input2, "class", "authConfirmationInput");
|
||||||
|
attr_dev(input2, "type", "text");
|
||||||
|
attr_dev(input2, "maxlength", "1");
|
||||||
|
add_location(input2, file, 59, 8, 1744);
|
||||||
|
attr_dev(span2, "class", "dash");
|
||||||
|
add_location(span2, file, 59, 146, 1882);
|
||||||
|
attr_dev(input3, "class", "authConfirmationInput");
|
||||||
|
attr_dev(input3, "type", "text");
|
||||||
|
attr_dev(input3, "maxlength", "1");
|
||||||
|
add_location(input3, file, 60, 8, 1919);
|
||||||
|
attr_dev(span3, "class", "dash");
|
||||||
|
add_location(span3, file, 60, 146, 2057);
|
||||||
|
attr_dev(input4, "class", "authConfirmationInput");
|
||||||
|
attr_dev(input4, "type", "text");
|
||||||
|
attr_dev(input4, "maxlength", "1");
|
||||||
|
add_location(input4, file, 61, 8, 2094);
|
||||||
|
attr_dev(div0, "id", "confirmationInputs");
|
||||||
|
add_location(div0, file, 56, 4, 1355);
|
||||||
|
attr_dev(span4, "id", "confirmation-msg");
|
||||||
|
add_location(span4, file, 63, 4, 2250);
|
||||||
|
attr_dev(button, "class", "auth-button");
|
||||||
|
add_location(button, file, 64, 4, 2319);
|
||||||
|
attr_dev(div1, "class", "pane auth-pane");
|
||||||
|
add_location(div1, file, 54, 0, 1254);
|
||||||
|
},
|
||||||
|
l: function claim(nodes) {
|
||||||
|
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
insert_dev(target, div1, anchor);
|
||||||
|
append_dev(div1, h2);
|
||||||
|
append_dev(div1, t1);
|
||||||
|
append_dev(div1, div0);
|
||||||
|
append_dev(div0, input0);
|
||||||
|
/*input0_binding*/ ctx[6](input0);
|
||||||
|
append_dev(div0, span0);
|
||||||
|
append_dev(div0, t3);
|
||||||
|
append_dev(div0, input1);
|
||||||
|
/*input1_binding*/ ctx[8](input1);
|
||||||
|
append_dev(div0, span1);
|
||||||
|
append_dev(div0, t5);
|
||||||
|
append_dev(div0, input2);
|
||||||
|
/*input2_binding*/ ctx[10](input2);
|
||||||
|
append_dev(div0, span2);
|
||||||
|
append_dev(div0, t7);
|
||||||
|
append_dev(div0, input3);
|
||||||
|
/*input3_binding*/ ctx[12](input3);
|
||||||
|
append_dev(div0, span3);
|
||||||
|
append_dev(div0, t9);
|
||||||
|
append_dev(div0, input4);
|
||||||
|
/*input4_binding*/ ctx[14](input4);
|
||||||
|
append_dev(div1, t10);
|
||||||
|
append_dev(div1, span4);
|
||||||
|
/*span4_binding*/ ctx[16](span4);
|
||||||
|
append_dev(div1, t11);
|
||||||
|
append_dev(div1, button);
|
||||||
|
/*button_binding*/ ctx[17](button);
|
||||||
|
|
||||||
|
if (!mounted) {
|
||||||
|
dispose = [
|
||||||
|
listen_dev(input0, "input", /*input_handler*/ ctx[7], false, false, false),
|
||||||
|
listen_dev(input1, "input", /*input_handler_1*/ ctx[9], false, false, false),
|
||||||
|
listen_dev(input2, "input", /*input_handler_2*/ ctx[11], false, false, false),
|
||||||
|
listen_dev(input3, "input", /*input_handler_3*/ ctx[13], false, false, false),
|
||||||
|
listen_dev(input4, "input", /*input_handler_4*/ ctx[15], false, false, false),
|
||||||
|
listen_dev(button, "click", /*click_handler*/ ctx[18], false, false, false)
|
||||||
|
];
|
||||||
|
|
||||||
|
mounted = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
p: noop,
|
||||||
|
i: noop,
|
||||||
|
o: noop,
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(div1);
|
||||||
|
/*input0_binding*/ ctx[6](null);
|
||||||
|
/*input1_binding*/ ctx[8](null);
|
||||||
|
/*input2_binding*/ ctx[10](null);
|
||||||
|
/*input3_binding*/ ctx[12](null);
|
||||||
|
/*input4_binding*/ ctx[14](null);
|
||||||
|
/*span4_binding*/ ctx[16](null);
|
||||||
|
/*button_binding*/ ctx[17](null);
|
||||||
|
mounted = false;
|
||||||
|
run_all(dispose);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_fragment.name,
|
||||||
|
type: "component",
|
||||||
|
source: "",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
function instance($$self, $$props, $$invalidate) {
|
||||||
|
let { $$slots: slots = {}, $$scope } = $$props;
|
||||||
|
validate_slots('confirmation-component', slots, []);
|
||||||
|
let confirmationInputs = [];
|
||||||
|
let confirmationMsg;
|
||||||
|
let confirmationButton;
|
||||||
|
|
||||||
|
function onlyNumberKey(ind, evt) {
|
||||||
|
// Only ASCII character in that range allowed
|
||||||
|
var value = evt.data;
|
||||||
|
|
||||||
|
if (value in ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]) {
|
||||||
|
if (ind < 4) {
|
||||||
|
confirmationInputs[ind + 1].focus();
|
||||||
|
} else {
|
||||||
|
AuthTools.confirmEmail(confirmationMsg, getCode(), callback);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$$invalidate(0, confirmationInputs[ind].value = "", confirmationInputs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCode() {
|
||||||
|
let code = "";
|
||||||
|
|
||||||
|
for (let input of confirmationInputs) {
|
||||||
|
code += input.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return parseInt(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
function callback(response) {
|
||||||
|
if (response == "true") {
|
||||||
|
AuthTools.toDashboard();
|
||||||
|
} else {
|
||||||
|
$$invalidate(1, confirmationMsg.innerHTML = "Wrong code", confirmationMsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
const writable_props = [];
|
||||||
|
|
||||||
|
Object.keys($$props).forEach(key => {
|
||||||
|
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console.warn(`<confirmation-component> was created with unknown prop '${key}'`);
|
||||||
|
});
|
||||||
|
|
||||||
|
function input0_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
confirmationInputs[0] = $$value;
|
||||||
|
$$invalidate(0, confirmationInputs);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const input_handler = evt => onlyNumberKey(0, evt);
|
||||||
|
|
||||||
|
function input1_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
confirmationInputs[1] = $$value;
|
||||||
|
$$invalidate(0, confirmationInputs);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const input_handler_1 = evt => onlyNumberKey(1, evt);
|
||||||
|
|
||||||
|
function input2_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
confirmationInputs[2] = $$value;
|
||||||
|
$$invalidate(0, confirmationInputs);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const input_handler_2 = evt => onlyNumberKey(2, evt);
|
||||||
|
|
||||||
|
function input3_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
confirmationInputs[3] = $$value;
|
||||||
|
$$invalidate(0, confirmationInputs);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const input_handler_3 = evt => onlyNumberKey(3, evt);
|
||||||
|
|
||||||
|
function input4_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
confirmationInputs[4] = $$value;
|
||||||
|
$$invalidate(0, confirmationInputs);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const input_handler_4 = evt => onlyNumberKey(4, evt);
|
||||||
|
|
||||||
|
function span4_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
confirmationMsg = $$value;
|
||||||
|
$$invalidate(1, confirmationMsg);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function button_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
confirmationButton = $$value;
|
||||||
|
$$invalidate(2, confirmationButton);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const click_handler = () => AuthTools.confirmEmail(confirmationMsg, getCode(), callback);
|
||||||
|
|
||||||
|
$$self.$capture_state = () => ({
|
||||||
|
onMount,
|
||||||
|
AuthTools,
|
||||||
|
confirmationInputs,
|
||||||
|
confirmationMsg,
|
||||||
|
confirmationButton,
|
||||||
|
onlyNumberKey,
|
||||||
|
getCode,
|
||||||
|
callback
|
||||||
|
});
|
||||||
|
|
||||||
|
$$self.$inject_state = $$props => {
|
||||||
|
if ('confirmationInputs' in $$props) $$invalidate(0, confirmationInputs = $$props.confirmationInputs);
|
||||||
|
if ('confirmationMsg' in $$props) $$invalidate(1, confirmationMsg = $$props.confirmationMsg);
|
||||||
|
if ('confirmationButton' in $$props) $$invalidate(2, confirmationButton = $$props.confirmationButton);
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($$props && "$$inject" in $$props) {
|
||||||
|
$$self.$inject_state($$props.$$inject);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
confirmationInputs,
|
||||||
|
confirmationMsg,
|
||||||
|
confirmationButton,
|
||||||
|
onlyNumberKey,
|
||||||
|
getCode,
|
||||||
|
callback,
|
||||||
|
input0_binding,
|
||||||
|
input_handler,
|
||||||
|
input1_binding,
|
||||||
|
input_handler_1,
|
||||||
|
input2_binding,
|
||||||
|
input_handler_2,
|
||||||
|
input3_binding,
|
||||||
|
input_handler_3,
|
||||||
|
input4_binding,
|
||||||
|
input_handler_4,
|
||||||
|
span4_binding,
|
||||||
|
button_binding,
|
||||||
|
click_handler
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
class Confirmation_component extends SvelteElement {
|
||||||
|
constructor(options) {
|
||||||
|
super();
|
||||||
|
this.shadowRoot.innerHTML = `<style>@import '/css/common.css';.auth-pane{position:relative;padding:3.4rem;padding-top:5.5rem;padding-bottom:5.5rem;width:33rem;height:auto;margin:auto}.auth-title{position:relative;left:0.7rem;top:0.2rem;margin-bottom:1.4rem}.authConfirmationInput{position:relative;width:3.16rem;font-family:var(--serif,serif);font-size:3rem;border-radius:0.34rem;margin-bottom:0.7rem;text-align:center;padding-left:0;padding-bottom:0.3 rem}.dash{display:block;font-size:3rem;font-family:var(--serif,serif)}#confirmationInputs{margin:auto;display:grid;justify-content:space-between;grid-auto-flow:column}.auth-button{margin-top:1.4rem;height:3.4rem;width:100%;font-family:var(--sans-serif,sans-serif);font-size:1.6rem;color:white;background-color:var(--pink);border-color:var(--pink);border-radius:0.5rem;filter:drop-shadow(0.07rem 0.14rem 0.07rem rgb(0 0 0 / 0.4))}#confirmation-msg{display:inline;color:red}</style>`;
|
||||||
|
|
||||||
|
init(
|
||||||
|
this,
|
||||||
|
{
|
||||||
|
target: this.shadowRoot,
|
||||||
|
props: attribute_to_object(this.attributes),
|
||||||
|
customElement: true
|
||||||
|
},
|
||||||
|
instance,
|
||||||
|
create_fragment,
|
||||||
|
safe_not_equal,
|
||||||
|
{},
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
if (options) {
|
||||||
|
if (options.target) {
|
||||||
|
insert_dev(options.target, this, options.anchor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
customElements.define("confirmation-component", Confirmation_component);
|
||||||
|
|
||||||
|
export { Confirmation_component as default };
|
|
@ -1 +1,99 @@
|
||||||
import{S as e,i as s,a as t,b as o,s as i,g as a,n as r,j as n,d as c,o as d}from"./index-8c09578c.js";function p(e){let s;return{c(){s=a("div"),s.innerHTML="<div><p>We use cookies to improve your experience, personalise your content and analyse site usage. By clicking “OK”, you agree to the use of cookies.</p></div>",this.c=r,n(s,"id","wrapper")},m(e,t){o(e,s,t)},p:r,i:r,o:r,d(e){e&&c(s)}}}function u(e){return d((()=>{})),[]}class h extends e{constructor(e){super(),this.shadowRoot.innerHTML="<style>@import '/css/common.css';#wrapper{display:none;position:relative;height:5rem;width:100%;background:white;box-shadow:0 0 0.314rem rgb(187, 187, 187);;}</style>",s(this,{target:this.shadowRoot,props:t(this.attributes),customElement:!0},u,p,i,{},null),e&&e.target&&o(e.target,this,e.anchor)}}customElements.define("cookies-dialog",h);export{h as default};
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
import { S as SvelteElement, i as init, a as attribute_to_object, b as insert_dev, s as safe_not_equal, d as dispatch_dev, v as validate_slots, o as onMount, f as element, n as noop, j as add_location, k as attr_dev, l as append_dev, p as detach_dev } from './index-998178c7.js';
|
||||||
|
|
||||||
|
/* src\components\cookies-dialog.svelte generated by Svelte v3.52.0 */
|
||||||
|
const file = "src\\components\\cookies-dialog.svelte";
|
||||||
|
|
||||||
|
function create_fragment(ctx) {
|
||||||
|
let div1;
|
||||||
|
let div0;
|
||||||
|
let p;
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
div1 = element("div");
|
||||||
|
div0 = element("div");
|
||||||
|
p = element("p");
|
||||||
|
p.textContent = "We use cookies to improve your experience, personalise your content and analyse site usage. By clicking “OK”, you agree to the use of cookies.";
|
||||||
|
this.c = noop;
|
||||||
|
add_location(p, file, 19, 8, 248);
|
||||||
|
add_location(div0, file, 18, 4, 233);
|
||||||
|
attr_dev(div1, "id", "wrapper");
|
||||||
|
add_location(div1, file, 17, 0, 209);
|
||||||
|
},
|
||||||
|
l: function claim(nodes) {
|
||||||
|
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
insert_dev(target, div1, anchor);
|
||||||
|
append_dev(div1, div0);
|
||||||
|
append_dev(div0, p);
|
||||||
|
},
|
||||||
|
p: noop,
|
||||||
|
i: noop,
|
||||||
|
o: noop,
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(div1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_fragment.name,
|
||||||
|
type: "component",
|
||||||
|
source: "",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
function instance($$self, $$props, $$invalidate) {
|
||||||
|
let { $$slots: slots = {}, $$scope } = $$props;
|
||||||
|
validate_slots('cookies-dialog', slots, []);
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
const writable_props = [];
|
||||||
|
|
||||||
|
Object.keys($$props).forEach(key => {
|
||||||
|
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console.warn(`<cookies-dialog> was created with unknown prop '${key}'`);
|
||||||
|
});
|
||||||
|
|
||||||
|
$$self.$capture_state = () => ({ onMount });
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
class Cookies_dialog extends SvelteElement {
|
||||||
|
constructor(options) {
|
||||||
|
super();
|
||||||
|
this.shadowRoot.innerHTML = `<style>@import '/css/common.css';#wrapper{display:none;position:relative;height:5rem;width:100%;background:white;box-shadow:0 0 0.314rem rgb(187, 187, 187);;}</style>`;
|
||||||
|
|
||||||
|
init(
|
||||||
|
this,
|
||||||
|
{
|
||||||
|
target: this.shadowRoot,
|
||||||
|
props: attribute_to_object(this.attributes),
|
||||||
|
customElement: true
|
||||||
|
},
|
||||||
|
instance,
|
||||||
|
create_fragment,
|
||||||
|
safe_not_equal,
|
||||||
|
{},
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
if (options) {
|
||||||
|
if (options.target) {
|
||||||
|
insert_dev(options.target, this, options.anchor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
customElements.define("cookies-dialog", Cookies_dialog);
|
||||||
|
|
||||||
|
export { Cookies_dialog as default };
|
||||||
|
|
|
@ -1 +1,347 @@
|
||||||
import{S as t,i as e,a as o,b as r,s as a,e as i,n,d as s,c as m,g as c,t as f,h as d,j as l,w as g,m as p,p as h,q as u}from"./index-8c09578c.js";import{w}from"./index-77787e10.js";import{loadLocaleContent as b}from"../../../../../../../../../js/libraries/serverTools.js";function v(t){let e,o,a,i,n,m,w,b,v,k,y,x,L,j,z,U,_,C,T,B,H,M,R=t[1].contactUs+"",A=t[1].inviteLink+"",D=t[1].inviteLink+"";return{c(){e=c("footer"),o=c("div"),a=c("div"),i=c("div"),n=c("h2"),m=f(R),w=d(),b=c("p"),v=f("Discord: "),k=c("a"),y=f(A),x=d(),L=c("p"),j=f("WhatsApp: "),z=c("a"),U=f(D),_=d(),C=c("button"),C.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="42.545" height="72.601" viewBox="0 0 42.545 72.601"><g id="Group_268" data-name="Group 268" transform="translate(-6.177 -2.399)"><rect id="Rectangle_146" data-name="Rectangle 146" width="11" height="51" rx="5.5" transform="translate(22 24)" fill="#cb1816"></rect><path id="Path_1145" data-name="Path 1145" d="M23.814,4.021a5,5,0,0,1,7.372,0l16.134,17.6c2.94,3.207,1.046,10.4-3.686,8.379S28.02,14.081,28.391,13.524,16.544,27.976,11.366,30,4.741,24.828,7.68,21.621Z" fill="#DD1C1A"></path></g></svg>',T=d(),B=c("p"),B.innerHTML='Licensed under a Creative Commons <a href="https://creativecommons.org/licenses/by/4.0/legalcode " target="_blank" rel="noreferrer">CC BY 4.0 license</a>',l(k,"href","https://discord.gg/Qk8KUk787z"),l(k,"target","_blank"),l(k,"rel","noreferrer"),g(k,"margin-left","1.8rem"),l(z,"href","https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh"),l(z,"target","_blank"),l(z,"rel","noreferrer"),g(z,"margin-left","0.5rem"),l(i,"id","contact-us-container"),l(a,"id","footer-grid-content-container"),l(a,"class","logged"),l(C,"id","footer-up"),l(C,"aria-label","go up"),l(B,"id","footer-copyright"),l(o,"id","footer-content-container")},m(s,c){r(s,e,c),p(e,o),p(o,a),p(a,i),p(i,n),p(n,m),p(i,w),p(i,b),p(b,v),p(b,k),p(k,y),p(i,x),p(i,L),p(L,j),p(L,z),p(z,U),p(o,_),p(o,C),p(o,T),p(o,B),H||(M=h(C,"click",t[4]),H=!0)},p(t,e){2&e&&R!==(R=t[1].contactUs+"")&&u(m,R),2&e&&A!==(A=t[1].inviteLink+"")&&u(y,A),2&e&&D!==(D=t[1].inviteLink+"")&&u(U,D)},d(t){t&&s(e),H=!1,M()}}}function k(t){let e,o=2==t[0]&&v(t);return{c(){o&&o.c(),e=i()},m(t,a){o&&o.m(t,a),r(t,e,a)},p(t,r){2==t[0]?o?o.p(t,r):(o=v(t),o.c(),o.m(e.parentNode,e)):o&&(o.d(1),o=null)},d(t){o&&o.d(t),t&&s(e)}}}function y(t){let e,o=t[0],m=k(t);return{c(){m.c(),e=i(),this.c=n},m(t,o){m.m(t,o),r(t,e,o)},p(t,[r]){1&r&&a(o,o=t[0])?(m.d(1),m=k(t),m.c(),m.m(e.parentNode,e)):m.p(t,r)},i:n,o:n,d(t){t&&s(e),m.d(t)}}}function x(t,e,o){let r,a,i=w(0);m(t,i,(t=>o(0,r=t)));let n=w({});m(t,n,(t=>o(1,a=t))),b(n,"countries",i),b(n,"footer-component",i);return[r,a,i,n,()=>{location.href="#"}]}class L extends t{constructor(t){super(),this.shadowRoot.innerHTML="<style>@import '/css/common.css';footer{position:relative;bottom:0;width:100%;height:auto;background:#5B6970;border-top:#cb1816 solid 0.5rem}footer p,footer a{font-family:var(--sans-serif)}#footer-content-container{position:relative;margin:auto;padding-top:2rem;max-width:116rem;width:97vw}#footer-grid-content-container{display:grid;margin-left:2rem;margin-right:2rem;margin-bottom:1rem}.logged{grid-template-columns:auto auto 2rem}footer h2{color:#ffffff;font-size:1.3rem;margin-bottom:0.5rem}#footer-copyright{position:relative;margin:auto;width:100%;bottom:0rem;height:3rem;top:0rem;margin-bottom:0;font-size:1rem;text-align:center}#footer-copyright *{font-size:1rem}footer a{font-size:1.1rem;color:#ffffff}footer p{display:block;font-size:1.1rem;color:#d8d8d8;font-family:var(--sans-serif,sans-serif);margin-bottom:0.5rem}#contact-us-container{width:16rem}#footer-up{position:absolute;width:4.8rem;height:4.8rem;border-radius:3.4rem;top:4rem;right:2rem;background:#ffffff}#footer-up svg{width:40%;height:auto}@media only screen and (max-width: 1170px){.logged{grid-template-rows:auto auto auto;grid-template-columns:auto;row-gap:2rem}#footer-copyright{height:1rem;top:-2rem}}</style>",e(this,{target:this.shadowRoot,props:o(this.attributes),customElement:!0},x,y,a,{},null),t&&t.target&&r(t.target,this,t.anchor)}}customElements.define("footer-component",L);export{L as default};
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
import { S as SvelteElement, i as init, a as attribute_to_object, b as insert_dev, s as safe_not_equal, d as dispatch_dev, v as validate_slots, w as validate_store, x as component_subscribe, y as empty, n as noop, p as detach_dev, f as element, B as text, h as space, G as svg_element, j as add_location, k as attr_dev, F as set_style, l as append_dev, m as listen_dev, C as set_data_dev } from './index-998178c7.js';
|
||||||
|
import { w as writable } from './index-f9998ce7.js';
|
||||||
|
import { loadLocaleContent } from '../../../../../../../../../js/libraries/serverTools.js';
|
||||||
|
|
||||||
|
/* src\footer\footer-component.svelte generated by Svelte v3.52.0 */
|
||||||
|
const file = "src\\footer\\footer-component.svelte";
|
||||||
|
|
||||||
|
// (21:4) {#if $loaded==2}
|
||||||
|
function create_if_block(ctx) {
|
||||||
|
let footer;
|
||||||
|
let div2;
|
||||||
|
let div1;
|
||||||
|
let div0;
|
||||||
|
let h2;
|
||||||
|
let t0_value = /*$content*/ ctx[1].contactUs + "";
|
||||||
|
let t0;
|
||||||
|
let t1;
|
||||||
|
let p0;
|
||||||
|
let t2;
|
||||||
|
let a0;
|
||||||
|
let t3_value = /*$content*/ ctx[1].inviteLink + "";
|
||||||
|
let t3;
|
||||||
|
let t4;
|
||||||
|
let p1;
|
||||||
|
let t5;
|
||||||
|
let a1;
|
||||||
|
let t6_value = /*$content*/ ctx[1].inviteLink + "";
|
||||||
|
let t6;
|
||||||
|
let t7;
|
||||||
|
let button;
|
||||||
|
let svg;
|
||||||
|
let g;
|
||||||
|
let rect;
|
||||||
|
let path;
|
||||||
|
let t8;
|
||||||
|
let p2;
|
||||||
|
let t9;
|
||||||
|
let a2;
|
||||||
|
let mounted;
|
||||||
|
let dispose;
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
footer = element("footer");
|
||||||
|
div2 = element("div");
|
||||||
|
div1 = element("div");
|
||||||
|
div0 = element("div");
|
||||||
|
h2 = element("h2");
|
||||||
|
t0 = text(t0_value);
|
||||||
|
t1 = space();
|
||||||
|
p0 = element("p");
|
||||||
|
t2 = text("Discord: ");
|
||||||
|
a0 = element("a");
|
||||||
|
t3 = text(t3_value);
|
||||||
|
t4 = space();
|
||||||
|
p1 = element("p");
|
||||||
|
t5 = text("WhatsApp: ");
|
||||||
|
a1 = element("a");
|
||||||
|
t6 = text(t6_value);
|
||||||
|
t7 = space();
|
||||||
|
button = element("button");
|
||||||
|
svg = svg_element("svg");
|
||||||
|
g = svg_element("g");
|
||||||
|
rect = svg_element("rect");
|
||||||
|
path = svg_element("path");
|
||||||
|
t8 = space();
|
||||||
|
p2 = element("p");
|
||||||
|
t9 = text("Licensed under a Creative Commons ");
|
||||||
|
a2 = element("a");
|
||||||
|
a2.textContent = "CC BY 4.0 license";
|
||||||
|
add_location(h2, file, 25, 24, 692);
|
||||||
|
attr_dev(a0, "href", "https://discord.gg/Qk8KUk787z");
|
||||||
|
attr_dev(a0, "target", "_blank");
|
||||||
|
attr_dev(a0, "rel", "noreferrer");
|
||||||
|
set_style(a0, "margin-left", "1.8rem");
|
||||||
|
add_location(a0, file, 27, 36, 858);
|
||||||
|
add_location(p0, file, 27, 24, 846);
|
||||||
|
attr_dev(a1, "href", "https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh");
|
||||||
|
attr_dev(a1, "target", "_blank");
|
||||||
|
attr_dev(a1, "rel", "noreferrer");
|
||||||
|
set_style(a1, "margin-left", "0.5rem");
|
||||||
|
add_location(a1, file, 28, 37, 1026);
|
||||||
|
add_location(p1, file, 28, 24, 1013);
|
||||||
|
attr_dev(div0, "id", "contact-us-container");
|
||||||
|
add_location(div0, file, 24, 20, 635);
|
||||||
|
attr_dev(div1, "id", "footer-grid-content-container");
|
||||||
|
attr_dev(div1, "class", "logged");
|
||||||
|
add_location(div1, file, 23, 16, 558);
|
||||||
|
attr_dev(rect, "id", "Rectangle_146");
|
||||||
|
attr_dev(rect, "data-name", "Rectangle 146");
|
||||||
|
attr_dev(rect, "width", "11");
|
||||||
|
attr_dev(rect, "height", "51");
|
||||||
|
attr_dev(rect, "rx", "5.5");
|
||||||
|
attr_dev(rect, "transform", "translate(22 24)");
|
||||||
|
attr_dev(rect, "fill", "var(--red)");
|
||||||
|
add_location(rect, file, 34, 24, 1573);
|
||||||
|
attr_dev(path, "id", "Path_1145");
|
||||||
|
attr_dev(path, "data-name", "Path 1145");
|
||||||
|
attr_dev(path, "d", "M23.814,4.021a5,5,0,0,1,7.372,0l16.134,17.6c2.94,3.207,1.046,10.4-3.686,8.379S28.02,14.081,28.391,13.524,16.544,27.976,11.366,30,4.741,24.828,7.68,21.621Z");
|
||||||
|
attr_dev(path, "fill", "var(--red)");
|
||||||
|
add_location(path, file, 35, 24, 1730);
|
||||||
|
attr_dev(g, "id", "Group_268");
|
||||||
|
attr_dev(g, "data-name", "Group 268");
|
||||||
|
attr_dev(g, "transform", "translate(-6.177 -2.399)");
|
||||||
|
add_location(g, file, 33, 24, 1470);
|
||||||
|
attr_dev(svg, "xmlns", "http://www.w3.org/2000/svg");
|
||||||
|
attr_dev(svg, "width", "42.545");
|
||||||
|
attr_dev(svg, "height", "72.601");
|
||||||
|
attr_dev(svg, "viewBox", "0 0 42.545 72.601");
|
||||||
|
add_location(svg, file, 32, 20, 1345);
|
||||||
|
attr_dev(button, "id", "footer-up");
|
||||||
|
attr_dev(button, "aria-label", "go up");
|
||||||
|
add_location(button, file, 31, 16, 1244);
|
||||||
|
attr_dev(a2, "href", "https://creativecommons.org/licenses/by/4.0/legalcode ");
|
||||||
|
attr_dev(a2, "target", "_blank");
|
||||||
|
attr_dev(a2, "rel", "noreferrer");
|
||||||
|
add_location(a2, file, 39, 75, 2143);
|
||||||
|
attr_dev(p2, "id", "footer-copyright");
|
||||||
|
add_location(p2, file, 39, 16, 2084);
|
||||||
|
attr_dev(div2, "id", "footer-content-container");
|
||||||
|
add_location(div2, file, 22, 12, 505);
|
||||||
|
add_location(footer, file, 21, 8, 483);
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
insert_dev(target, footer, anchor);
|
||||||
|
append_dev(footer, div2);
|
||||||
|
append_dev(div2, div1);
|
||||||
|
append_dev(div1, div0);
|
||||||
|
append_dev(div0, h2);
|
||||||
|
append_dev(h2, t0);
|
||||||
|
append_dev(div0, t1);
|
||||||
|
append_dev(div0, p0);
|
||||||
|
append_dev(p0, t2);
|
||||||
|
append_dev(p0, a0);
|
||||||
|
append_dev(a0, t3);
|
||||||
|
append_dev(div0, t4);
|
||||||
|
append_dev(div0, p1);
|
||||||
|
append_dev(p1, t5);
|
||||||
|
append_dev(p1, a1);
|
||||||
|
append_dev(a1, t6);
|
||||||
|
append_dev(div2, t7);
|
||||||
|
append_dev(div2, button);
|
||||||
|
append_dev(button, svg);
|
||||||
|
append_dev(svg, g);
|
||||||
|
append_dev(g, rect);
|
||||||
|
append_dev(g, path);
|
||||||
|
append_dev(div2, t8);
|
||||||
|
append_dev(div2, p2);
|
||||||
|
append_dev(p2, t9);
|
||||||
|
append_dev(p2, a2);
|
||||||
|
|
||||||
|
if (!mounted) {
|
||||||
|
dispose = listen_dev(button, "click", /*click_handler*/ ctx[4], false, false, false);
|
||||||
|
mounted = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
p: function update(ctx, dirty) {
|
||||||
|
if (dirty & /*$content*/ 2 && t0_value !== (t0_value = /*$content*/ ctx[1].contactUs + "")) set_data_dev(t0, t0_value);
|
||||||
|
if (dirty & /*$content*/ 2 && t3_value !== (t3_value = /*$content*/ ctx[1].inviteLink + "")) set_data_dev(t3, t3_value);
|
||||||
|
if (dirty & /*$content*/ 2 && t6_value !== (t6_value = /*$content*/ ctx[1].inviteLink + "")) set_data_dev(t6, t6_value);
|
||||||
|
},
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(footer);
|
||||||
|
mounted = false;
|
||||||
|
dispose();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_if_block.name,
|
||||||
|
type: "if",
|
||||||
|
source: "(21:4) {#if $loaded==2}",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
// (20:0) {#key $loaded}
|
||||||
|
function create_key_block(ctx) {
|
||||||
|
let if_block_anchor;
|
||||||
|
let if_block = /*$loaded*/ ctx[0] == 2 && create_if_block(ctx);
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
if (if_block) if_block.c();
|
||||||
|
if_block_anchor = empty();
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
if (if_block) if_block.m(target, anchor);
|
||||||
|
insert_dev(target, if_block_anchor, anchor);
|
||||||
|
},
|
||||||
|
p: function update(ctx, dirty) {
|
||||||
|
if (/*$loaded*/ ctx[0] == 2) {
|
||||||
|
if (if_block) {
|
||||||
|
if_block.p(ctx, dirty);
|
||||||
|
} else {
|
||||||
|
if_block = create_if_block(ctx);
|
||||||
|
if_block.c();
|
||||||
|
if_block.m(if_block_anchor.parentNode, if_block_anchor);
|
||||||
|
}
|
||||||
|
} else if (if_block) {
|
||||||
|
if_block.d(1);
|
||||||
|
if_block = null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (if_block) if_block.d(detaching);
|
||||||
|
if (detaching) detach_dev(if_block_anchor);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_key_block.name,
|
||||||
|
type: "key",
|
||||||
|
source: "(20:0) {#key $loaded}",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_fragment(ctx) {
|
||||||
|
let previous_key = /*$loaded*/ ctx[0];
|
||||||
|
let key_block_anchor;
|
||||||
|
let key_block = create_key_block(ctx);
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
key_block.c();
|
||||||
|
key_block_anchor = empty();
|
||||||
|
this.c = noop;
|
||||||
|
},
|
||||||
|
l: function claim(nodes) {
|
||||||
|
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
key_block.m(target, anchor);
|
||||||
|
insert_dev(target, key_block_anchor, anchor);
|
||||||
|
},
|
||||||
|
p: function update(ctx, [dirty]) {
|
||||||
|
if (dirty & /*$loaded*/ 1 && safe_not_equal(previous_key, previous_key = /*$loaded*/ ctx[0])) {
|
||||||
|
key_block.d(1);
|
||||||
|
key_block = create_key_block(ctx);
|
||||||
|
key_block.c();
|
||||||
|
key_block.m(key_block_anchor.parentNode, key_block_anchor);
|
||||||
|
} else {
|
||||||
|
key_block.p(ctx, dirty);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
i: noop,
|
||||||
|
o: noop,
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(key_block_anchor);
|
||||||
|
key_block.d(detaching);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_fragment.name,
|
||||||
|
type: "component",
|
||||||
|
source: "",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
function instance($$self, $$props, $$invalidate) {
|
||||||
|
let $loaded;
|
||||||
|
let $content;
|
||||||
|
let { $$slots: slots = {}, $$scope } = $$props;
|
||||||
|
validate_slots('footer-component', slots, []);
|
||||||
|
let loaded = writable(0);
|
||||||
|
validate_store(loaded, 'loaded');
|
||||||
|
component_subscribe($$self, loaded, value => $$invalidate(0, $loaded = value));
|
||||||
|
let content = writable({});
|
||||||
|
validate_store(content, 'content');
|
||||||
|
component_subscribe($$self, content, value => $$invalidate(1, $content = value));
|
||||||
|
loadLocaleContent(content, "countries", loaded);
|
||||||
|
loadLocaleContent(content, "footer-component", loaded);
|
||||||
|
const writable_props = [];
|
||||||
|
|
||||||
|
Object.keys($$props).forEach(key => {
|
||||||
|
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console.warn(`<footer-component> was created with unknown prop '${key}'`);
|
||||||
|
});
|
||||||
|
|
||||||
|
const click_handler = () => {
|
||||||
|
location.href = '#';
|
||||||
|
};
|
||||||
|
|
||||||
|
$$self.$capture_state = () => ({
|
||||||
|
writable,
|
||||||
|
loadLocaleContent,
|
||||||
|
loaded,
|
||||||
|
content,
|
||||||
|
$loaded,
|
||||||
|
$content
|
||||||
|
});
|
||||||
|
|
||||||
|
$$self.$inject_state = $$props => {
|
||||||
|
if ('loaded' in $$props) $$invalidate(2, loaded = $$props.loaded);
|
||||||
|
if ('content' in $$props) $$invalidate(3, content = $$props.content);
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($$props && "$$inject" in $$props) {
|
||||||
|
$$self.$inject_state($$props.$$inject);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [$loaded, $content, loaded, content, click_handler];
|
||||||
|
}
|
||||||
|
|
||||||
|
class Footer_component extends SvelteElement {
|
||||||
|
constructor(options) {
|
||||||
|
super();
|
||||||
|
this.shadowRoot.innerHTML = `<style>@import '/css/common.css';footer{position:relative;bottom:0;width:100%;height:auto;background:var(--gray);border-top:var(--red) solid 0.5rem}footer p,footer a{font-family:var(--sans-serif)}#footer-content-container{position:relative;margin:auto;padding-top:2rem;max-width:116rem;width:97vw}#footer-grid-content-container{display:grid;margin-left:2rem;margin-right:2rem;margin-bottom:1rem}.logged{grid-template-columns:auto auto 2rem}footer h2{color:#ffffff;font-size:1.3rem;margin-bottom:0.5rem}#footer-copyright{position:relative;margin:auto;width:100%;bottom:0rem;height:3rem;top:0rem;margin-bottom:0;font-size:1rem;text-align:center}#footer-copyright *{font-size:1rem}footer a{font-size:1.1rem;color:#ffffff}footer p{display:block;font-size:1.1rem;color:#d8d8d8;font-family:var(--sans-serif,sans-serif);margin-bottom:0.5rem}#contact-us-container{width:16rem}#footer-up{position:absolute;width:4.8rem;height:4.8rem;border-radius:3.4rem;top:4rem;right:2rem;background:#ffffff}#footer-up svg{width:40%;height:auto}@media only screen and (max-width: 1170px){.logged{grid-template-rows:auto auto auto;grid-template-columns:auto;row-gap:2rem}#footer-copyright{height:1rem;top:-2rem}}</style>`;
|
||||||
|
|
||||||
|
init(
|
||||||
|
this,
|
||||||
|
{
|
||||||
|
target: this.shadowRoot,
|
||||||
|
props: attribute_to_object(this.attributes),
|
||||||
|
customElement: true
|
||||||
|
},
|
||||||
|
instance,
|
||||||
|
create_fragment,
|
||||||
|
safe_not_equal,
|
||||||
|
{},
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
if (options) {
|
||||||
|
if (options.target) {
|
||||||
|
insert_dev(options.target, this, options.anchor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
customElements.define("footer-component", Footer_component);
|
||||||
|
|
||||||
|
export { Footer_component as default };
|
||||||
|
|
|
@ -0,0 +1,513 @@
|
||||||
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
function noop() { }
|
||||||
|
function add_location(element, file, line, column, char) {
|
||||||
|
element.__svelte_meta = {
|
||||||
|
loc: { file, line, column, char }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function run(fn) {
|
||||||
|
return fn();
|
||||||
|
}
|
||||||
|
function blank_object() {
|
||||||
|
return Object.create(null);
|
||||||
|
}
|
||||||
|
function run_all(fns) {
|
||||||
|
fns.forEach(run);
|
||||||
|
}
|
||||||
|
function is_function(thing) {
|
||||||
|
return typeof thing === 'function';
|
||||||
|
}
|
||||||
|
function safe_not_equal(a, b) {
|
||||||
|
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
|
||||||
|
}
|
||||||
|
let src_url_equal_anchor;
|
||||||
|
function src_url_equal(element_src, url) {
|
||||||
|
if (!src_url_equal_anchor) {
|
||||||
|
src_url_equal_anchor = document.createElement('a');
|
||||||
|
}
|
||||||
|
src_url_equal_anchor.href = url;
|
||||||
|
return element_src === src_url_equal_anchor.href;
|
||||||
|
}
|
||||||
|
function is_empty(obj) {
|
||||||
|
return Object.keys(obj).length === 0;
|
||||||
|
}
|
||||||
|
function validate_store(store, name) {
|
||||||
|
if (store != null && typeof store.subscribe !== 'function') {
|
||||||
|
throw new Error(`'${name}' is not a store with a 'subscribe' method`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function subscribe(store, ...callbacks) {
|
||||||
|
if (store == null) {
|
||||||
|
return noop;
|
||||||
|
}
|
||||||
|
const unsub = store.subscribe(...callbacks);
|
||||||
|
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
|
||||||
|
}
|
||||||
|
function component_subscribe(component, store, callback) {
|
||||||
|
component.$$.on_destroy.push(subscribe(store, callback));
|
||||||
|
}
|
||||||
|
function append(target, node) {
|
||||||
|
target.appendChild(node);
|
||||||
|
}
|
||||||
|
function insert(target, node, anchor) {
|
||||||
|
target.insertBefore(node, anchor || null);
|
||||||
|
}
|
||||||
|
function detach(node) {
|
||||||
|
node.parentNode.removeChild(node);
|
||||||
|
}
|
||||||
|
function destroy_each(iterations, detaching) {
|
||||||
|
for (let i = 0; i < iterations.length; i += 1) {
|
||||||
|
if (iterations[i])
|
||||||
|
iterations[i].d(detaching);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function element(name) {
|
||||||
|
return document.createElement(name);
|
||||||
|
}
|
||||||
|
function svg_element(name) {
|
||||||
|
return document.createElementNS('http://www.w3.org/2000/svg', name);
|
||||||
|
}
|
||||||
|
function text(data) {
|
||||||
|
return document.createTextNode(data);
|
||||||
|
}
|
||||||
|
function space() {
|
||||||
|
return text(' ');
|
||||||
|
}
|
||||||
|
function empty() {
|
||||||
|
return text('');
|
||||||
|
}
|
||||||
|
function listen(node, event, handler, options) {
|
||||||
|
node.addEventListener(event, handler, options);
|
||||||
|
return () => node.removeEventListener(event, handler, options);
|
||||||
|
}
|
||||||
|
function attr(node, attribute, value) {
|
||||||
|
if (value == null)
|
||||||
|
node.removeAttribute(attribute);
|
||||||
|
else if (node.getAttribute(attribute) !== value)
|
||||||
|
node.setAttribute(attribute, value);
|
||||||
|
}
|
||||||
|
function set_custom_element_data(node, prop, value) {
|
||||||
|
if (prop in node) {
|
||||||
|
node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
attr(node, prop, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function children(element) {
|
||||||
|
return Array.from(element.childNodes);
|
||||||
|
}
|
||||||
|
function set_style(node, key, value, important) {
|
||||||
|
if (value === null) {
|
||||||
|
node.style.removeProperty(key);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
node.style.setProperty(key, value, important ? 'important' : '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {
|
||||||
|
const e = document.createEvent('CustomEvent');
|
||||||
|
e.initCustomEvent(type, bubbles, cancelable, detail);
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
class HtmlTag {
|
||||||
|
constructor(is_svg = false) {
|
||||||
|
this.is_svg = false;
|
||||||
|
this.is_svg = is_svg;
|
||||||
|
this.e = this.n = null;
|
||||||
|
}
|
||||||
|
c(html) {
|
||||||
|
this.h(html);
|
||||||
|
}
|
||||||
|
m(html, target, anchor = null) {
|
||||||
|
if (!this.e) {
|
||||||
|
if (this.is_svg)
|
||||||
|
this.e = svg_element(target.nodeName);
|
||||||
|
else
|
||||||
|
this.e = element(target.nodeName);
|
||||||
|
this.t = target;
|
||||||
|
this.c(html);
|
||||||
|
}
|
||||||
|
this.i(anchor);
|
||||||
|
}
|
||||||
|
h(html) {
|
||||||
|
this.e.innerHTML = html;
|
||||||
|
this.n = Array.from(this.e.childNodes);
|
||||||
|
}
|
||||||
|
i(anchor) {
|
||||||
|
for (let i = 0; i < this.n.length; i += 1) {
|
||||||
|
insert(this.t, this.n[i], anchor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p(html) {
|
||||||
|
this.d();
|
||||||
|
this.h(html);
|
||||||
|
this.i(this.a);
|
||||||
|
}
|
||||||
|
d() {
|
||||||
|
this.n.forEach(detach);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function attribute_to_object(attributes) {
|
||||||
|
const result = {};
|
||||||
|
for (const attribute of attributes) {
|
||||||
|
result[attribute.name] = attribute.value;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
let current_component;
|
||||||
|
function set_current_component(component) {
|
||||||
|
current_component = component;
|
||||||
|
}
|
||||||
|
function get_current_component() {
|
||||||
|
if (!current_component)
|
||||||
|
throw new Error('Function called outside component initialization');
|
||||||
|
return current_component;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.
|
||||||
|
* It must be called during the component's initialisation (but doesn't need to live *inside* the component;
|
||||||
|
* it can be called from an external module).
|
||||||
|
*
|
||||||
|
* `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).
|
||||||
|
*
|
||||||
|
* https://svelte.dev/docs#run-time-svelte-onmount
|
||||||
|
*/
|
||||||
|
function onMount(fn) {
|
||||||
|
get_current_component().$$.on_mount.push(fn);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Associates an arbitrary `context` object with the current component and the specified `key`
|
||||||
|
* and returns that object. The context is then available to children of the component
|
||||||
|
* (including slotted content) with `getContext`.
|
||||||
|
*
|
||||||
|
* Like lifecycle functions, this must be called during component initialisation.
|
||||||
|
*
|
||||||
|
* https://svelte.dev/docs#run-time-svelte-setcontext
|
||||||
|
*/
|
||||||
|
function setContext(key, context) {
|
||||||
|
get_current_component().$$.context.set(key, context);
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Retrieves the context that belongs to the closest parent component with the specified `key`.
|
||||||
|
* Must be called during component initialisation.
|
||||||
|
*
|
||||||
|
* https://svelte.dev/docs#run-time-svelte-getcontext
|
||||||
|
*/
|
||||||
|
function getContext(key) {
|
||||||
|
return get_current_component().$$.context.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
const dirty_components = [];
|
||||||
|
const binding_callbacks = [];
|
||||||
|
const render_callbacks = [];
|
||||||
|
const flush_callbacks = [];
|
||||||
|
const resolved_promise = Promise.resolve();
|
||||||
|
let update_scheduled = false;
|
||||||
|
function schedule_update() {
|
||||||
|
if (!update_scheduled) {
|
||||||
|
update_scheduled = true;
|
||||||
|
resolved_promise.then(flush);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function add_render_callback(fn) {
|
||||||
|
render_callbacks.push(fn);
|
||||||
|
}
|
||||||
|
// flush() calls callbacks in this order:
|
||||||
|
// 1. All beforeUpdate callbacks, in order: parents before children
|
||||||
|
// 2. All bind:this callbacks, in reverse order: children before parents.
|
||||||
|
// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT
|
||||||
|
// for afterUpdates called during the initial onMount, which are called in
|
||||||
|
// reverse order: children before parents.
|
||||||
|
// Since callbacks might update component values, which could trigger another
|
||||||
|
// call to flush(), the following steps guard against this:
|
||||||
|
// 1. During beforeUpdate, any updated components will be added to the
|
||||||
|
// dirty_components array and will cause a reentrant call to flush(). Because
|
||||||
|
// the flush index is kept outside the function, the reentrant call will pick
|
||||||
|
// up where the earlier call left off and go through all dirty components. The
|
||||||
|
// current_component value is saved and restored so that the reentrant call will
|
||||||
|
// not interfere with the "parent" flush() call.
|
||||||
|
// 2. bind:this callbacks cannot trigger new flush() calls.
|
||||||
|
// 3. During afterUpdate, any updated components will NOT have their afterUpdate
|
||||||
|
// callback called a second time; the seen_callbacks set, outside the flush()
|
||||||
|
// function, guarantees this behavior.
|
||||||
|
const seen_callbacks = new Set();
|
||||||
|
let flushidx = 0; // Do *not* move this inside the flush() function
|
||||||
|
function flush() {
|
||||||
|
const saved_component = current_component;
|
||||||
|
do {
|
||||||
|
// first, call beforeUpdate functions
|
||||||
|
// and update components
|
||||||
|
while (flushidx < dirty_components.length) {
|
||||||
|
const component = dirty_components[flushidx];
|
||||||
|
flushidx++;
|
||||||
|
set_current_component(component);
|
||||||
|
update(component.$$);
|
||||||
|
}
|
||||||
|
set_current_component(null);
|
||||||
|
dirty_components.length = 0;
|
||||||
|
flushidx = 0;
|
||||||
|
while (binding_callbacks.length)
|
||||||
|
binding_callbacks.pop()();
|
||||||
|
// then, once components are updated, call
|
||||||
|
// afterUpdate functions. This may cause
|
||||||
|
// subsequent updates...
|
||||||
|
for (let i = 0; i < render_callbacks.length; i += 1) {
|
||||||
|
const callback = render_callbacks[i];
|
||||||
|
if (!seen_callbacks.has(callback)) {
|
||||||
|
// ...so guard against infinite loops
|
||||||
|
seen_callbacks.add(callback);
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
render_callbacks.length = 0;
|
||||||
|
} while (dirty_components.length);
|
||||||
|
while (flush_callbacks.length) {
|
||||||
|
flush_callbacks.pop()();
|
||||||
|
}
|
||||||
|
update_scheduled = false;
|
||||||
|
seen_callbacks.clear();
|
||||||
|
set_current_component(saved_component);
|
||||||
|
}
|
||||||
|
function update($$) {
|
||||||
|
if ($$.fragment !== null) {
|
||||||
|
$$.update();
|
||||||
|
run_all($$.before_update);
|
||||||
|
const dirty = $$.dirty;
|
||||||
|
$$.dirty = [-1];
|
||||||
|
$$.fragment && $$.fragment.p($$.ctx, dirty);
|
||||||
|
$$.after_update.forEach(add_render_callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const outroing = new Set();
|
||||||
|
function transition_in(block, local) {
|
||||||
|
if (block && block.i) {
|
||||||
|
outroing.delete(block);
|
||||||
|
block.i(local);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const globals = (typeof window !== 'undefined'
|
||||||
|
? window
|
||||||
|
: typeof globalThis !== 'undefined'
|
||||||
|
? globalThis
|
||||||
|
: global);
|
||||||
|
function mount_component(component, target, anchor, customElement) {
|
||||||
|
const { fragment, after_update } = component.$$;
|
||||||
|
fragment && fragment.m(target, anchor);
|
||||||
|
if (!customElement) {
|
||||||
|
// onMount happens before the initial afterUpdate
|
||||||
|
add_render_callback(() => {
|
||||||
|
const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);
|
||||||
|
// if the component was destroyed immediately
|
||||||
|
// it will update the `$$.on_destroy` reference to `null`.
|
||||||
|
// the destructured on_destroy may still reference to the old array
|
||||||
|
if (component.$$.on_destroy) {
|
||||||
|
component.$$.on_destroy.push(...new_on_destroy);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Edge case - component was destroyed immediately,
|
||||||
|
// most likely as a result of a binding initialising
|
||||||
|
run_all(new_on_destroy);
|
||||||
|
}
|
||||||
|
component.$$.on_mount = [];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
after_update.forEach(add_render_callback);
|
||||||
|
}
|
||||||
|
function destroy_component(component, detaching) {
|
||||||
|
const $$ = component.$$;
|
||||||
|
if ($$.fragment !== null) {
|
||||||
|
run_all($$.on_destroy);
|
||||||
|
$$.fragment && $$.fragment.d(detaching);
|
||||||
|
// TODO null out other refs, including component.$$ (but need to
|
||||||
|
// preserve final state?)
|
||||||
|
$$.on_destroy = $$.fragment = null;
|
||||||
|
$$.ctx = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function make_dirty(component, i) {
|
||||||
|
if (component.$$.dirty[0] === -1) {
|
||||||
|
dirty_components.push(component);
|
||||||
|
schedule_update();
|
||||||
|
component.$$.dirty.fill(0);
|
||||||
|
}
|
||||||
|
component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));
|
||||||
|
}
|
||||||
|
function init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {
|
||||||
|
const parent_component = current_component;
|
||||||
|
set_current_component(component);
|
||||||
|
const $$ = component.$$ = {
|
||||||
|
fragment: null,
|
||||||
|
ctx: [],
|
||||||
|
// state
|
||||||
|
props,
|
||||||
|
update: noop,
|
||||||
|
not_equal,
|
||||||
|
bound: blank_object(),
|
||||||
|
// lifecycle
|
||||||
|
on_mount: [],
|
||||||
|
on_destroy: [],
|
||||||
|
on_disconnect: [],
|
||||||
|
before_update: [],
|
||||||
|
after_update: [],
|
||||||
|
context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
|
||||||
|
// everything else
|
||||||
|
callbacks: blank_object(),
|
||||||
|
dirty,
|
||||||
|
skip_bound: false,
|
||||||
|
root: options.target || parent_component.$$.root
|
||||||
|
};
|
||||||
|
append_styles && append_styles($$.root);
|
||||||
|
let ready = false;
|
||||||
|
$$.ctx = instance
|
||||||
|
? instance(component, options.props || {}, (i, ret, ...rest) => {
|
||||||
|
const value = rest.length ? rest[0] : ret;
|
||||||
|
if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
|
||||||
|
if (!$$.skip_bound && $$.bound[i])
|
||||||
|
$$.bound[i](value);
|
||||||
|
if (ready)
|
||||||
|
make_dirty(component, i);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
})
|
||||||
|
: [];
|
||||||
|
$$.update();
|
||||||
|
ready = true;
|
||||||
|
run_all($$.before_update);
|
||||||
|
// `false` as a special case of no DOM component
|
||||||
|
$$.fragment = create_fragment ? create_fragment($$.ctx) : false;
|
||||||
|
if (options.target) {
|
||||||
|
if (options.hydrate) {
|
||||||
|
const nodes = children(options.target);
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
$$.fragment && $$.fragment.l(nodes);
|
||||||
|
nodes.forEach(detach);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
$$.fragment && $$.fragment.c();
|
||||||
|
}
|
||||||
|
if (options.intro)
|
||||||
|
transition_in(component.$$.fragment);
|
||||||
|
mount_component(component, options.target, options.anchor, options.customElement);
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
set_current_component(parent_component);
|
||||||
|
}
|
||||||
|
let SvelteElement;
|
||||||
|
if (typeof HTMLElement === 'function') {
|
||||||
|
SvelteElement = class extends HTMLElement {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.attachShadow({ mode: 'open' });
|
||||||
|
}
|
||||||
|
connectedCallback() {
|
||||||
|
const { on_mount } = this.$$;
|
||||||
|
this.$$.on_disconnect = on_mount.map(run).filter(is_function);
|
||||||
|
// @ts-ignore todo: improve typings
|
||||||
|
for (const key in this.$$.slotted) {
|
||||||
|
// @ts-ignore todo: improve typings
|
||||||
|
this.appendChild(this.$$.slotted[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
attributeChangedCallback(attr, _oldValue, newValue) {
|
||||||
|
this[attr] = newValue;
|
||||||
|
}
|
||||||
|
disconnectedCallback() {
|
||||||
|
run_all(this.$$.on_disconnect);
|
||||||
|
}
|
||||||
|
$destroy() {
|
||||||
|
destroy_component(this, 1);
|
||||||
|
this.$destroy = noop;
|
||||||
|
}
|
||||||
|
$on(type, callback) {
|
||||||
|
// TODO should this delegate to addEventListener?
|
||||||
|
if (!is_function(callback)) {
|
||||||
|
return noop;
|
||||||
|
}
|
||||||
|
const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));
|
||||||
|
callbacks.push(callback);
|
||||||
|
return () => {
|
||||||
|
const index = callbacks.indexOf(callback);
|
||||||
|
if (index !== -1)
|
||||||
|
callbacks.splice(index, 1);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
$set($$props) {
|
||||||
|
if (this.$$set && !is_empty($$props)) {
|
||||||
|
this.$$.skip_bound = true;
|
||||||
|
this.$$set($$props);
|
||||||
|
this.$$.skip_bound = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function dispatch_dev(type, detail) {
|
||||||
|
document.dispatchEvent(custom_event(type, Object.assign({ version: '3.52.0' }, detail), { bubbles: true }));
|
||||||
|
}
|
||||||
|
function append_dev(target, node) {
|
||||||
|
dispatch_dev('SvelteDOMInsert', { target, node });
|
||||||
|
append(target, node);
|
||||||
|
}
|
||||||
|
function insert_dev(target, node, anchor) {
|
||||||
|
dispatch_dev('SvelteDOMInsert', { target, node, anchor });
|
||||||
|
insert(target, node, anchor);
|
||||||
|
}
|
||||||
|
function detach_dev(node) {
|
||||||
|
dispatch_dev('SvelteDOMRemove', { node });
|
||||||
|
detach(node);
|
||||||
|
}
|
||||||
|
function listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {
|
||||||
|
const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];
|
||||||
|
if (has_prevent_default)
|
||||||
|
modifiers.push('preventDefault');
|
||||||
|
if (has_stop_propagation)
|
||||||
|
modifiers.push('stopPropagation');
|
||||||
|
dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });
|
||||||
|
const dispose = listen(node, event, handler, options);
|
||||||
|
return () => {
|
||||||
|
dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });
|
||||||
|
dispose();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function attr_dev(node, attribute, value) {
|
||||||
|
attr(node, attribute, value);
|
||||||
|
if (value == null)
|
||||||
|
dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });
|
||||||
|
else
|
||||||
|
dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });
|
||||||
|
}
|
||||||
|
function prop_dev(node, property, value) {
|
||||||
|
node[property] = value;
|
||||||
|
dispatch_dev('SvelteDOMSetProperty', { node, property, value });
|
||||||
|
}
|
||||||
|
function set_data_dev(text, data) {
|
||||||
|
data = '' + data;
|
||||||
|
if (text.wholeText === data)
|
||||||
|
return;
|
||||||
|
dispatch_dev('SvelteDOMSetData', { node: text, data });
|
||||||
|
text.data = data;
|
||||||
|
}
|
||||||
|
function validate_each_argument(arg) {
|
||||||
|
if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {
|
||||||
|
let msg = '{#each} only iterates over array-like objects.';
|
||||||
|
if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {
|
||||||
|
msg += ' You can use a spread to convert this iterable into an array.';
|
||||||
|
}
|
||||||
|
throw new Error(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function validate_slots(name, slot, keys) {
|
||||||
|
for (const slot_key of Object.keys(slot)) {
|
||||||
|
if (!~keys.indexOf(slot_key)) {
|
||||||
|
console.warn(`<${name}> received an unexpected slot "${slot_key}".`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { validate_each_argument as A, text as B, set_data_dev as C, destroy_each as D, prop_dev as E, set_style as F, svg_element as G, is_function as H, HtmlTag as I, SvelteElement as S, attribute_to_object as a, insert_dev as b, setContext as c, dispatch_dev as d, globals as e, element as f, getContext as g, space as h, init as i, add_location as j, attr_dev as k, append_dev as l, listen_dev as m, noop as n, onMount as o, detach_dev as p, binding_callbacks as q, run_all as r, safe_not_equal as s, flush as t, src_url_equal as u, validate_slots as v, validate_store as w, component_subscribe as x, empty as y, set_custom_element_data as z };
|
|
@ -0,0 +1,521 @@
|
||||||
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
function noop() { }
|
||||||
|
function add_location(element, file, line, column, char) {
|
||||||
|
element.__svelte_meta = {
|
||||||
|
loc: { file, line, column, char }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function run(fn) {
|
||||||
|
return fn();
|
||||||
|
}
|
||||||
|
function blank_object() {
|
||||||
|
return Object.create(null);
|
||||||
|
}
|
||||||
|
function run_all(fns) {
|
||||||
|
fns.forEach(run);
|
||||||
|
}
|
||||||
|
function is_function(thing) {
|
||||||
|
return typeof thing === 'function';
|
||||||
|
}
|
||||||
|
function safe_not_equal(a, b) {
|
||||||
|
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
|
||||||
|
}
|
||||||
|
let src_url_equal_anchor;
|
||||||
|
function src_url_equal(element_src, url) {
|
||||||
|
if (!src_url_equal_anchor) {
|
||||||
|
src_url_equal_anchor = document.createElement('a');
|
||||||
|
}
|
||||||
|
src_url_equal_anchor.href = url;
|
||||||
|
return element_src === src_url_equal_anchor.href;
|
||||||
|
}
|
||||||
|
function is_empty(obj) {
|
||||||
|
return Object.keys(obj).length === 0;
|
||||||
|
}
|
||||||
|
function validate_store(store, name) {
|
||||||
|
if (store != null && typeof store.subscribe !== 'function') {
|
||||||
|
throw new Error(`'${name}' is not a store with a 'subscribe' method`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function subscribe(store, ...callbacks) {
|
||||||
|
if (store == null) {
|
||||||
|
return noop;
|
||||||
|
}
|
||||||
|
const unsub = store.subscribe(...callbacks);
|
||||||
|
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
|
||||||
|
}
|
||||||
|
function component_subscribe(component, store, callback) {
|
||||||
|
component.$$.on_destroy.push(subscribe(store, callback));
|
||||||
|
}
|
||||||
|
function append(target, node) {
|
||||||
|
target.appendChild(node);
|
||||||
|
}
|
||||||
|
function insert(target, node, anchor) {
|
||||||
|
target.insertBefore(node, anchor || null);
|
||||||
|
}
|
||||||
|
function detach(node) {
|
||||||
|
node.parentNode.removeChild(node);
|
||||||
|
}
|
||||||
|
function destroy_each(iterations, detaching) {
|
||||||
|
for (let i = 0; i < iterations.length; i += 1) {
|
||||||
|
if (iterations[i])
|
||||||
|
iterations[i].d(detaching);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function element(name) {
|
||||||
|
return document.createElement(name);
|
||||||
|
}
|
||||||
|
function svg_element(name) {
|
||||||
|
return document.createElementNS('http://www.w3.org/2000/svg', name);
|
||||||
|
}
|
||||||
|
function text(data) {
|
||||||
|
return document.createTextNode(data);
|
||||||
|
}
|
||||||
|
function space() {
|
||||||
|
return text(' ');
|
||||||
|
}
|
||||||
|
function empty() {
|
||||||
|
return text('');
|
||||||
|
}
|
||||||
|
function listen(node, event, handler, options) {
|
||||||
|
node.addEventListener(event, handler, options);
|
||||||
|
return () => node.removeEventListener(event, handler, options);
|
||||||
|
}
|
||||||
|
function attr(node, attribute, value) {
|
||||||
|
if (value == null)
|
||||||
|
node.removeAttribute(attribute);
|
||||||
|
else if (node.getAttribute(attribute) !== value)
|
||||||
|
node.setAttribute(attribute, value);
|
||||||
|
}
|
||||||
|
function set_custom_element_data(node, prop, value) {
|
||||||
|
if (prop in node) {
|
||||||
|
node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
attr(node, prop, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function children(element) {
|
||||||
|
return Array.from(element.childNodes);
|
||||||
|
}
|
||||||
|
function set_style(node, key, value, important) {
|
||||||
|
if (value === null) {
|
||||||
|
node.style.removeProperty(key);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
node.style.setProperty(key, value, important ? 'important' : '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {
|
||||||
|
const e = document.createEvent('CustomEvent');
|
||||||
|
e.initCustomEvent(type, bubbles, cancelable, detail);
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
class HtmlTag {
|
||||||
|
constructor(is_svg = false) {
|
||||||
|
this.is_svg = false;
|
||||||
|
this.is_svg = is_svg;
|
||||||
|
this.e = this.n = null;
|
||||||
|
}
|
||||||
|
c(html) {
|
||||||
|
this.h(html);
|
||||||
|
}
|
||||||
|
m(html, target, anchor = null) {
|
||||||
|
if (!this.e) {
|
||||||
|
if (this.is_svg)
|
||||||
|
this.e = svg_element(target.nodeName);
|
||||||
|
else
|
||||||
|
this.e = element(target.nodeName);
|
||||||
|
this.t = target;
|
||||||
|
this.c(html);
|
||||||
|
}
|
||||||
|
this.i(anchor);
|
||||||
|
}
|
||||||
|
h(html) {
|
||||||
|
this.e.innerHTML = html;
|
||||||
|
this.n = Array.from(this.e.childNodes);
|
||||||
|
}
|
||||||
|
i(anchor) {
|
||||||
|
for (let i = 0; i < this.n.length; i += 1) {
|
||||||
|
insert(this.t, this.n[i], anchor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p(html) {
|
||||||
|
this.d();
|
||||||
|
this.h(html);
|
||||||
|
this.i(this.a);
|
||||||
|
}
|
||||||
|
d() {
|
||||||
|
this.n.forEach(detach);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function attribute_to_object(attributes) {
|
||||||
|
const result = {};
|
||||||
|
for (const attribute of attributes) {
|
||||||
|
result[attribute.name] = attribute.value;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
let current_component;
|
||||||
|
function set_current_component(component) {
|
||||||
|
current_component = component;
|
||||||
|
}
|
||||||
|
function get_current_component() {
|
||||||
|
if (!current_component)
|
||||||
|
throw new Error('Function called outside component initialization');
|
||||||
|
return current_component;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.
|
||||||
|
* It must be called during the component's initialisation (but doesn't need to live *inside* the component;
|
||||||
|
* it can be called from an external module).
|
||||||
|
*
|
||||||
|
* `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).
|
||||||
|
*
|
||||||
|
* https://svelte.dev/docs#run-time-svelte-onmount
|
||||||
|
*/
|
||||||
|
function onMount(fn) {
|
||||||
|
get_current_component().$$.on_mount.push(fn);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Schedules a callback to run immediately after the component has been updated.
|
||||||
|
*
|
||||||
|
* The first time the callback runs will be after the initial `onMount`
|
||||||
|
*/
|
||||||
|
function afterUpdate(fn) {
|
||||||
|
get_current_component().$$.after_update.push(fn);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Associates an arbitrary `context` object with the current component and the specified `key`
|
||||||
|
* and returns that object. The context is then available to children of the component
|
||||||
|
* (including slotted content) with `getContext`.
|
||||||
|
*
|
||||||
|
* Like lifecycle functions, this must be called during component initialisation.
|
||||||
|
*
|
||||||
|
* https://svelte.dev/docs#run-time-svelte-setcontext
|
||||||
|
*/
|
||||||
|
function setContext(key, context) {
|
||||||
|
get_current_component().$$.context.set(key, context);
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Retrieves the context that belongs to the closest parent component with the specified `key`.
|
||||||
|
* Must be called during component initialisation.
|
||||||
|
*
|
||||||
|
* https://svelte.dev/docs#run-time-svelte-getcontext
|
||||||
|
*/
|
||||||
|
function getContext(key) {
|
||||||
|
return get_current_component().$$.context.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
const dirty_components = [];
|
||||||
|
const binding_callbacks = [];
|
||||||
|
const render_callbacks = [];
|
||||||
|
const flush_callbacks = [];
|
||||||
|
const resolved_promise = Promise.resolve();
|
||||||
|
let update_scheduled = false;
|
||||||
|
function schedule_update() {
|
||||||
|
if (!update_scheduled) {
|
||||||
|
update_scheduled = true;
|
||||||
|
resolved_promise.then(flush);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function add_render_callback(fn) {
|
||||||
|
render_callbacks.push(fn);
|
||||||
|
}
|
||||||
|
// flush() calls callbacks in this order:
|
||||||
|
// 1. All beforeUpdate callbacks, in order: parents before children
|
||||||
|
// 2. All bind:this callbacks, in reverse order: children before parents.
|
||||||
|
// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT
|
||||||
|
// for afterUpdates called during the initial onMount, which are called in
|
||||||
|
// reverse order: children before parents.
|
||||||
|
// Since callbacks might update component values, which could trigger another
|
||||||
|
// call to flush(), the following steps guard against this:
|
||||||
|
// 1. During beforeUpdate, any updated components will be added to the
|
||||||
|
// dirty_components array and will cause a reentrant call to flush(). Because
|
||||||
|
// the flush index is kept outside the function, the reentrant call will pick
|
||||||
|
// up where the earlier call left off and go through all dirty components. The
|
||||||
|
// current_component value is saved and restored so that the reentrant call will
|
||||||
|
// not interfere with the "parent" flush() call.
|
||||||
|
// 2. bind:this callbacks cannot trigger new flush() calls.
|
||||||
|
// 3. During afterUpdate, any updated components will NOT have their afterUpdate
|
||||||
|
// callback called a second time; the seen_callbacks set, outside the flush()
|
||||||
|
// function, guarantees this behavior.
|
||||||
|
const seen_callbacks = new Set();
|
||||||
|
let flushidx = 0; // Do *not* move this inside the flush() function
|
||||||
|
function flush() {
|
||||||
|
const saved_component = current_component;
|
||||||
|
do {
|
||||||
|
// first, call beforeUpdate functions
|
||||||
|
// and update components
|
||||||
|
while (flushidx < dirty_components.length) {
|
||||||
|
const component = dirty_components[flushidx];
|
||||||
|
flushidx++;
|
||||||
|
set_current_component(component);
|
||||||
|
update(component.$$);
|
||||||
|
}
|
||||||
|
set_current_component(null);
|
||||||
|
dirty_components.length = 0;
|
||||||
|
flushidx = 0;
|
||||||
|
while (binding_callbacks.length)
|
||||||
|
binding_callbacks.pop()();
|
||||||
|
// then, once components are updated, call
|
||||||
|
// afterUpdate functions. This may cause
|
||||||
|
// subsequent updates...
|
||||||
|
for (let i = 0; i < render_callbacks.length; i += 1) {
|
||||||
|
const callback = render_callbacks[i];
|
||||||
|
if (!seen_callbacks.has(callback)) {
|
||||||
|
// ...so guard against infinite loops
|
||||||
|
seen_callbacks.add(callback);
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
render_callbacks.length = 0;
|
||||||
|
} while (dirty_components.length);
|
||||||
|
while (flush_callbacks.length) {
|
||||||
|
flush_callbacks.pop()();
|
||||||
|
}
|
||||||
|
update_scheduled = false;
|
||||||
|
seen_callbacks.clear();
|
||||||
|
set_current_component(saved_component);
|
||||||
|
}
|
||||||
|
function update($$) {
|
||||||
|
if ($$.fragment !== null) {
|
||||||
|
$$.update();
|
||||||
|
run_all($$.before_update);
|
||||||
|
const dirty = $$.dirty;
|
||||||
|
$$.dirty = [-1];
|
||||||
|
$$.fragment && $$.fragment.p($$.ctx, dirty);
|
||||||
|
$$.after_update.forEach(add_render_callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const outroing = new Set();
|
||||||
|
function transition_in(block, local) {
|
||||||
|
if (block && block.i) {
|
||||||
|
outroing.delete(block);
|
||||||
|
block.i(local);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const globals = (typeof window !== 'undefined'
|
||||||
|
? window
|
||||||
|
: typeof globalThis !== 'undefined'
|
||||||
|
? globalThis
|
||||||
|
: global);
|
||||||
|
function mount_component(component, target, anchor, customElement) {
|
||||||
|
const { fragment, after_update } = component.$$;
|
||||||
|
fragment && fragment.m(target, anchor);
|
||||||
|
if (!customElement) {
|
||||||
|
// onMount happens before the initial afterUpdate
|
||||||
|
add_render_callback(() => {
|
||||||
|
const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);
|
||||||
|
// if the component was destroyed immediately
|
||||||
|
// it will update the `$$.on_destroy` reference to `null`.
|
||||||
|
// the destructured on_destroy may still reference to the old array
|
||||||
|
if (component.$$.on_destroy) {
|
||||||
|
component.$$.on_destroy.push(...new_on_destroy);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Edge case - component was destroyed immediately,
|
||||||
|
// most likely as a result of a binding initialising
|
||||||
|
run_all(new_on_destroy);
|
||||||
|
}
|
||||||
|
component.$$.on_mount = [];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
after_update.forEach(add_render_callback);
|
||||||
|
}
|
||||||
|
function destroy_component(component, detaching) {
|
||||||
|
const $$ = component.$$;
|
||||||
|
if ($$.fragment !== null) {
|
||||||
|
run_all($$.on_destroy);
|
||||||
|
$$.fragment && $$.fragment.d(detaching);
|
||||||
|
// TODO null out other refs, including component.$$ (but need to
|
||||||
|
// preserve final state?)
|
||||||
|
$$.on_destroy = $$.fragment = null;
|
||||||
|
$$.ctx = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function make_dirty(component, i) {
|
||||||
|
if (component.$$.dirty[0] === -1) {
|
||||||
|
dirty_components.push(component);
|
||||||
|
schedule_update();
|
||||||
|
component.$$.dirty.fill(0);
|
||||||
|
}
|
||||||
|
component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));
|
||||||
|
}
|
||||||
|
function init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {
|
||||||
|
const parent_component = current_component;
|
||||||
|
set_current_component(component);
|
||||||
|
const $$ = component.$$ = {
|
||||||
|
fragment: null,
|
||||||
|
ctx: [],
|
||||||
|
// state
|
||||||
|
props,
|
||||||
|
update: noop,
|
||||||
|
not_equal,
|
||||||
|
bound: blank_object(),
|
||||||
|
// lifecycle
|
||||||
|
on_mount: [],
|
||||||
|
on_destroy: [],
|
||||||
|
on_disconnect: [],
|
||||||
|
before_update: [],
|
||||||
|
after_update: [],
|
||||||
|
context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
|
||||||
|
// everything else
|
||||||
|
callbacks: blank_object(),
|
||||||
|
dirty,
|
||||||
|
skip_bound: false,
|
||||||
|
root: options.target || parent_component.$$.root
|
||||||
|
};
|
||||||
|
append_styles && append_styles($$.root);
|
||||||
|
let ready = false;
|
||||||
|
$$.ctx = instance
|
||||||
|
? instance(component, options.props || {}, (i, ret, ...rest) => {
|
||||||
|
const value = rest.length ? rest[0] : ret;
|
||||||
|
if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
|
||||||
|
if (!$$.skip_bound && $$.bound[i])
|
||||||
|
$$.bound[i](value);
|
||||||
|
if (ready)
|
||||||
|
make_dirty(component, i);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
})
|
||||||
|
: [];
|
||||||
|
$$.update();
|
||||||
|
ready = true;
|
||||||
|
run_all($$.before_update);
|
||||||
|
// `false` as a special case of no DOM component
|
||||||
|
$$.fragment = create_fragment ? create_fragment($$.ctx) : false;
|
||||||
|
if (options.target) {
|
||||||
|
if (options.hydrate) {
|
||||||
|
const nodes = children(options.target);
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
$$.fragment && $$.fragment.l(nodes);
|
||||||
|
nodes.forEach(detach);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
$$.fragment && $$.fragment.c();
|
||||||
|
}
|
||||||
|
if (options.intro)
|
||||||
|
transition_in(component.$$.fragment);
|
||||||
|
mount_component(component, options.target, options.anchor, options.customElement);
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
set_current_component(parent_component);
|
||||||
|
}
|
||||||
|
let SvelteElement;
|
||||||
|
if (typeof HTMLElement === 'function') {
|
||||||
|
SvelteElement = class extends HTMLElement {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.attachShadow({ mode: 'open' });
|
||||||
|
}
|
||||||
|
connectedCallback() {
|
||||||
|
const { on_mount } = this.$$;
|
||||||
|
this.$$.on_disconnect = on_mount.map(run).filter(is_function);
|
||||||
|
// @ts-ignore todo: improve typings
|
||||||
|
for (const key in this.$$.slotted) {
|
||||||
|
// @ts-ignore todo: improve typings
|
||||||
|
this.appendChild(this.$$.slotted[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
attributeChangedCallback(attr, _oldValue, newValue) {
|
||||||
|
this[attr] = newValue;
|
||||||
|
}
|
||||||
|
disconnectedCallback() {
|
||||||
|
run_all(this.$$.on_disconnect);
|
||||||
|
}
|
||||||
|
$destroy() {
|
||||||
|
destroy_component(this, 1);
|
||||||
|
this.$destroy = noop;
|
||||||
|
}
|
||||||
|
$on(type, callback) {
|
||||||
|
// TODO should this delegate to addEventListener?
|
||||||
|
if (!is_function(callback)) {
|
||||||
|
return noop;
|
||||||
|
}
|
||||||
|
const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));
|
||||||
|
callbacks.push(callback);
|
||||||
|
return () => {
|
||||||
|
const index = callbacks.indexOf(callback);
|
||||||
|
if (index !== -1)
|
||||||
|
callbacks.splice(index, 1);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
$set($$props) {
|
||||||
|
if (this.$$set && !is_empty($$props)) {
|
||||||
|
this.$$.skip_bound = true;
|
||||||
|
this.$$set($$props);
|
||||||
|
this.$$.skip_bound = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function dispatch_dev(type, detail) {
|
||||||
|
document.dispatchEvent(custom_event(type, Object.assign({ version: '3.52.0' }, detail), { bubbles: true }));
|
||||||
|
}
|
||||||
|
function append_dev(target, node) {
|
||||||
|
dispatch_dev('SvelteDOMInsert', { target, node });
|
||||||
|
append(target, node);
|
||||||
|
}
|
||||||
|
function insert_dev(target, node, anchor) {
|
||||||
|
dispatch_dev('SvelteDOMInsert', { target, node, anchor });
|
||||||
|
insert(target, node, anchor);
|
||||||
|
}
|
||||||
|
function detach_dev(node) {
|
||||||
|
dispatch_dev('SvelteDOMRemove', { node });
|
||||||
|
detach(node);
|
||||||
|
}
|
||||||
|
function listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {
|
||||||
|
const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];
|
||||||
|
if (has_prevent_default)
|
||||||
|
modifiers.push('preventDefault');
|
||||||
|
if (has_stop_propagation)
|
||||||
|
modifiers.push('stopPropagation');
|
||||||
|
dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });
|
||||||
|
const dispose = listen(node, event, handler, options);
|
||||||
|
return () => {
|
||||||
|
dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });
|
||||||
|
dispose();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function attr_dev(node, attribute, value) {
|
||||||
|
attr(node, attribute, value);
|
||||||
|
if (value == null)
|
||||||
|
dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });
|
||||||
|
else
|
||||||
|
dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });
|
||||||
|
}
|
||||||
|
function prop_dev(node, property, value) {
|
||||||
|
node[property] = value;
|
||||||
|
dispatch_dev('SvelteDOMSetProperty', { node, property, value });
|
||||||
|
}
|
||||||
|
function set_data_dev(text, data) {
|
||||||
|
data = '' + data;
|
||||||
|
if (text.wholeText === data)
|
||||||
|
return;
|
||||||
|
dispatch_dev('SvelteDOMSetData', { node: text, data });
|
||||||
|
text.data = data;
|
||||||
|
}
|
||||||
|
function validate_each_argument(arg) {
|
||||||
|
if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {
|
||||||
|
let msg = '{#each} only iterates over array-like objects.';
|
||||||
|
if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {
|
||||||
|
msg += ' You can use a spread to convert this iterable into an array.';
|
||||||
|
}
|
||||||
|
throw new Error(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function validate_slots(name, slot, keys) {
|
||||||
|
for (const slot_key of Object.keys(slot)) {
|
||||||
|
if (!~keys.indexOf(slot_key)) {
|
||||||
|
console.warn(`<${name}> received an unexpected slot "${slot_key}".`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { validate_each_argument as A, text as B, set_data_dev as C, destroy_each as D, prop_dev as E, set_style as F, svg_element as G, is_function as H, HtmlTag as I, afterUpdate as J, SvelteElement as S, attribute_to_object as a, insert_dev as b, setContext as c, dispatch_dev as d, globals as e, element as f, getContext as g, space as h, init as i, add_location as j, attr_dev as k, append_dev as l, listen_dev as m, noop as n, onMount as o, detach_dev as p, binding_callbacks as q, run_all as r, safe_not_equal as s, flush as t, src_url_equal as u, validate_slots as v, validate_store as w, component_subscribe as x, empty as y, set_custom_element_data as z };
|
|
@ -0,0 +1,524 @@
|
||||||
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
function noop() { }
|
||||||
|
function add_location(element, file, line, column, char) {
|
||||||
|
element.__svelte_meta = {
|
||||||
|
loc: { file, line, column, char }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function run(fn) {
|
||||||
|
return fn();
|
||||||
|
}
|
||||||
|
function blank_object() {
|
||||||
|
return Object.create(null);
|
||||||
|
}
|
||||||
|
function run_all(fns) {
|
||||||
|
fns.forEach(run);
|
||||||
|
}
|
||||||
|
function is_function(thing) {
|
||||||
|
return typeof thing === 'function';
|
||||||
|
}
|
||||||
|
function safe_not_equal(a, b) {
|
||||||
|
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
|
||||||
|
}
|
||||||
|
let src_url_equal_anchor;
|
||||||
|
function src_url_equal(element_src, url) {
|
||||||
|
if (!src_url_equal_anchor) {
|
||||||
|
src_url_equal_anchor = document.createElement('a');
|
||||||
|
}
|
||||||
|
src_url_equal_anchor.href = url;
|
||||||
|
return element_src === src_url_equal_anchor.href;
|
||||||
|
}
|
||||||
|
function is_empty(obj) {
|
||||||
|
return Object.keys(obj).length === 0;
|
||||||
|
}
|
||||||
|
function validate_store(store, name) {
|
||||||
|
if (store != null && typeof store.subscribe !== 'function') {
|
||||||
|
throw new Error(`'${name}' is not a store with a 'subscribe' method`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function subscribe(store, ...callbacks) {
|
||||||
|
if (store == null) {
|
||||||
|
return noop;
|
||||||
|
}
|
||||||
|
const unsub = store.subscribe(...callbacks);
|
||||||
|
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
|
||||||
|
}
|
||||||
|
function component_subscribe(component, store, callback) {
|
||||||
|
component.$$.on_destroy.push(subscribe(store, callback));
|
||||||
|
}
|
||||||
|
function append(target, node) {
|
||||||
|
target.appendChild(node);
|
||||||
|
}
|
||||||
|
function insert(target, node, anchor) {
|
||||||
|
target.insertBefore(node, anchor || null);
|
||||||
|
}
|
||||||
|
function detach(node) {
|
||||||
|
node.parentNode.removeChild(node);
|
||||||
|
}
|
||||||
|
function destroy_each(iterations, detaching) {
|
||||||
|
for (let i = 0; i < iterations.length; i += 1) {
|
||||||
|
if (iterations[i])
|
||||||
|
iterations[i].d(detaching);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function element(name) {
|
||||||
|
return document.createElement(name);
|
||||||
|
}
|
||||||
|
function svg_element(name) {
|
||||||
|
return document.createElementNS('http://www.w3.org/2000/svg', name);
|
||||||
|
}
|
||||||
|
function text(data) {
|
||||||
|
return document.createTextNode(data);
|
||||||
|
}
|
||||||
|
function space() {
|
||||||
|
return text(' ');
|
||||||
|
}
|
||||||
|
function empty() {
|
||||||
|
return text('');
|
||||||
|
}
|
||||||
|
function listen(node, event, handler, options) {
|
||||||
|
node.addEventListener(event, handler, options);
|
||||||
|
return () => node.removeEventListener(event, handler, options);
|
||||||
|
}
|
||||||
|
function attr(node, attribute, value) {
|
||||||
|
if (value == null)
|
||||||
|
node.removeAttribute(attribute);
|
||||||
|
else if (node.getAttribute(attribute) !== value)
|
||||||
|
node.setAttribute(attribute, value);
|
||||||
|
}
|
||||||
|
function set_custom_element_data(node, prop, value) {
|
||||||
|
if (prop in node) {
|
||||||
|
node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
attr(node, prop, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function children(element) {
|
||||||
|
return Array.from(element.childNodes);
|
||||||
|
}
|
||||||
|
function set_input_value(input, value) {
|
||||||
|
input.value = value == null ? '' : value;
|
||||||
|
}
|
||||||
|
function set_style(node, key, value, important) {
|
||||||
|
if (value === null) {
|
||||||
|
node.style.removeProperty(key);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
node.style.setProperty(key, value, important ? 'important' : '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {
|
||||||
|
const e = document.createEvent('CustomEvent');
|
||||||
|
e.initCustomEvent(type, bubbles, cancelable, detail);
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
class HtmlTag {
|
||||||
|
constructor(is_svg = false) {
|
||||||
|
this.is_svg = false;
|
||||||
|
this.is_svg = is_svg;
|
||||||
|
this.e = this.n = null;
|
||||||
|
}
|
||||||
|
c(html) {
|
||||||
|
this.h(html);
|
||||||
|
}
|
||||||
|
m(html, target, anchor = null) {
|
||||||
|
if (!this.e) {
|
||||||
|
if (this.is_svg)
|
||||||
|
this.e = svg_element(target.nodeName);
|
||||||
|
else
|
||||||
|
this.e = element(target.nodeName);
|
||||||
|
this.t = target;
|
||||||
|
this.c(html);
|
||||||
|
}
|
||||||
|
this.i(anchor);
|
||||||
|
}
|
||||||
|
h(html) {
|
||||||
|
this.e.innerHTML = html;
|
||||||
|
this.n = Array.from(this.e.childNodes);
|
||||||
|
}
|
||||||
|
i(anchor) {
|
||||||
|
for (let i = 0; i < this.n.length; i += 1) {
|
||||||
|
insert(this.t, this.n[i], anchor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p(html) {
|
||||||
|
this.d();
|
||||||
|
this.h(html);
|
||||||
|
this.i(this.a);
|
||||||
|
}
|
||||||
|
d() {
|
||||||
|
this.n.forEach(detach);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function attribute_to_object(attributes) {
|
||||||
|
const result = {};
|
||||||
|
for (const attribute of attributes) {
|
||||||
|
result[attribute.name] = attribute.value;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
let current_component;
|
||||||
|
function set_current_component(component) {
|
||||||
|
current_component = component;
|
||||||
|
}
|
||||||
|
function get_current_component() {
|
||||||
|
if (!current_component)
|
||||||
|
throw new Error('Function called outside component initialization');
|
||||||
|
return current_component;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.
|
||||||
|
* It must be called during the component's initialisation (but doesn't need to live *inside* the component;
|
||||||
|
* it can be called from an external module).
|
||||||
|
*
|
||||||
|
* `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).
|
||||||
|
*
|
||||||
|
* https://svelte.dev/docs#run-time-svelte-onmount
|
||||||
|
*/
|
||||||
|
function onMount(fn) {
|
||||||
|
get_current_component().$$.on_mount.push(fn);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Schedules a callback to run immediately after the component has been updated.
|
||||||
|
*
|
||||||
|
* The first time the callback runs will be after the initial `onMount`
|
||||||
|
*/
|
||||||
|
function afterUpdate(fn) {
|
||||||
|
get_current_component().$$.after_update.push(fn);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Associates an arbitrary `context` object with the current component and the specified `key`
|
||||||
|
* and returns that object. The context is then available to children of the component
|
||||||
|
* (including slotted content) with `getContext`.
|
||||||
|
*
|
||||||
|
* Like lifecycle functions, this must be called during component initialisation.
|
||||||
|
*
|
||||||
|
* https://svelte.dev/docs#run-time-svelte-setcontext
|
||||||
|
*/
|
||||||
|
function setContext(key, context) {
|
||||||
|
get_current_component().$$.context.set(key, context);
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Retrieves the context that belongs to the closest parent component with the specified `key`.
|
||||||
|
* Must be called during component initialisation.
|
||||||
|
*
|
||||||
|
* https://svelte.dev/docs#run-time-svelte-getcontext
|
||||||
|
*/
|
||||||
|
function getContext(key) {
|
||||||
|
return get_current_component().$$.context.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
const dirty_components = [];
|
||||||
|
const binding_callbacks = [];
|
||||||
|
const render_callbacks = [];
|
||||||
|
const flush_callbacks = [];
|
||||||
|
const resolved_promise = Promise.resolve();
|
||||||
|
let update_scheduled = false;
|
||||||
|
function schedule_update() {
|
||||||
|
if (!update_scheduled) {
|
||||||
|
update_scheduled = true;
|
||||||
|
resolved_promise.then(flush);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function add_render_callback(fn) {
|
||||||
|
render_callbacks.push(fn);
|
||||||
|
}
|
||||||
|
// flush() calls callbacks in this order:
|
||||||
|
// 1. All beforeUpdate callbacks, in order: parents before children
|
||||||
|
// 2. All bind:this callbacks, in reverse order: children before parents.
|
||||||
|
// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT
|
||||||
|
// for afterUpdates called during the initial onMount, which are called in
|
||||||
|
// reverse order: children before parents.
|
||||||
|
// Since callbacks might update component values, which could trigger another
|
||||||
|
// call to flush(), the following steps guard against this:
|
||||||
|
// 1. During beforeUpdate, any updated components will be added to the
|
||||||
|
// dirty_components array and will cause a reentrant call to flush(). Because
|
||||||
|
// the flush index is kept outside the function, the reentrant call will pick
|
||||||
|
// up where the earlier call left off and go through all dirty components. The
|
||||||
|
// current_component value is saved and restored so that the reentrant call will
|
||||||
|
// not interfere with the "parent" flush() call.
|
||||||
|
// 2. bind:this callbacks cannot trigger new flush() calls.
|
||||||
|
// 3. During afterUpdate, any updated components will NOT have their afterUpdate
|
||||||
|
// callback called a second time; the seen_callbacks set, outside the flush()
|
||||||
|
// function, guarantees this behavior.
|
||||||
|
const seen_callbacks = new Set();
|
||||||
|
let flushidx = 0; // Do *not* move this inside the flush() function
|
||||||
|
function flush() {
|
||||||
|
const saved_component = current_component;
|
||||||
|
do {
|
||||||
|
// first, call beforeUpdate functions
|
||||||
|
// and update components
|
||||||
|
while (flushidx < dirty_components.length) {
|
||||||
|
const component = dirty_components[flushidx];
|
||||||
|
flushidx++;
|
||||||
|
set_current_component(component);
|
||||||
|
update(component.$$);
|
||||||
|
}
|
||||||
|
set_current_component(null);
|
||||||
|
dirty_components.length = 0;
|
||||||
|
flushidx = 0;
|
||||||
|
while (binding_callbacks.length)
|
||||||
|
binding_callbacks.pop()();
|
||||||
|
// then, once components are updated, call
|
||||||
|
// afterUpdate functions. This may cause
|
||||||
|
// subsequent updates...
|
||||||
|
for (let i = 0; i < render_callbacks.length; i += 1) {
|
||||||
|
const callback = render_callbacks[i];
|
||||||
|
if (!seen_callbacks.has(callback)) {
|
||||||
|
// ...so guard against infinite loops
|
||||||
|
seen_callbacks.add(callback);
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
render_callbacks.length = 0;
|
||||||
|
} while (dirty_components.length);
|
||||||
|
while (flush_callbacks.length) {
|
||||||
|
flush_callbacks.pop()();
|
||||||
|
}
|
||||||
|
update_scheduled = false;
|
||||||
|
seen_callbacks.clear();
|
||||||
|
set_current_component(saved_component);
|
||||||
|
}
|
||||||
|
function update($$) {
|
||||||
|
if ($$.fragment !== null) {
|
||||||
|
$$.update();
|
||||||
|
run_all($$.before_update);
|
||||||
|
const dirty = $$.dirty;
|
||||||
|
$$.dirty = [-1];
|
||||||
|
$$.fragment && $$.fragment.p($$.ctx, dirty);
|
||||||
|
$$.after_update.forEach(add_render_callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const outroing = new Set();
|
||||||
|
function transition_in(block, local) {
|
||||||
|
if (block && block.i) {
|
||||||
|
outroing.delete(block);
|
||||||
|
block.i(local);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const globals = (typeof window !== 'undefined'
|
||||||
|
? window
|
||||||
|
: typeof globalThis !== 'undefined'
|
||||||
|
? globalThis
|
||||||
|
: global);
|
||||||
|
function mount_component(component, target, anchor, customElement) {
|
||||||
|
const { fragment, after_update } = component.$$;
|
||||||
|
fragment && fragment.m(target, anchor);
|
||||||
|
if (!customElement) {
|
||||||
|
// onMount happens before the initial afterUpdate
|
||||||
|
add_render_callback(() => {
|
||||||
|
const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);
|
||||||
|
// if the component was destroyed immediately
|
||||||
|
// it will update the `$$.on_destroy` reference to `null`.
|
||||||
|
// the destructured on_destroy may still reference to the old array
|
||||||
|
if (component.$$.on_destroy) {
|
||||||
|
component.$$.on_destroy.push(...new_on_destroy);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Edge case - component was destroyed immediately,
|
||||||
|
// most likely as a result of a binding initialising
|
||||||
|
run_all(new_on_destroy);
|
||||||
|
}
|
||||||
|
component.$$.on_mount = [];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
after_update.forEach(add_render_callback);
|
||||||
|
}
|
||||||
|
function destroy_component(component, detaching) {
|
||||||
|
const $$ = component.$$;
|
||||||
|
if ($$.fragment !== null) {
|
||||||
|
run_all($$.on_destroy);
|
||||||
|
$$.fragment && $$.fragment.d(detaching);
|
||||||
|
// TODO null out other refs, including component.$$ (but need to
|
||||||
|
// preserve final state?)
|
||||||
|
$$.on_destroy = $$.fragment = null;
|
||||||
|
$$.ctx = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function make_dirty(component, i) {
|
||||||
|
if (component.$$.dirty[0] === -1) {
|
||||||
|
dirty_components.push(component);
|
||||||
|
schedule_update();
|
||||||
|
component.$$.dirty.fill(0);
|
||||||
|
}
|
||||||
|
component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));
|
||||||
|
}
|
||||||
|
function init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {
|
||||||
|
const parent_component = current_component;
|
||||||
|
set_current_component(component);
|
||||||
|
const $$ = component.$$ = {
|
||||||
|
fragment: null,
|
||||||
|
ctx: [],
|
||||||
|
// state
|
||||||
|
props,
|
||||||
|
update: noop,
|
||||||
|
not_equal,
|
||||||
|
bound: blank_object(),
|
||||||
|
// lifecycle
|
||||||
|
on_mount: [],
|
||||||
|
on_destroy: [],
|
||||||
|
on_disconnect: [],
|
||||||
|
before_update: [],
|
||||||
|
after_update: [],
|
||||||
|
context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
|
||||||
|
// everything else
|
||||||
|
callbacks: blank_object(),
|
||||||
|
dirty,
|
||||||
|
skip_bound: false,
|
||||||
|
root: options.target || parent_component.$$.root
|
||||||
|
};
|
||||||
|
append_styles && append_styles($$.root);
|
||||||
|
let ready = false;
|
||||||
|
$$.ctx = instance
|
||||||
|
? instance(component, options.props || {}, (i, ret, ...rest) => {
|
||||||
|
const value = rest.length ? rest[0] : ret;
|
||||||
|
if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
|
||||||
|
if (!$$.skip_bound && $$.bound[i])
|
||||||
|
$$.bound[i](value);
|
||||||
|
if (ready)
|
||||||
|
make_dirty(component, i);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
})
|
||||||
|
: [];
|
||||||
|
$$.update();
|
||||||
|
ready = true;
|
||||||
|
run_all($$.before_update);
|
||||||
|
// `false` as a special case of no DOM component
|
||||||
|
$$.fragment = create_fragment ? create_fragment($$.ctx) : false;
|
||||||
|
if (options.target) {
|
||||||
|
if (options.hydrate) {
|
||||||
|
const nodes = children(options.target);
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
$$.fragment && $$.fragment.l(nodes);
|
||||||
|
nodes.forEach(detach);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
$$.fragment && $$.fragment.c();
|
||||||
|
}
|
||||||
|
if (options.intro)
|
||||||
|
transition_in(component.$$.fragment);
|
||||||
|
mount_component(component, options.target, options.anchor, options.customElement);
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
set_current_component(parent_component);
|
||||||
|
}
|
||||||
|
let SvelteElement;
|
||||||
|
if (typeof HTMLElement === 'function') {
|
||||||
|
SvelteElement = class extends HTMLElement {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.attachShadow({ mode: 'open' });
|
||||||
|
}
|
||||||
|
connectedCallback() {
|
||||||
|
const { on_mount } = this.$$;
|
||||||
|
this.$$.on_disconnect = on_mount.map(run).filter(is_function);
|
||||||
|
// @ts-ignore todo: improve typings
|
||||||
|
for (const key in this.$$.slotted) {
|
||||||
|
// @ts-ignore todo: improve typings
|
||||||
|
this.appendChild(this.$$.slotted[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
attributeChangedCallback(attr, _oldValue, newValue) {
|
||||||
|
this[attr] = newValue;
|
||||||
|
}
|
||||||
|
disconnectedCallback() {
|
||||||
|
run_all(this.$$.on_disconnect);
|
||||||
|
}
|
||||||
|
$destroy() {
|
||||||
|
destroy_component(this, 1);
|
||||||
|
this.$destroy = noop;
|
||||||
|
}
|
||||||
|
$on(type, callback) {
|
||||||
|
// TODO should this delegate to addEventListener?
|
||||||
|
if (!is_function(callback)) {
|
||||||
|
return noop;
|
||||||
|
}
|
||||||
|
const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));
|
||||||
|
callbacks.push(callback);
|
||||||
|
return () => {
|
||||||
|
const index = callbacks.indexOf(callback);
|
||||||
|
if (index !== -1)
|
||||||
|
callbacks.splice(index, 1);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
$set($$props) {
|
||||||
|
if (this.$$set && !is_empty($$props)) {
|
||||||
|
this.$$.skip_bound = true;
|
||||||
|
this.$$set($$props);
|
||||||
|
this.$$.skip_bound = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function dispatch_dev(type, detail) {
|
||||||
|
document.dispatchEvent(custom_event(type, Object.assign({ version: '3.52.0' }, detail), { bubbles: true }));
|
||||||
|
}
|
||||||
|
function append_dev(target, node) {
|
||||||
|
dispatch_dev('SvelteDOMInsert', { target, node });
|
||||||
|
append(target, node);
|
||||||
|
}
|
||||||
|
function insert_dev(target, node, anchor) {
|
||||||
|
dispatch_dev('SvelteDOMInsert', { target, node, anchor });
|
||||||
|
insert(target, node, anchor);
|
||||||
|
}
|
||||||
|
function detach_dev(node) {
|
||||||
|
dispatch_dev('SvelteDOMRemove', { node });
|
||||||
|
detach(node);
|
||||||
|
}
|
||||||
|
function listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {
|
||||||
|
const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];
|
||||||
|
if (has_prevent_default)
|
||||||
|
modifiers.push('preventDefault');
|
||||||
|
if (has_stop_propagation)
|
||||||
|
modifiers.push('stopPropagation');
|
||||||
|
dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });
|
||||||
|
const dispose = listen(node, event, handler, options);
|
||||||
|
return () => {
|
||||||
|
dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });
|
||||||
|
dispose();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function attr_dev(node, attribute, value) {
|
||||||
|
attr(node, attribute, value);
|
||||||
|
if (value == null)
|
||||||
|
dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });
|
||||||
|
else
|
||||||
|
dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });
|
||||||
|
}
|
||||||
|
function prop_dev(node, property, value) {
|
||||||
|
node[property] = value;
|
||||||
|
dispatch_dev('SvelteDOMSetProperty', { node, property, value });
|
||||||
|
}
|
||||||
|
function set_data_dev(text, data) {
|
||||||
|
data = '' + data;
|
||||||
|
if (text.wholeText === data)
|
||||||
|
return;
|
||||||
|
dispatch_dev('SvelteDOMSetData', { node: text, data });
|
||||||
|
text.data = data;
|
||||||
|
}
|
||||||
|
function validate_each_argument(arg) {
|
||||||
|
if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {
|
||||||
|
let msg = '{#each} only iterates over array-like objects.';
|
||||||
|
if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {
|
||||||
|
msg += ' You can use a spread to convert this iterable into an array.';
|
||||||
|
}
|
||||||
|
throw new Error(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function validate_slots(name, slot, keys) {
|
||||||
|
for (const slot_key of Object.keys(slot)) {
|
||||||
|
if (!~keys.indexOf(slot_key)) {
|
||||||
|
console.warn(`<${name}> received an unexpected slot "${slot_key}".`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { validate_each_argument as A, text as B, set_data_dev as C, destroy_each as D, prop_dev as E, set_style as F, svg_element as G, is_function as H, HtmlTag as I, afterUpdate as J, set_input_value as K, SvelteElement as S, attribute_to_object as a, insert_dev as b, setContext as c, dispatch_dev as d, globals as e, element as f, getContext as g, space as h, init as i, add_location as j, attr_dev as k, append_dev as l, listen_dev as m, noop as n, onMount as o, detach_dev as p, binding_callbacks as q, run_all as r, safe_not_equal as s, flush as t, src_url_equal as u, validate_slots as v, validate_store as w, component_subscribe as x, empty as y, set_custom_element_data as z };
|
|
@ -0,0 +1,53 @@
|
||||||
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
import { n as noop, s as safe_not_equal } from './index-6b4fe380.js';
|
||||||
|
|
||||||
|
const subscriber_queue = [];
|
||||||
|
/**
|
||||||
|
* Create a `Writable` store that allows both updating and reading by subscription.
|
||||||
|
* @param {*=}value initial value
|
||||||
|
* @param {StartStopNotifier=}start start and stop notifications for subscriptions
|
||||||
|
*/
|
||||||
|
function writable(value, start = noop) {
|
||||||
|
let stop;
|
||||||
|
const subscribers = new Set();
|
||||||
|
function set(new_value) {
|
||||||
|
if (safe_not_equal(value, new_value)) {
|
||||||
|
value = new_value;
|
||||||
|
if (stop) { // store is ready
|
||||||
|
const run_queue = !subscriber_queue.length;
|
||||||
|
for (const subscriber of subscribers) {
|
||||||
|
subscriber[1]();
|
||||||
|
subscriber_queue.push(subscriber, value);
|
||||||
|
}
|
||||||
|
if (run_queue) {
|
||||||
|
for (let i = 0; i < subscriber_queue.length; i += 2) {
|
||||||
|
subscriber_queue[i][0](subscriber_queue[i + 1]);
|
||||||
|
}
|
||||||
|
subscriber_queue.length = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function update(fn) {
|
||||||
|
set(fn(value));
|
||||||
|
}
|
||||||
|
function subscribe(run, invalidate = noop) {
|
||||||
|
const subscriber = [run, invalidate];
|
||||||
|
subscribers.add(subscriber);
|
||||||
|
if (subscribers.size === 1) {
|
||||||
|
stop = start(set) || noop;
|
||||||
|
}
|
||||||
|
run(value);
|
||||||
|
return () => {
|
||||||
|
subscribers.delete(subscriber);
|
||||||
|
if (subscribers.size === 0) {
|
||||||
|
stop();
|
||||||
|
stop = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return { set, update, subscribe };
|
||||||
|
}
|
||||||
|
|
||||||
|
export { writable as w };
|
|
@ -0,0 +1,53 @@
|
||||||
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
import { n as noop, s as safe_not_equal } from './index-998178c7.js';
|
||||||
|
|
||||||
|
const subscriber_queue = [];
|
||||||
|
/**
|
||||||
|
* Create a `Writable` store that allows both updating and reading by subscription.
|
||||||
|
* @param {*=}value initial value
|
||||||
|
* @param {StartStopNotifier=}start start and stop notifications for subscriptions
|
||||||
|
*/
|
||||||
|
function writable(value, start = noop) {
|
||||||
|
let stop;
|
||||||
|
const subscribers = new Set();
|
||||||
|
function set(new_value) {
|
||||||
|
if (safe_not_equal(value, new_value)) {
|
||||||
|
value = new_value;
|
||||||
|
if (stop) { // store is ready
|
||||||
|
const run_queue = !subscriber_queue.length;
|
||||||
|
for (const subscriber of subscribers) {
|
||||||
|
subscriber[1]();
|
||||||
|
subscriber_queue.push(subscriber, value);
|
||||||
|
}
|
||||||
|
if (run_queue) {
|
||||||
|
for (let i = 0; i < subscriber_queue.length; i += 2) {
|
||||||
|
subscriber_queue[i][0](subscriber_queue[i + 1]);
|
||||||
|
}
|
||||||
|
subscriber_queue.length = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function update(fn) {
|
||||||
|
set(fn(value));
|
||||||
|
}
|
||||||
|
function subscribe(run, invalidate = noop) {
|
||||||
|
const subscriber = [run, invalidate];
|
||||||
|
subscribers.add(subscriber);
|
||||||
|
if (subscribers.size === 1) {
|
||||||
|
stop = start(set) || noop;
|
||||||
|
}
|
||||||
|
run(value);
|
||||||
|
return () => {
|
||||||
|
subscribers.delete(subscriber);
|
||||||
|
if (subscribers.size === 0) {
|
||||||
|
stop();
|
||||||
|
stop = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return { set, update, subscribe };
|
||||||
|
}
|
||||||
|
|
||||||
|
export { writable as w };
|
|
@ -0,0 +1,53 @@
|
||||||
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
import { n as noop, s as safe_not_equal } from './index-122ecbb4.js';
|
||||||
|
|
||||||
|
const subscriber_queue = [];
|
||||||
|
/**
|
||||||
|
* Create a `Writable` store that allows both updating and reading by subscription.
|
||||||
|
* @param {*=}value initial value
|
||||||
|
* @param {StartStopNotifier=}start start and stop notifications for subscriptions
|
||||||
|
*/
|
||||||
|
function writable(value, start = noop) {
|
||||||
|
let stop;
|
||||||
|
const subscribers = new Set();
|
||||||
|
function set(new_value) {
|
||||||
|
if (safe_not_equal(value, new_value)) {
|
||||||
|
value = new_value;
|
||||||
|
if (stop) { // store is ready
|
||||||
|
const run_queue = !subscriber_queue.length;
|
||||||
|
for (const subscriber of subscribers) {
|
||||||
|
subscriber[1]();
|
||||||
|
subscriber_queue.push(subscriber, value);
|
||||||
|
}
|
||||||
|
if (run_queue) {
|
||||||
|
for (let i = 0; i < subscriber_queue.length; i += 2) {
|
||||||
|
subscriber_queue[i][0](subscriber_queue[i + 1]);
|
||||||
|
}
|
||||||
|
subscriber_queue.length = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function update(fn) {
|
||||||
|
set(fn(value));
|
||||||
|
}
|
||||||
|
function subscribe(run, invalidate = noop) {
|
||||||
|
const subscriber = [run, invalidate];
|
||||||
|
subscribers.add(subscriber);
|
||||||
|
if (subscribers.size === 1) {
|
||||||
|
stop = start(set) || noop;
|
||||||
|
}
|
||||||
|
run(value);
|
||||||
|
return () => {
|
||||||
|
subscribers.delete(subscriber);
|
||||||
|
if (subscribers.size === 0) {
|
||||||
|
stop();
|
||||||
|
stop = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return { set, update, subscribe };
|
||||||
|
}
|
||||||
|
|
||||||
|
export { writable as w };
|
|
@ -1 +1,362 @@
|
||||||
import{S as t,i as e,a as s,b as o,v as n,s as r,g as i,n as a,j as l,d as c,u as p,o as u,h,t as d,w as m,m as f,p as g,q as y,f as $}from"./index-8c09578c.js";import{pullLegendData as b}from"../../../../../../../../../js/predict/charts.js";function w(t,e,s){const o=t.slice();return o[10]=e[s],o[11]=e,o[12]=s,o}function x(t){let e,s,n,r,a,p,u,$,b=t[10].name+"",w=t[12];const x=()=>t[6](e,w),k=()=>t[6](null,w);function j(){return t[7](t[12])}return{c(){e=i("button"),s=i("div"),n=h(),r=i("span"),a=d(b),p=h(),l(s,"class","marker"),m(s,"background-color",t[10].color)},m(t,i){o(t,e,i),f(e,s),f(e,n),f(e,r),f(r,a),f(e,p),x(),u||($=g(e,"click",j),u=!0)},p(e,o){t=e,1&o&&m(s,"background-color",t[10].color),1&o&&b!==(b=t[10].name+"")&&y(a,b),w!==t[12]&&(k(),w=t[12],x())},d(t){t&&c(e),k(),u=!1,$()}}}function k(t){let e,s=t[0],n=[];for(let e=0;e<s.length;e+=1)n[e]=x(w(t,s,e));return{c(){e=i("div");for(let t=0;t<n.length;t+=1)n[t].c();this.c=a,l(e,"class","legend")},m(t,s){o(t,e,s);for(let t=0;t<n.length;t+=1)n[t].m(e,null)},p(t,[o]){if(7&o){let r;for(s=t[0],r=0;r<s.length;r+=1){const i=w(t,s,r);n[r]?n[r].p(i,o):(n[r]=x(i),n[r].c(),n[r].m(e,null))}for(;r<n.length;r+=1)n[r].d(1);n.length=s.length}},i:a,o:a,d(t){t&&c(e),p(n,t)}}}function j(t,e,s){let o,{option:n=null}=e,{chart:r=null}=e,{data:i={}}=e,a=[],l=[];function c(){if(null==n||null==n||null==r||null==r)setTimeout(c,100);else{s(0,a=b(a,n));for(let t of a)s(3,i[t.name]=!0,i);o=Object.keys(i)}}function p(t){s(3,i[o[t]]=!i[o[t]],i);let e=[],a=n.series.map((t=>t._id)),c=a[t];for(let t=0;t<a.length;t++)a[t]==c&&e.push(t);for(let t of e){let o=n.series[t];o.tooltip.show?(o.lineStyle.opacity=0,o.itemStyle.opacity=0,o.tooltip.show=!1,s(1,l[e[0]].style.opacity=.5,l)):(o.lineStyle.opacity=1,o.itemStyle.opacity=1,o.tooltip.show=!0,s(1,l[e[0]].style.opacity=1,l))}r.setOption(n)}u((()=>{c()}));return t.$$set=t=>{"option"in t&&s(4,n=t.option),"chart"in t&&s(5,r=t.chart),"data"in t&&s(3,i=t.data)},[a,l,p,i,n,r,function(t,e){$[t?"unshift":"push"]((()=>{l[e]=t,s(1,l)}))},t=>p(t)]}class v extends t{constructor(t){super(),this.shadowRoot.innerHTML="<style>@import '/css/common.css';@import '/css/test-basic.css';button{cursor:pointer}.legend{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center;gap:1rem}.legend *{font-family:var(--sans-serif)}.marker{position:relative;display:inline-block;margin-right:0.5rem;top:0.1rem;width:1rem;height:1rem;border-radius:1rem}</style>",e(this,{target:this.shadowRoot,props:s(this.attributes),customElement:!0},j,k,r,{option:4,chart:5,data:3},null),t&&(t.target&&o(t.target,this,t.anchor),t.props&&(this.$set(t.props),n()))}static get observedAttributes(){return["option","chart","data"]}get option(){return this.$$.ctx[4]}set option(t){this.$$set({option:t}),n()}get chart(){return this.$$.ctx[5]}set chart(t){this.$$set({chart:t}),n()}get data(){return this.$$.ctx[3]}set data(t){this.$$set({data:t}),n()}}customElements.define("legend-component",v);export{v as default};
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
import { S as SvelteElement, i as init, a as attribute_to_object, b as insert_dev, t as flush, s as safe_not_equal, A as validate_each_argument, d as dispatch_dev, v as validate_slots, o as onMount, e as globals, f as element, n as noop, k as attr_dev, j as add_location, p as detach_dev, D as destroy_each, q as binding_callbacks, h as space, B as text, F as set_style, l as append_dev, m as listen_dev, C as set_data_dev } from './index-998178c7.js';
|
||||||
|
import { pullLegendData } from '../../../../../../../../../js/predict/charts.js';
|
||||||
|
|
||||||
|
/* src\components\legend-component.svelte generated by Svelte v3.52.0 */
|
||||||
|
|
||||||
|
const { Object: Object_1 } = globals;
|
||||||
|
const file = "src\\components\\legend-component.svelte";
|
||||||
|
|
||||||
|
function get_each_context(ctx, list, i) {
|
||||||
|
const child_ctx = ctx.slice();
|
||||||
|
child_ctx[10] = list[i];
|
||||||
|
child_ctx[11] = list;
|
||||||
|
child_ctx[12] = i;
|
||||||
|
return child_ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
// (69:4) {#each legendData as item, i}
|
||||||
|
function create_each_block(ctx) {
|
||||||
|
let button;
|
||||||
|
let div;
|
||||||
|
let t0;
|
||||||
|
let span;
|
||||||
|
let t1_value = /*item*/ ctx[10].name + "";
|
||||||
|
let t1;
|
||||||
|
let t2;
|
||||||
|
let i = /*i*/ ctx[12];
|
||||||
|
let mounted;
|
||||||
|
let dispose;
|
||||||
|
const assign_button = () => /*button_binding*/ ctx[6](button, i);
|
||||||
|
const unassign_button = () => /*button_binding*/ ctx[6](null, i);
|
||||||
|
|
||||||
|
function click_handler() {
|
||||||
|
return /*click_handler*/ ctx[7](/*i*/ ctx[12]);
|
||||||
|
}
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
button = element("button");
|
||||||
|
div = element("div");
|
||||||
|
t0 = space();
|
||||||
|
span = element("span");
|
||||||
|
t1 = text(t1_value);
|
||||||
|
t2 = space();
|
||||||
|
attr_dev(div, "class", "marker");
|
||||||
|
set_style(div, "background-color", /*item*/ ctx[10].color);
|
||||||
|
add_location(div, file, 70, 12, 1892);
|
||||||
|
add_location(span, file, 71, 12, 1971);
|
||||||
|
add_location(button, file, 69, 8, 1814);
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
insert_dev(target, button, anchor);
|
||||||
|
append_dev(button, div);
|
||||||
|
append_dev(button, t0);
|
||||||
|
append_dev(button, span);
|
||||||
|
append_dev(span, t1);
|
||||||
|
append_dev(button, t2);
|
||||||
|
assign_button();
|
||||||
|
|
||||||
|
if (!mounted) {
|
||||||
|
dispose = listen_dev(button, "click", click_handler, false, false, false);
|
||||||
|
mounted = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
p: function update(new_ctx, dirty) {
|
||||||
|
ctx = new_ctx;
|
||||||
|
|
||||||
|
if (dirty & /*legendData*/ 1) {
|
||||||
|
set_style(div, "background-color", /*item*/ ctx[10].color);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dirty & /*legendData*/ 1 && t1_value !== (t1_value = /*item*/ ctx[10].name + "")) set_data_dev(t1, t1_value);
|
||||||
|
|
||||||
|
if (i !== /*i*/ ctx[12]) {
|
||||||
|
unassign_button();
|
||||||
|
i = /*i*/ ctx[12];
|
||||||
|
assign_button();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(button);
|
||||||
|
unassign_button();
|
||||||
|
mounted = false;
|
||||||
|
dispose();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_each_block.name,
|
||||||
|
type: "each",
|
||||||
|
source: "(69:4) {#each legendData as item, i}",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_fragment(ctx) {
|
||||||
|
let div;
|
||||||
|
let each_value = /*legendData*/ ctx[0];
|
||||||
|
validate_each_argument(each_value);
|
||||||
|
let each_blocks = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < each_value.length; i += 1) {
|
||||||
|
each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i));
|
||||||
|
}
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
div = element("div");
|
||||||
|
|
||||||
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
||||||
|
each_blocks[i].c();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.c = noop;
|
||||||
|
attr_dev(div, "class", "legend");
|
||||||
|
add_location(div, file, 67, 0, 1749);
|
||||||
|
},
|
||||||
|
l: function claim(nodes) {
|
||||||
|
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
insert_dev(target, div, anchor);
|
||||||
|
|
||||||
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
||||||
|
each_blocks[i].m(div, null);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
p: function update(ctx, [dirty]) {
|
||||||
|
if (dirty & /*buttons, toggleSeries, legendData*/ 7) {
|
||||||
|
each_value = /*legendData*/ ctx[0];
|
||||||
|
validate_each_argument(each_value);
|
||||||
|
let i;
|
||||||
|
|
||||||
|
for (i = 0; i < each_value.length; i += 1) {
|
||||||
|
const child_ctx = get_each_context(ctx, each_value, i);
|
||||||
|
|
||||||
|
if (each_blocks[i]) {
|
||||||
|
each_blocks[i].p(child_ctx, dirty);
|
||||||
|
} else {
|
||||||
|
each_blocks[i] = create_each_block(child_ctx);
|
||||||
|
each_blocks[i].c();
|
||||||
|
each_blocks[i].m(div, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; i < each_blocks.length; i += 1) {
|
||||||
|
each_blocks[i].d(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
each_blocks.length = each_value.length;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
i: noop,
|
||||||
|
o: noop,
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(div);
|
||||||
|
destroy_each(each_blocks, detaching);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_fragment.name,
|
||||||
|
type: "component",
|
||||||
|
source: "",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
function instance($$self, $$props, $$invalidate) {
|
||||||
|
let { $$slots: slots = {}, $$scope } = $$props;
|
||||||
|
validate_slots('legend-component', slots, []);
|
||||||
|
let { option = null } = $$props;
|
||||||
|
let { chart = null } = $$props;
|
||||||
|
let { data = {} } = $$props;
|
||||||
|
|
||||||
|
// Main code
|
||||||
|
let legendData = [];
|
||||||
|
|
||||||
|
let buttons = [];
|
||||||
|
let dataKeys;
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
if (option == null || option == undefined || chart == null || chart == undefined) {
|
||||||
|
setTimeout(init, 100);
|
||||||
|
} else {
|
||||||
|
$$invalidate(0, legendData = pullLegendData(legendData, option));
|
||||||
|
|
||||||
|
for (let obj of legendData) {
|
||||||
|
$$invalidate(3, data[obj.name] = true, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
dataKeys = Object.keys(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleSeries(i) {
|
||||||
|
$$invalidate(3, data[dataKeys[i]] = !data[dataKeys[i]], data);
|
||||||
|
let inds = [];
|
||||||
|
let ids = option.series.map(x => x._id);
|
||||||
|
let id = ids[i];
|
||||||
|
|
||||||
|
for (let j = 0; j < ids.length; j++) {
|
||||||
|
if (ids[j] == id) {
|
||||||
|
inds.push(j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i of inds) {
|
||||||
|
let series = option.series[i];
|
||||||
|
|
||||||
|
if (!series.tooltip.show) {
|
||||||
|
series.lineStyle.opacity = 1;
|
||||||
|
series.itemStyle.opacity = 1;
|
||||||
|
series.tooltip.show = true;
|
||||||
|
$$invalidate(1, buttons[inds[0]].style.opacity = 1, buttons);
|
||||||
|
} else {
|
||||||
|
series.lineStyle.opacity = 0;
|
||||||
|
series.itemStyle.opacity = 0;
|
||||||
|
series.tooltip.show = false;
|
||||||
|
$$invalidate(1, buttons[inds[0]].style.opacity = 0.5, buttons);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
chart.setOption(option);
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
init();
|
||||||
|
});
|
||||||
|
|
||||||
|
const writable_props = ['option', 'chart', 'data'];
|
||||||
|
|
||||||
|
Object_1.keys($$props).forEach(key => {
|
||||||
|
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console.warn(`<legend-component> was created with unknown prop '${key}'`);
|
||||||
|
});
|
||||||
|
|
||||||
|
function button_binding($$value, i) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
buttons[i] = $$value;
|
||||||
|
$$invalidate(1, buttons);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const click_handler = i => toggleSeries(i);
|
||||||
|
|
||||||
|
$$self.$$set = $$props => {
|
||||||
|
if ('option' in $$props) $$invalidate(4, option = $$props.option);
|
||||||
|
if ('chart' in $$props) $$invalidate(5, chart = $$props.chart);
|
||||||
|
if ('data' in $$props) $$invalidate(3, data = $$props.data);
|
||||||
|
};
|
||||||
|
|
||||||
|
$$self.$capture_state = () => ({
|
||||||
|
onMount,
|
||||||
|
pullLegendData,
|
||||||
|
option,
|
||||||
|
chart,
|
||||||
|
data,
|
||||||
|
legendData,
|
||||||
|
buttons,
|
||||||
|
dataKeys,
|
||||||
|
init,
|
||||||
|
toggleSeries
|
||||||
|
});
|
||||||
|
|
||||||
|
$$self.$inject_state = $$props => {
|
||||||
|
if ('option' in $$props) $$invalidate(4, option = $$props.option);
|
||||||
|
if ('chart' in $$props) $$invalidate(5, chart = $$props.chart);
|
||||||
|
if ('data' in $$props) $$invalidate(3, data = $$props.data);
|
||||||
|
if ('legendData' in $$props) $$invalidate(0, legendData = $$props.legendData);
|
||||||
|
if ('buttons' in $$props) $$invalidate(1, buttons = $$props.buttons);
|
||||||
|
if ('dataKeys' in $$props) dataKeys = $$props.dataKeys;
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($$props && "$$inject" in $$props) {
|
||||||
|
$$self.$inject_state($$props.$$inject);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
legendData,
|
||||||
|
buttons,
|
||||||
|
toggleSeries,
|
||||||
|
data,
|
||||||
|
option,
|
||||||
|
chart,
|
||||||
|
button_binding,
|
||||||
|
click_handler
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
class Legend_component extends SvelteElement {
|
||||||
|
constructor(options) {
|
||||||
|
super();
|
||||||
|
this.shadowRoot.innerHTML = `<style>@import '/css/common.css';@import '/css/test-basic.css';button{cursor:pointer}.legend{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center;gap:1rem}.legend *{font-family:var(--sans-serif)}.marker{position:relative;display:inline-block;margin-right:0.5rem;top:0.1rem;width:1rem;height:1rem;border-radius:1rem}</style>`;
|
||||||
|
|
||||||
|
init(
|
||||||
|
this,
|
||||||
|
{
|
||||||
|
target: this.shadowRoot,
|
||||||
|
props: attribute_to_object(this.attributes),
|
||||||
|
customElement: true
|
||||||
|
},
|
||||||
|
instance,
|
||||||
|
create_fragment,
|
||||||
|
safe_not_equal,
|
||||||
|
{ option: 4, chart: 5, data: 3 },
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
if (options) {
|
||||||
|
if (options.target) {
|
||||||
|
insert_dev(options.target, this, options.anchor);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.props) {
|
||||||
|
this.$set(options.props);
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static get observedAttributes() {
|
||||||
|
return ["option", "chart", "data"];
|
||||||
|
}
|
||||||
|
|
||||||
|
get option() {
|
||||||
|
return this.$$.ctx[4];
|
||||||
|
}
|
||||||
|
|
||||||
|
set option(option) {
|
||||||
|
this.$$set({ option });
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
get chart() {
|
||||||
|
return this.$$.ctx[5];
|
||||||
|
}
|
||||||
|
|
||||||
|
set chart(chart) {
|
||||||
|
this.$$set({ chart });
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
get data() {
|
||||||
|
return this.$$.ctx[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
set data(data) {
|
||||||
|
this.$$set({ data });
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
customElements.define("legend-component", Legend_component);
|
||||||
|
|
||||||
|
export { Legend_component as default };
|
||||||
|
|
|
@ -1 +1,115 @@
|
||||||
import{S as t,i as s,a as e,b as n,s as o,g as a,n as i,j as r,w as d,d as c,o as u,f as l}from"./index-8c09578c.js";function h(t){let s;return{c(){s=a("div"),this.c=i,r(s,"id","loadscreen"),d(s,"width","100%"),d(s,"height","100%"),d(s,"background","white"),d(s,"position","absolute"),d(s,"z-index","100000")},m(e,o){n(e,s,o),t[1](s)},p:i,i:i,o:i,d(e){e&&c(s),t[1](null)}}}function p(t,s,e){let n;return u((()=>{window.addEventListener("load",(function(){e(0,n.parentNode.host.style.display="none",n)}))})),[n,function(t){l[t?"unshift":"push"]((()=>{n=t,e(0,n)}))}]}class f extends t{constructor(t){super(),s(this,{target:this.shadowRoot,props:e(this.attributes),customElement:!0},p,h,o,{},null),t&&t.target&&n(t.target,this,t.anchor)}}customElements.define("loadscreen-component",f);export{f as default};
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
import { S as SvelteElement, i as init, a as attribute_to_object, b as insert_dev, s as safe_not_equal, d as dispatch_dev, v as validate_slots, o as onMount, f as element, n as noop, k as attr_dev, F as set_style, j as add_location, p as detach_dev, q as binding_callbacks } from './index-998178c7.js';
|
||||||
|
|
||||||
|
/* src\components\loadscreen-component.svelte generated by Svelte v3.52.0 */
|
||||||
|
const file = "src\\components\\loadscreen-component.svelte";
|
||||||
|
|
||||||
|
function create_fragment(ctx) {
|
||||||
|
let div;
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
div = element("div");
|
||||||
|
this.c = noop;
|
||||||
|
attr_dev(div, "id", "loadscreen");
|
||||||
|
set_style(div, "width", "100%");
|
||||||
|
set_style(div, "height", "100%");
|
||||||
|
set_style(div, "background", "white");
|
||||||
|
set_style(div, "position", "absolute");
|
||||||
|
set_style(div, "z-index", "100000");
|
||||||
|
add_location(div, file, 20, 0, 366);
|
||||||
|
},
|
||||||
|
l: function claim(nodes) {
|
||||||
|
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
insert_dev(target, div, anchor);
|
||||||
|
/*div_binding*/ ctx[1](div);
|
||||||
|
},
|
||||||
|
p: noop,
|
||||||
|
i: noop,
|
||||||
|
o: noop,
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(div);
|
||||||
|
/*div_binding*/ ctx[1](null);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_fragment.name,
|
||||||
|
type: "component",
|
||||||
|
source: "",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
function instance($$self, $$props, $$invalidate) {
|
||||||
|
let { $$slots: slots = {}, $$scope } = $$props;
|
||||||
|
validate_slots('loadscreen-component', slots, []);
|
||||||
|
let loadscreen;
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
window.addEventListener('load', function () {
|
||||||
|
$$invalidate(0, loadscreen.parentNode.host.style.display = "none", loadscreen);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const writable_props = [];
|
||||||
|
|
||||||
|
Object.keys($$props).forEach(key => {
|
||||||
|
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console.warn(`<loadscreen-component> was created with unknown prop '${key}'`);
|
||||||
|
});
|
||||||
|
|
||||||
|
function div_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
loadscreen = $$value;
|
||||||
|
$$invalidate(0, loadscreen);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$$self.$capture_state = () => ({ onMount, loadscreen });
|
||||||
|
|
||||||
|
$$self.$inject_state = $$props => {
|
||||||
|
if ('loadscreen' in $$props) $$invalidate(0, loadscreen = $$props.loadscreen);
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($$props && "$$inject" in $$props) {
|
||||||
|
$$self.$inject_state($$props.$$inject);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [loadscreen, div_binding];
|
||||||
|
}
|
||||||
|
|
||||||
|
class Loadscreen_component extends SvelteElement {
|
||||||
|
constructor(options) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
init(
|
||||||
|
this,
|
||||||
|
{
|
||||||
|
target: this.shadowRoot,
|
||||||
|
props: attribute_to_object(this.attributes),
|
||||||
|
customElement: true
|
||||||
|
},
|
||||||
|
instance,
|
||||||
|
create_fragment,
|
||||||
|
safe_not_equal,
|
||||||
|
{},
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
if (options) {
|
||||||
|
if (options.target) {
|
||||||
|
insert_dev(options.target, this, options.anchor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
customElements.define("loadscreen-component", Loadscreen_component);
|
||||||
|
|
||||||
|
export { Loadscreen_component as default };
|
||||||
|
|
|
@ -0,0 +1,448 @@
|
||||||
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
import { S as SvelteElement, i as init, a as attribute_to_object, b as insert_dev, t as flush, s as safe_not_equal, d as dispatch_dev, v as validate_slots, g as getContext, o as onMount, f as element, h as space, n as noop, k as attr_dev, j as add_location, u as src_url_equal, l as append_dev, m as listen_dev, p as detach_dev, r as run_all, q as binding_callbacks } from './index-998178c7.js';
|
||||||
|
import * as AuthTools from '../../../../../../../../../js/libraries/authTools.js';
|
||||||
|
|
||||||
|
/* src\auth\login-component.svelte generated by Svelte v3.52.0 */
|
||||||
|
const file = "src\\auth\\login-component.svelte";
|
||||||
|
|
||||||
|
function create_fragment(ctx) {
|
||||||
|
let div5;
|
||||||
|
let h2;
|
||||||
|
let t1;
|
||||||
|
let label0;
|
||||||
|
let span0;
|
||||||
|
let t3;
|
||||||
|
let input0;
|
||||||
|
let t4;
|
||||||
|
let div0;
|
||||||
|
let label1;
|
||||||
|
let span1;
|
||||||
|
let t6;
|
||||||
|
let input1;
|
||||||
|
let t7;
|
||||||
|
let button0;
|
||||||
|
let object;
|
||||||
|
let t8;
|
||||||
|
let div1;
|
||||||
|
let input2;
|
||||||
|
let label2;
|
||||||
|
let t10;
|
||||||
|
let button1;
|
||||||
|
let t12;
|
||||||
|
let a;
|
||||||
|
let t14;
|
||||||
|
let hr;
|
||||||
|
let t15;
|
||||||
|
let div4;
|
||||||
|
let div3;
|
||||||
|
let div2;
|
||||||
|
let t16;
|
||||||
|
let img;
|
||||||
|
let img_src_value;
|
||||||
|
let mounted;
|
||||||
|
let dispose;
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
div5 = element("div");
|
||||||
|
h2 = element("h2");
|
||||||
|
h2.textContent = "LOG IN";
|
||||||
|
t1 = space();
|
||||||
|
label0 = element("label");
|
||||||
|
label0.textContent = "Email ";
|
||||||
|
span0 = element("span");
|
||||||
|
t3 = space();
|
||||||
|
input0 = element("input");
|
||||||
|
t4 = space();
|
||||||
|
div0 = element("div");
|
||||||
|
label1 = element("label");
|
||||||
|
label1.textContent = "Password ";
|
||||||
|
span1 = element("span");
|
||||||
|
t6 = space();
|
||||||
|
input1 = element("input");
|
||||||
|
t7 = space();
|
||||||
|
button0 = element("button");
|
||||||
|
object = element("object");
|
||||||
|
t8 = space();
|
||||||
|
div1 = element("div");
|
||||||
|
input2 = element("input");
|
||||||
|
label2 = element("label");
|
||||||
|
label2.textContent = "remember me";
|
||||||
|
t10 = space();
|
||||||
|
button1 = element("button");
|
||||||
|
button1.textContent = "Log in";
|
||||||
|
t12 = space();
|
||||||
|
a = element("a");
|
||||||
|
a.textContent = "Forgot password?";
|
||||||
|
t14 = space();
|
||||||
|
hr = element("hr");
|
||||||
|
t15 = space();
|
||||||
|
div4 = element("div");
|
||||||
|
div3 = element("div");
|
||||||
|
div2 = element("div");
|
||||||
|
t16 = space();
|
||||||
|
img = element("img");
|
||||||
|
this.c = noop;
|
||||||
|
attr_dev(h2, "class", "auth-title");
|
||||||
|
add_location(h2, file, 68, 4, 1639);
|
||||||
|
attr_dev(label0, "class", "auth-label");
|
||||||
|
attr_dev(label0, "for", "emailInput");
|
||||||
|
add_location(label0, file, 69, 4, 1679);
|
||||||
|
attr_dev(span0, "id", "email-msg");
|
||||||
|
add_location(span0, file, 69, 66, 1741);
|
||||||
|
attr_dev(input0, "id", "emailInput");
|
||||||
|
attr_dev(input0, "class", "authEmailInput");
|
||||||
|
attr_dev(input0, "type", "email");
|
||||||
|
add_location(input0, file, 70, 4, 1796);
|
||||||
|
attr_dev(label1, "class", "auth-label");
|
||||||
|
attr_dev(label1, "for", "passwordInput");
|
||||||
|
add_location(label1, file, 72, 8, 1922);
|
||||||
|
attr_dev(span1, "id", "password-msg");
|
||||||
|
add_location(span1, file, 72, 76, 1990);
|
||||||
|
attr_dev(input1, "id", "passwordInput");
|
||||||
|
attr_dev(input1, "class", "authPasswordInput");
|
||||||
|
attr_dev(input1, "type", "password");
|
||||||
|
add_location(input1, file, 73, 8, 2055);
|
||||||
|
attr_dev(object, "type", "image/svg+xml");
|
||||||
|
attr_dev(object, "data", "/img/auth/eye_icon.svg");
|
||||||
|
attr_dev(object, "title", "eye icon");
|
||||||
|
add_location(object, file, 75, 12, 2316);
|
||||||
|
attr_dev(button0, "class", "eye-icon");
|
||||||
|
add_location(button0, file, 74, 8, 2160);
|
||||||
|
attr_dev(div0, "class", "password-field");
|
||||||
|
add_location(div0, file, 71, 4, 1884);
|
||||||
|
attr_dev(input2, "type", "checkbox");
|
||||||
|
attr_dev(input2, "id", "remember-me-checkbox");
|
||||||
|
add_location(input2, file, 79, 8, 2470);
|
||||||
|
attr_dev(label2, "id", "remember-me-label");
|
||||||
|
attr_dev(label2, "for", "passwordInput");
|
||||||
|
add_location(label2, file, 79, 80, 2542);
|
||||||
|
attr_dev(div1, "id", "remember-me");
|
||||||
|
add_location(div1, file, 78, 4, 2438);
|
||||||
|
attr_dev(button1, "class", "auth-button");
|
||||||
|
add_location(button1, file, 81, 4, 2629);
|
||||||
|
attr_dev(a, "id", "forgot-password");
|
||||||
|
attr_dev(a, "href", "forgot-password");
|
||||||
|
add_location(a, file, 82, 4, 2726);
|
||||||
|
attr_dev(hr, "class", "auth-line");
|
||||||
|
add_location(hr, file, 83, 4, 2799);
|
||||||
|
attr_dev(div2, "id", "google-btn");
|
||||||
|
add_location(div2, file, 86, 12, 2912);
|
||||||
|
if (!src_url_equal(img.src, img_src_value = "/img/auth/google_icon.svg")) attr_dev(img, "src", img_src_value);
|
||||||
|
attr_dev(img, "id", "google-logo");
|
||||||
|
attr_dev(img, "alt", "google icon");
|
||||||
|
add_location(img, file, 87, 12, 2978);
|
||||||
|
attr_dev(div3, "id", "google-btn-wrapper");
|
||||||
|
add_location(div3, file, 85, 8, 2869);
|
||||||
|
attr_dev(div4, "class", "auth-methods-group");
|
||||||
|
add_location(div4, file, 84, 4, 2827);
|
||||||
|
attr_dev(div5, "id", "login-group");
|
||||||
|
attr_dev(div5, "class", "pane auth-pane");
|
||||||
|
add_location(div5, file, 67, 0, 1589);
|
||||||
|
},
|
||||||
|
l: function claim(nodes) {
|
||||||
|
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
insert_dev(target, div5, anchor);
|
||||||
|
append_dev(div5, h2);
|
||||||
|
append_dev(div5, t1);
|
||||||
|
append_dev(div5, label0);
|
||||||
|
append_dev(div5, span0);
|
||||||
|
/*span0_binding*/ ctx[10](span0);
|
||||||
|
append_dev(div5, t3);
|
||||||
|
append_dev(div5, input0);
|
||||||
|
/*input0_binding*/ ctx[11](input0);
|
||||||
|
append_dev(div5, t4);
|
||||||
|
append_dev(div5, div0);
|
||||||
|
append_dev(div0, label1);
|
||||||
|
append_dev(div0, span1);
|
||||||
|
/*span1_binding*/ ctx[12](span1);
|
||||||
|
append_dev(div0, t6);
|
||||||
|
append_dev(div0, input1);
|
||||||
|
/*input1_binding*/ ctx[13](input1);
|
||||||
|
append_dev(div0, t7);
|
||||||
|
append_dev(div0, button0);
|
||||||
|
append_dev(button0, object);
|
||||||
|
/*button0_binding*/ ctx[14](button0);
|
||||||
|
append_dev(div5, t8);
|
||||||
|
append_dev(div5, div1);
|
||||||
|
append_dev(div1, input2);
|
||||||
|
/*input2_binding*/ ctx[16](input2);
|
||||||
|
append_dev(div1, label2);
|
||||||
|
append_dev(div5, t10);
|
||||||
|
append_dev(div5, button1);
|
||||||
|
append_dev(div5, t12);
|
||||||
|
append_dev(div5, a);
|
||||||
|
append_dev(div5, t14);
|
||||||
|
append_dev(div5, hr);
|
||||||
|
append_dev(div5, t15);
|
||||||
|
append_dev(div5, div4);
|
||||||
|
append_dev(div4, div3);
|
||||||
|
append_dev(div3, div2);
|
||||||
|
/*div2_binding*/ ctx[18](div2);
|
||||||
|
append_dev(div3, t16);
|
||||||
|
append_dev(div3, img);
|
||||||
|
|
||||||
|
if (!mounted) {
|
||||||
|
dispose = [
|
||||||
|
listen_dev(button0, "click", /*click_handler*/ ctx[15], false, false, false),
|
||||||
|
listen_dev(button1, "click", /*click_handler_1*/ ctx[17], false, false, false)
|
||||||
|
];
|
||||||
|
|
||||||
|
mounted = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
p: noop,
|
||||||
|
i: noop,
|
||||||
|
o: noop,
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(div5);
|
||||||
|
/*span0_binding*/ ctx[10](null);
|
||||||
|
/*input0_binding*/ ctx[11](null);
|
||||||
|
/*span1_binding*/ ctx[12](null);
|
||||||
|
/*input1_binding*/ ctx[13](null);
|
||||||
|
/*button0_binding*/ ctx[14](null);
|
||||||
|
/*input2_binding*/ ctx[16](null);
|
||||||
|
/*div2_binding*/ ctx[18](null);
|
||||||
|
mounted = false;
|
||||||
|
run_all(dispose);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_fragment.name,
|
||||||
|
type: "component",
|
||||||
|
source: "",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
function instance($$self, $$props, $$invalidate) {
|
||||||
|
let { $$slots: slots = {}, $$scope } = $$props;
|
||||||
|
validate_slots('login-component', slots, []);
|
||||||
|
let { focused = false } = $$props;
|
||||||
|
|
||||||
|
// Main code
|
||||||
|
let emailInput;
|
||||||
|
|
||||||
|
let passwordInput;
|
||||||
|
let inputs;
|
||||||
|
let passwordVisibilityButton;
|
||||||
|
let emailMsg;
|
||||||
|
let passwordMsg;
|
||||||
|
let msgs;
|
||||||
|
let rememberMe;
|
||||||
|
let googleButton;
|
||||||
|
let parentProps = getContext("auth");
|
||||||
|
|
||||||
|
function renderGoogle() {
|
||||||
|
if (parentProps.googleInit) {
|
||||||
|
google.accounts.id.renderButton(googleButton, { theme: 'outline', size: 'large' });
|
||||||
|
let iframe = googleButton.getElementsByTagName('iframe')[0];
|
||||||
|
iframe.style.height = "5rem";
|
||||||
|
iframe.style.width = "5rem";
|
||||||
|
} else {
|
||||||
|
setTimeout(renderGoogle, 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
$$invalidate(7, rememberMe.checked = true, rememberMe);
|
||||||
|
|
||||||
|
$$invalidate(2, inputs = {
|
||||||
|
email: emailInput,
|
||||||
|
password: passwordInput,
|
||||||
|
remember: rememberMe
|
||||||
|
});
|
||||||
|
|
||||||
|
$$invalidate(6, msgs = { email: emailMsg, password: passwordMsg });
|
||||||
|
parentProps.msgs = msgs;
|
||||||
|
parentProps.remember = rememberMe;
|
||||||
|
parentProps.loginGoogle = googleButton;
|
||||||
|
|
||||||
|
document.addEventListener("keypress", function (event) {
|
||||||
|
if (event.code == "Enter") {
|
||||||
|
if (focused) {
|
||||||
|
AuthTools.login(msgs, inputs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
renderGoogle();
|
||||||
|
});
|
||||||
|
|
||||||
|
const writable_props = ['focused'];
|
||||||
|
|
||||||
|
Object.keys($$props).forEach(key => {
|
||||||
|
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console.warn(`<login-component> was created with unknown prop '${key}'`);
|
||||||
|
});
|
||||||
|
|
||||||
|
function span0_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
emailMsg = $$value;
|
||||||
|
$$invalidate(4, emailMsg);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function input0_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
emailInput = $$value;
|
||||||
|
$$invalidate(0, emailInput);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function span1_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
passwordMsg = $$value;
|
||||||
|
$$invalidate(5, passwordMsg);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function input1_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
passwordInput = $$value;
|
||||||
|
$$invalidate(1, passwordInput);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function button0_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
passwordVisibilityButton = $$value;
|
||||||
|
$$invalidate(3, passwordVisibilityButton);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const click_handler = () => AuthTools.changePasswordVisibility(passwordVisibilityButton);
|
||||||
|
|
||||||
|
function input2_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
rememberMe = $$value;
|
||||||
|
$$invalidate(7, rememberMe);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const click_handler_1 = () => AuthTools.login(msgs, inputs);
|
||||||
|
|
||||||
|
function div2_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
googleButton = $$value;
|
||||||
|
$$invalidate(8, googleButton);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$$self.$$set = $$props => {
|
||||||
|
if ('focused' in $$props) $$invalidate(9, focused = $$props.focused);
|
||||||
|
};
|
||||||
|
|
||||||
|
$$self.$capture_state = () => ({
|
||||||
|
onMount,
|
||||||
|
getContext,
|
||||||
|
AuthTools,
|
||||||
|
focused,
|
||||||
|
emailInput,
|
||||||
|
passwordInput,
|
||||||
|
inputs,
|
||||||
|
passwordVisibilityButton,
|
||||||
|
emailMsg,
|
||||||
|
passwordMsg,
|
||||||
|
msgs,
|
||||||
|
rememberMe,
|
||||||
|
googleButton,
|
||||||
|
parentProps,
|
||||||
|
renderGoogle
|
||||||
|
});
|
||||||
|
|
||||||
|
$$self.$inject_state = $$props => {
|
||||||
|
if ('focused' in $$props) $$invalidate(9, focused = $$props.focused);
|
||||||
|
if ('emailInput' in $$props) $$invalidate(0, emailInput = $$props.emailInput);
|
||||||
|
if ('passwordInput' in $$props) $$invalidate(1, passwordInput = $$props.passwordInput);
|
||||||
|
if ('inputs' in $$props) $$invalidate(2, inputs = $$props.inputs);
|
||||||
|
if ('passwordVisibilityButton' in $$props) $$invalidate(3, passwordVisibilityButton = $$props.passwordVisibilityButton);
|
||||||
|
if ('emailMsg' in $$props) $$invalidate(4, emailMsg = $$props.emailMsg);
|
||||||
|
if ('passwordMsg' in $$props) $$invalidate(5, passwordMsg = $$props.passwordMsg);
|
||||||
|
if ('msgs' in $$props) $$invalidate(6, msgs = $$props.msgs);
|
||||||
|
if ('rememberMe' in $$props) $$invalidate(7, rememberMe = $$props.rememberMe);
|
||||||
|
if ('googleButton' in $$props) $$invalidate(8, googleButton = $$props.googleButton);
|
||||||
|
if ('parentProps' in $$props) parentProps = $$props.parentProps;
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($$props && "$$inject" in $$props) {
|
||||||
|
$$self.$inject_state($$props.$$inject);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
emailInput,
|
||||||
|
passwordInput,
|
||||||
|
inputs,
|
||||||
|
passwordVisibilityButton,
|
||||||
|
emailMsg,
|
||||||
|
passwordMsg,
|
||||||
|
msgs,
|
||||||
|
rememberMe,
|
||||||
|
googleButton,
|
||||||
|
focused,
|
||||||
|
span0_binding,
|
||||||
|
input0_binding,
|
||||||
|
span1_binding,
|
||||||
|
input1_binding,
|
||||||
|
button0_binding,
|
||||||
|
click_handler,
|
||||||
|
input2_binding,
|
||||||
|
click_handler_1,
|
||||||
|
div2_binding
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
class Login_component extends SvelteElement {
|
||||||
|
constructor(options) {
|
||||||
|
super();
|
||||||
|
this.shadowRoot.innerHTML = `<style>@import '/css/common.css';@import '/css/auth.css';</style>`;
|
||||||
|
|
||||||
|
init(
|
||||||
|
this,
|
||||||
|
{
|
||||||
|
target: this.shadowRoot,
|
||||||
|
props: attribute_to_object(this.attributes),
|
||||||
|
customElement: true
|
||||||
|
},
|
||||||
|
instance,
|
||||||
|
create_fragment,
|
||||||
|
safe_not_equal,
|
||||||
|
{ focused: 9 },
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
if (options) {
|
||||||
|
if (options.target) {
|
||||||
|
insert_dev(options.target, this, options.anchor);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.props) {
|
||||||
|
this.$set(options.props);
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static get observedAttributes() {
|
||||||
|
return ["focused"];
|
||||||
|
}
|
||||||
|
|
||||||
|
get focused() {
|
||||||
|
return this.$$.ctx[9];
|
||||||
|
}
|
||||||
|
|
||||||
|
set focused(focused) {
|
||||||
|
this.$$set({ focused });
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
customElements.define("login-component", Login_component);
|
||||||
|
|
||||||
|
export { Login_component as default };
|
|
@ -1 +1,175 @@
|
||||||
import{S as t,i as e,a as o,b as s,v as a,s as r,g as l,n as i,j as n,d as c,o as m,f as p}from"./index-8c09578c.js";function h(t){let e;return{c(){e=l("div"),this.c=i,n(e,"id","map")},m(o,a){s(o,e,a),t[3](e)},p:i,i:i,o:i,d(o){o&&c(e),t[3](null)}}}function u(t,e,o){let s,{callback:a=null}=e,{colors:r=null}=e;function l(t,e){let o=L.map(s,{center:t,zoom:e});return L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',minNativeZoom:2,minZoom:2,maxNativeZoom:14,maxZoom:14}).addTo(o),o}return m((()=>{if(a(l),null!=r){let t=s.getElementsByClassName("leaflet-control-layers-overlays")[0].children;for(let e=0;e<t.length;e++)t[e].children[0].children[0].style.accentColor=r[e]}})),t.$$set=t=>{"callback"in t&&o(1,a=t.callback),"colors"in t&&o(2,r=t.colors)},[s,a,r,function(t){p[t?"unshift":"push"]((()=>{s=t,o(0,s)}))}]}class d extends t{constructor(t){super(),this.shadowRoot.innerHTML="<style>@import 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.css';#map{height:var(--height);width:var(--width,100%);margin-top:var(--margin-top,0);margin-bottom:var(--margin-bottom,0);position:relative;z-index:0}</style>",e(this,{target:this.shadowRoot,props:o(this.attributes),customElement:!0},u,h,r,{callback:1,colors:2},null),t&&(t.target&&s(t.target,this,t.anchor),t.props&&(this.$set(t.props),a()))}static get observedAttributes(){return["callback","colors"]}get callback(){return this.$$.ctx[1]}set callback(t){this.$$set({callback:t}),a()}get colors(){return this.$$.ctx[2]}set colors(t){this.$$set({colors:t}),a()}}customElements.define("map-component",d);export{d as default};
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
import { S as SvelteElement, i as init, a as attribute_to_object, b as insert_dev, t as flush, s as safe_not_equal, d as dispatch_dev, v as validate_slots, o as onMount, f as element, n as noop, k as attr_dev, j as add_location, p as detach_dev, q as binding_callbacks } from './index-998178c7.js';
|
||||||
|
|
||||||
|
/* src\components\map-component.svelte generated by Svelte v3.52.0 */
|
||||||
|
const file = "src\\components\\map-component.svelte";
|
||||||
|
|
||||||
|
function create_fragment(ctx) {
|
||||||
|
let div;
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
div = element("div");
|
||||||
|
this.c = noop;
|
||||||
|
attr_dev(div, "id", "map");
|
||||||
|
add_location(div, file, 41, 0, 1151);
|
||||||
|
},
|
||||||
|
l: function claim(nodes) {
|
||||||
|
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
insert_dev(target, div, anchor);
|
||||||
|
/*div_binding*/ ctx[3](div);
|
||||||
|
},
|
||||||
|
p: noop,
|
||||||
|
i: noop,
|
||||||
|
o: noop,
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(div);
|
||||||
|
/*div_binding*/ ctx[3](null);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_fragment.name,
|
||||||
|
type: "component",
|
||||||
|
source: "",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
function instance($$self, $$props, $$invalidate) {
|
||||||
|
let { $$slots: slots = {}, $$scope } = $$props;
|
||||||
|
validate_slots('map-component', slots, []);
|
||||||
|
let { callback = null } = $$props;
|
||||||
|
let { colors = null } = $$props;
|
||||||
|
|
||||||
|
// Main code
|
||||||
|
let mapContainer;
|
||||||
|
|
||||||
|
function createMap(center, zoom) {
|
||||||
|
let map = L.map(mapContainer, { center, zoom });
|
||||||
|
|
||||||
|
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||||
|
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
|
||||||
|
minNativeZoom: 2,
|
||||||
|
minZoom: 2,
|
||||||
|
maxNativeZoom: 14,
|
||||||
|
maxZoom: 14
|
||||||
|
}).addTo(map);
|
||||||
|
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
callback(createMap);
|
||||||
|
|
||||||
|
if (colors != null) {
|
||||||
|
let els = mapContainer.getElementsByClassName("leaflet-control-layers-overlays")[0].children;
|
||||||
|
|
||||||
|
for (let i = 0; i < els.length; i++) {
|
||||||
|
els[i].children[0].children[0].style.accentColor = colors[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const writable_props = ['callback', 'colors'];
|
||||||
|
|
||||||
|
Object.keys($$props).forEach(key => {
|
||||||
|
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console.warn(`<map-component> was created with unknown prop '${key}'`);
|
||||||
|
});
|
||||||
|
|
||||||
|
function div_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
mapContainer = $$value;
|
||||||
|
$$invalidate(0, mapContainer);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$$self.$$set = $$props => {
|
||||||
|
if ('callback' in $$props) $$invalidate(1, callback = $$props.callback);
|
||||||
|
if ('colors' in $$props) $$invalidate(2, colors = $$props.colors);
|
||||||
|
};
|
||||||
|
|
||||||
|
$$self.$capture_state = () => ({
|
||||||
|
onMount,
|
||||||
|
callback,
|
||||||
|
colors,
|
||||||
|
mapContainer,
|
||||||
|
createMap
|
||||||
|
});
|
||||||
|
|
||||||
|
$$self.$inject_state = $$props => {
|
||||||
|
if ('callback' in $$props) $$invalidate(1, callback = $$props.callback);
|
||||||
|
if ('colors' in $$props) $$invalidate(2, colors = $$props.colors);
|
||||||
|
if ('mapContainer' in $$props) $$invalidate(0, mapContainer = $$props.mapContainer);
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($$props && "$$inject" in $$props) {
|
||||||
|
$$self.$inject_state($$props.$$inject);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [mapContainer, callback, colors, div_binding];
|
||||||
|
}
|
||||||
|
|
||||||
|
class Map_component extends SvelteElement {
|
||||||
|
constructor(options) {
|
||||||
|
super();
|
||||||
|
this.shadowRoot.innerHTML = `<style>@import 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.css';#map{height:var(--height);width:var(--width,100%);margin-top:var(--margin-top,0);margin-bottom:var(--margin-bottom,0);position:relative;z-index:0}</style>`;
|
||||||
|
|
||||||
|
init(
|
||||||
|
this,
|
||||||
|
{
|
||||||
|
target: this.shadowRoot,
|
||||||
|
props: attribute_to_object(this.attributes),
|
||||||
|
customElement: true
|
||||||
|
},
|
||||||
|
instance,
|
||||||
|
create_fragment,
|
||||||
|
safe_not_equal,
|
||||||
|
{ callback: 1, colors: 2 },
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
if (options) {
|
||||||
|
if (options.target) {
|
||||||
|
insert_dev(options.target, this, options.anchor);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.props) {
|
||||||
|
this.$set(options.props);
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static get observedAttributes() {
|
||||||
|
return ["callback", "colors"];
|
||||||
|
}
|
||||||
|
|
||||||
|
get callback() {
|
||||||
|
return this.$$.ctx[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
set callback(callback) {
|
||||||
|
this.$$set({ callback });
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
get colors() {
|
||||||
|
return this.$$.ctx[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
set colors(colors) {
|
||||||
|
this.$$set({ colors });
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
customElements.define("map-component", Map_component);
|
||||||
|
|
||||||
|
export { Map_component as default };
|
||||||
|
|
|
@ -0,0 +1,687 @@
|
||||||
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
import { S as SvelteElement, i as init, a as attribute_to_object, b as insert_dev, s as safe_not_equal, d as dispatch_dev, v as validate_slots, w as validate_store, x as component_subscribe, o as onMount, g as getContext, e as globals, A as validate_each_argument, y as empty, n as noop, p as detach_dev, q as binding_callbacks, f as element, h as space, B as text, k as attr_dev, j as add_location, u as src_url_equal, l as append_dev, m as listen_dev, C as set_data_dev, D as destroy_each, r as run_all } from './index-998178c7.js';
|
||||||
|
import { w as writable } from './index-f9998ce7.js';
|
||||||
|
import { loadLocaleContent, locales } from '../../../../../../../../../js/libraries/serverTools.js';
|
||||||
|
|
||||||
|
/* src\navbar\navbar-logged.svelte generated by Svelte v3.52.0 */
|
||||||
|
|
||||||
|
const { Object: Object_1 } = globals;
|
||||||
|
const file = "src\\navbar\\navbar-logged.svelte";
|
||||||
|
|
||||||
|
function get_each_context(ctx, list, i) {
|
||||||
|
const child_ctx = ctx.slice();
|
||||||
|
child_ctx[23] = list[i][0];
|
||||||
|
child_ctx[24] = list[i][1];
|
||||||
|
return child_ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
// (97:4) {#if Object.keys($content).length!=0}
|
||||||
|
function create_if_block(ctx) {
|
||||||
|
let header;
|
||||||
|
let input;
|
||||||
|
let t0;
|
||||||
|
let label;
|
||||||
|
let span0;
|
||||||
|
let t1;
|
||||||
|
let a0;
|
||||||
|
let img0;
|
||||||
|
let img0_src_value;
|
||||||
|
let t2;
|
||||||
|
let span1;
|
||||||
|
let raw_value = /*$content*/ ctx[5].orgName + "";
|
||||||
|
let t3;
|
||||||
|
let nav;
|
||||||
|
let ul;
|
||||||
|
let li0;
|
||||||
|
let a1;
|
||||||
|
let t4_value = /*$content*/ ctx[5].joinUs + "";
|
||||||
|
let t4;
|
||||||
|
let t5;
|
||||||
|
let li1;
|
||||||
|
let a2;
|
||||||
|
let t6_value = /*$content*/ ctx[5].manifesto + "";
|
||||||
|
let t6;
|
||||||
|
let t7;
|
||||||
|
let li2;
|
||||||
|
let button0;
|
||||||
|
let t8_value = /*$content*/ ctx[5].initiatives + "";
|
||||||
|
let t8;
|
||||||
|
let t9;
|
||||||
|
let div0;
|
||||||
|
let a3;
|
||||||
|
let t10_value = /*$content*/ ctx[5].groups + "";
|
||||||
|
let t10;
|
||||||
|
let t11;
|
||||||
|
let a4;
|
||||||
|
let t12_value = /*$content*/ ctx[5].communes + "";
|
||||||
|
let t12;
|
||||||
|
let t13;
|
||||||
|
let a5;
|
||||||
|
let t14_value = /*$content*/ ctx[5].cooperatives + "";
|
||||||
|
let t14;
|
||||||
|
let t15;
|
||||||
|
let a6;
|
||||||
|
let t16_value = /*$content*/ ctx[5].parties + "";
|
||||||
|
let t16;
|
||||||
|
let t17;
|
||||||
|
let a7;
|
||||||
|
let t18_value = /*$content*/ ctx[5].partners + "";
|
||||||
|
let t18;
|
||||||
|
let t19;
|
||||||
|
let li3;
|
||||||
|
let a8;
|
||||||
|
let t20_value = /*$content*/ ctx[5].profile + "";
|
||||||
|
let t20;
|
||||||
|
let t21;
|
||||||
|
let li4;
|
||||||
|
let button1;
|
||||||
|
let picture;
|
||||||
|
let source0;
|
||||||
|
let t22;
|
||||||
|
let source1;
|
||||||
|
let t23;
|
||||||
|
let img1;
|
||||||
|
let t24;
|
||||||
|
let div1;
|
||||||
|
let mounted;
|
||||||
|
let dispose;
|
||||||
|
let each_value = Object.entries(locales);
|
||||||
|
validate_each_argument(each_value);
|
||||||
|
let each_blocks = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < each_value.length; i += 1) {
|
||||||
|
each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i));
|
||||||
|
}
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
header = element("header");
|
||||||
|
input = element("input");
|
||||||
|
t0 = space();
|
||||||
|
label = element("label");
|
||||||
|
span0 = element("span");
|
||||||
|
t1 = space();
|
||||||
|
a0 = element("a");
|
||||||
|
img0 = element("img");
|
||||||
|
t2 = space();
|
||||||
|
span1 = element("span");
|
||||||
|
t3 = space();
|
||||||
|
nav = element("nav");
|
||||||
|
ul = element("ul");
|
||||||
|
li0 = element("li");
|
||||||
|
a1 = element("a");
|
||||||
|
t4 = text(t4_value);
|
||||||
|
t5 = space();
|
||||||
|
li1 = element("li");
|
||||||
|
a2 = element("a");
|
||||||
|
t6 = text(t6_value);
|
||||||
|
t7 = space();
|
||||||
|
li2 = element("li");
|
||||||
|
button0 = element("button");
|
||||||
|
t8 = text(t8_value);
|
||||||
|
t9 = space();
|
||||||
|
div0 = element("div");
|
||||||
|
a3 = element("a");
|
||||||
|
t10 = text(t10_value);
|
||||||
|
t11 = space();
|
||||||
|
a4 = element("a");
|
||||||
|
t12 = text(t12_value);
|
||||||
|
t13 = space();
|
||||||
|
a5 = element("a");
|
||||||
|
t14 = text(t14_value);
|
||||||
|
t15 = space();
|
||||||
|
a6 = element("a");
|
||||||
|
t16 = text(t16_value);
|
||||||
|
t17 = space();
|
||||||
|
a7 = element("a");
|
||||||
|
t18 = text(t18_value);
|
||||||
|
t19 = space();
|
||||||
|
li3 = element("li");
|
||||||
|
a8 = element("a");
|
||||||
|
t20 = text(t20_value);
|
||||||
|
t21 = space();
|
||||||
|
li4 = element("li");
|
||||||
|
button1 = element("button");
|
||||||
|
picture = element("picture");
|
||||||
|
source0 = element("source");
|
||||||
|
t22 = space();
|
||||||
|
source1 = element("source");
|
||||||
|
t23 = space();
|
||||||
|
img1 = element("img");
|
||||||
|
t24 = space();
|
||||||
|
div1 = element("div");
|
||||||
|
|
||||||
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
||||||
|
each_blocks[i].c();
|
||||||
|
}
|
||||||
|
|
||||||
|
attr_dev(input, "type", "checkbox");
|
||||||
|
attr_dev(input, "id", "side-menu");
|
||||||
|
add_location(input, file, 99, 12, 3167);
|
||||||
|
attr_dev(span0, "id", "hamb-line");
|
||||||
|
add_location(span0, file, 100, 45, 3298);
|
||||||
|
attr_dev(label, "id", "hamb");
|
||||||
|
attr_dev(label, "for", "side-menu");
|
||||||
|
add_location(label, file, 100, 12, 3265);
|
||||||
|
if (!src_url_equal(img0.src, img0_src_value = "/img/common/flag.png")) attr_dev(img0, "src", img0_src_value);
|
||||||
|
attr_dev(img0, "id", "navbar-logo");
|
||||||
|
attr_dev(img0, "alt", "logo");
|
||||||
|
add_location(img0, file, 103, 16, 3440);
|
||||||
|
attr_dev(span1, "id", "navbar-logo-text");
|
||||||
|
add_location(span1, file, 104, 16, 3518);
|
||||||
|
attr_dev(a0, "id", "logo-container");
|
||||||
|
attr_dev(a0, "href", "/" + /*locale*/ ctx[8] + "/");
|
||||||
|
add_location(a0, file, 102, 12, 3375);
|
||||||
|
attr_dev(a1, "href", "/" + /*locale*/ ctx[8] + "/join-us");
|
||||||
|
add_location(a1, file, 109, 24, 3730);
|
||||||
|
add_location(li0, file, 109, 20, 3726);
|
||||||
|
attr_dev(a2, "href", "/" + /*locale*/ ctx[8] + "/manifesto");
|
||||||
|
add_location(a2, file, 110, 24, 3814);
|
||||||
|
add_location(li1, file, 110, 20, 3810);
|
||||||
|
attr_dev(button0, "class", "options-button");
|
||||||
|
add_location(button0, file, 114, 24, 4126);
|
||||||
|
attr_dev(a3, "href", "/" + /*locale*/ ctx[8] + "/groups");
|
||||||
|
add_location(a3, file, 116, 28, 4403);
|
||||||
|
attr_dev(a4, "href", "/" + /*locale*/ ctx[8] + "/communes");
|
||||||
|
add_location(a4, file, 117, 28, 4485);
|
||||||
|
attr_dev(a5, "href", "/" + /*locale*/ ctx[8] + "/cooperatives");
|
||||||
|
add_location(a5, file, 118, 28, 4571);
|
||||||
|
attr_dev(a6, "href", "/" + /*locale*/ ctx[8] + "/parties");
|
||||||
|
add_location(a6, file, 119, 28, 4665);
|
||||||
|
attr_dev(a7, "href", "/" + /*locale*/ ctx[8] + "/partners");
|
||||||
|
add_location(a7, file, 120, 28, 4749);
|
||||||
|
attr_dev(div0, "class", "options-dropdown");
|
||||||
|
add_location(div0, file, 115, 24, 4311);
|
||||||
|
attr_dev(li2, "id", "options-container");
|
||||||
|
add_location(li2, file, 113, 20, 4073);
|
||||||
|
attr_dev(a8, "href", "/" + /*locale*/ ctx[8] + "/profile");
|
||||||
|
add_location(a8, file, 123, 24, 4890);
|
||||||
|
add_location(li3, file, 123, 20, 4886);
|
||||||
|
attr_dev(source0, "srcset", "/img/common/globe.webp");
|
||||||
|
add_location(source0, file, 127, 32, 5184);
|
||||||
|
attr_dev(source1, "srcset", "/img/common/globe.png");
|
||||||
|
add_location(source1, file, 128, 32, 5258);
|
||||||
|
attr_dev(img1, "id", "locales-img");
|
||||||
|
attr_dev(img1, "alt", "globe");
|
||||||
|
add_location(img1, file, 129, 32, 5331);
|
||||||
|
add_location(picture, file, 126, 28, 5141);
|
||||||
|
add_location(button1, file, 125, 24, 5014);
|
||||||
|
attr_dev(li4, "id", "locales");
|
||||||
|
add_location(li4, file, 124, 20, 4971);
|
||||||
|
attr_dev(div1, "class", "options-dropdown");
|
||||||
|
add_location(div1, file, 133, 20, 5489);
|
||||||
|
attr_dev(ul, "id", "menu");
|
||||||
|
add_location(ul, file, 108, 16, 3690);
|
||||||
|
attr_dev(nav, "id", "nav");
|
||||||
|
add_location(nav, file, 107, 12, 3658);
|
||||||
|
attr_dev(header, "id", "navbar");
|
||||||
|
add_location(header, file, 97, 8, 3077);
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
insert_dev(target, header, anchor);
|
||||||
|
append_dev(header, input);
|
||||||
|
/*input_binding*/ ctx[12](input);
|
||||||
|
append_dev(header, t0);
|
||||||
|
append_dev(header, label);
|
||||||
|
append_dev(label, span0);
|
||||||
|
append_dev(header, t1);
|
||||||
|
append_dev(header, a0);
|
||||||
|
append_dev(a0, img0);
|
||||||
|
append_dev(a0, t2);
|
||||||
|
append_dev(a0, span1);
|
||||||
|
span1.innerHTML = raw_value;
|
||||||
|
/*span1_binding*/ ctx[13](span1);
|
||||||
|
append_dev(header, t3);
|
||||||
|
append_dev(header, nav);
|
||||||
|
append_dev(nav, ul);
|
||||||
|
append_dev(ul, li0);
|
||||||
|
append_dev(li0, a1);
|
||||||
|
append_dev(a1, t4);
|
||||||
|
append_dev(ul, t5);
|
||||||
|
append_dev(ul, li1);
|
||||||
|
append_dev(li1, a2);
|
||||||
|
append_dev(a2, t6);
|
||||||
|
append_dev(ul, t7);
|
||||||
|
append_dev(ul, li2);
|
||||||
|
append_dev(li2, button0);
|
||||||
|
append_dev(button0, t8);
|
||||||
|
append_dev(li2, t9);
|
||||||
|
append_dev(li2, div0);
|
||||||
|
append_dev(div0, a3);
|
||||||
|
append_dev(a3, t10);
|
||||||
|
append_dev(div0, t11);
|
||||||
|
append_dev(div0, a4);
|
||||||
|
append_dev(a4, t12);
|
||||||
|
append_dev(div0, t13);
|
||||||
|
append_dev(div0, a5);
|
||||||
|
append_dev(a5, t14);
|
||||||
|
append_dev(div0, t15);
|
||||||
|
append_dev(div0, a6);
|
||||||
|
append_dev(a6, t16);
|
||||||
|
append_dev(div0, t17);
|
||||||
|
append_dev(div0, a7);
|
||||||
|
append_dev(a7, t18);
|
||||||
|
/*div0_binding*/ ctx[16](div0);
|
||||||
|
append_dev(ul, t19);
|
||||||
|
append_dev(ul, li3);
|
||||||
|
append_dev(li3, a8);
|
||||||
|
append_dev(a8, t20);
|
||||||
|
append_dev(ul, t21);
|
||||||
|
append_dev(ul, li4);
|
||||||
|
append_dev(li4, button1);
|
||||||
|
append_dev(button1, picture);
|
||||||
|
append_dev(picture, source0);
|
||||||
|
append_dev(picture, t22);
|
||||||
|
append_dev(picture, source1);
|
||||||
|
append_dev(picture, t23);
|
||||||
|
append_dev(picture, img1);
|
||||||
|
append_dev(ul, t24);
|
||||||
|
append_dev(ul, div1);
|
||||||
|
|
||||||
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
||||||
|
each_blocks[i].m(div1, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*div1_binding*/ ctx[20](div1);
|
||||||
|
/*header_binding*/ ctx[21](header);
|
||||||
|
|
||||||
|
if (!mounted) {
|
||||||
|
dispose = [
|
||||||
|
listen_dev(input, "click", /*changeNavbar*/ ctx[9], false, false, false),
|
||||||
|
listen_dev(button0, "click", /*click_handler*/ ctx[14], false, false, false),
|
||||||
|
listen_dev(button0, "focusout", /*focusout_handler*/ ctx[15], false, false, false),
|
||||||
|
listen_dev(button1, "click", /*click_handler_1*/ ctx[17], false, false, false),
|
||||||
|
listen_dev(button1, "focusout", /*focusout_handler_1*/ ctx[18], false, false, false)
|
||||||
|
];
|
||||||
|
|
||||||
|
mounted = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
p: function update(ctx, dirty) {
|
||||||
|
if (dirty & /*$content*/ 32 && raw_value !== (raw_value = /*$content*/ ctx[5].orgName + "")) span1.innerHTML = raw_value; if (dirty & /*$content*/ 32 && t4_value !== (t4_value = /*$content*/ ctx[5].joinUs + "")) set_data_dev(t4, t4_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t6_value !== (t6_value = /*$content*/ ctx[5].manifesto + "")) set_data_dev(t6, t6_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t8_value !== (t8_value = /*$content*/ ctx[5].initiatives + "")) set_data_dev(t8, t8_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t10_value !== (t10_value = /*$content*/ ctx[5].groups + "")) set_data_dev(t10, t10_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t12_value !== (t12_value = /*$content*/ ctx[5].communes + "")) set_data_dev(t12, t12_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t14_value !== (t14_value = /*$content*/ ctx[5].cooperatives + "")) set_data_dev(t14, t14_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t16_value !== (t16_value = /*$content*/ ctx[5].parties + "")) set_data_dev(t16, t16_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t18_value !== (t18_value = /*$content*/ ctx[5].partners + "")) set_data_dev(t18, t18_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t20_value !== (t20_value = /*$content*/ ctx[5].profile + "")) set_data_dev(t20, t20_value);
|
||||||
|
|
||||||
|
if (dirty & /*changeLocale, Object, locales*/ 2048) {
|
||||||
|
each_value = Object.entries(locales);
|
||||||
|
validate_each_argument(each_value);
|
||||||
|
let i;
|
||||||
|
|
||||||
|
for (i = 0; i < each_value.length; i += 1) {
|
||||||
|
const child_ctx = get_each_context(ctx, each_value, i);
|
||||||
|
|
||||||
|
if (each_blocks[i]) {
|
||||||
|
each_blocks[i].p(child_ctx, dirty);
|
||||||
|
} else {
|
||||||
|
each_blocks[i] = create_each_block(child_ctx);
|
||||||
|
each_blocks[i].c();
|
||||||
|
each_blocks[i].m(div1, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; i < each_blocks.length; i += 1) {
|
||||||
|
each_blocks[i].d(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
each_blocks.length = each_value.length;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(header);
|
||||||
|
/*input_binding*/ ctx[12](null);
|
||||||
|
/*span1_binding*/ ctx[13](null);
|
||||||
|
/*div0_binding*/ ctx[16](null);
|
||||||
|
destroy_each(each_blocks, detaching);
|
||||||
|
/*div1_binding*/ ctx[20](null);
|
||||||
|
/*header_binding*/ ctx[21](null);
|
||||||
|
mounted = false;
|
||||||
|
run_all(dispose);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_if_block.name,
|
||||||
|
type: "if",
|
||||||
|
source: "(97:4) {#if Object.keys($content).length!=0}",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
// (135:24) {#each Object.entries(locales) as [loc,name]}
|
||||||
|
function create_each_block(ctx) {
|
||||||
|
let button;
|
||||||
|
let t_value = /*name*/ ctx[24] + "";
|
||||||
|
let t;
|
||||||
|
let mounted;
|
||||||
|
let dispose;
|
||||||
|
|
||||||
|
function click_handler_2() {
|
||||||
|
return /*click_handler_2*/ ctx[19](/*loc*/ ctx[23]);
|
||||||
|
}
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
button = element("button");
|
||||||
|
t = text(t_value);
|
||||||
|
add_location(button, file, 135, 28, 5648);
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
insert_dev(target, button, anchor);
|
||||||
|
append_dev(button, t);
|
||||||
|
|
||||||
|
if (!mounted) {
|
||||||
|
dispose = listen_dev(button, "click", click_handler_2, false, false, false);
|
||||||
|
mounted = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
p: function update(new_ctx, dirty) {
|
||||||
|
ctx = new_ctx;
|
||||||
|
},
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(button);
|
||||||
|
mounted = false;
|
||||||
|
dispose();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_each_block.name,
|
||||||
|
type: "each",
|
||||||
|
source: "(135:24) {#each Object.entries(locales) as [loc,name]}",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_fragment(ctx) {
|
||||||
|
let show_if = Object.keys(/*$content*/ ctx[5]).length != 0;
|
||||||
|
let if_block_anchor;
|
||||||
|
let if_block = show_if && create_if_block(ctx);
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
if (if_block) if_block.c();
|
||||||
|
if_block_anchor = empty();
|
||||||
|
this.c = noop;
|
||||||
|
},
|
||||||
|
l: function claim(nodes) {
|
||||||
|
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
if (if_block) if_block.m(target, anchor);
|
||||||
|
insert_dev(target, if_block_anchor, anchor);
|
||||||
|
},
|
||||||
|
p: function update(ctx, [dirty]) {
|
||||||
|
if (dirty & /*$content*/ 32) show_if = Object.keys(/*$content*/ ctx[5]).length != 0;
|
||||||
|
|
||||||
|
if (show_if) {
|
||||||
|
if (if_block) {
|
||||||
|
if_block.p(ctx, dirty);
|
||||||
|
} else {
|
||||||
|
if_block = create_if_block(ctx);
|
||||||
|
if_block.c();
|
||||||
|
if_block.m(if_block_anchor.parentNode, if_block_anchor);
|
||||||
|
}
|
||||||
|
} else if (if_block) {
|
||||||
|
if_block.d(1);
|
||||||
|
if_block = null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
i: noop,
|
||||||
|
o: noop,
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (if_block) if_block.d(detaching);
|
||||||
|
if (detaching) detach_dev(if_block_anchor);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_fragment.name,
|
||||||
|
type: "component",
|
||||||
|
source: "",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
function hide(dropdown) {
|
||||||
|
let callback = () => {
|
||||||
|
dropdown.style.display = "none";
|
||||||
|
};
|
||||||
|
|
||||||
|
setTimeout(callback, 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
function instance($$self, $$props, $$invalidate) {
|
||||||
|
let $content;
|
||||||
|
let { $$slots: slots = {}, $$scope } = $$props;
|
||||||
|
validate_slots('navbar-logged', slots, []);
|
||||||
|
let hambInput;
|
||||||
|
let navbar;
|
||||||
|
let localesDropdown;
|
||||||
|
let initiativesDropdown;
|
||||||
|
let loaded = writable(0);
|
||||||
|
let content = writable({});
|
||||||
|
validate_store(content, 'content');
|
||||||
|
component_subscribe($$self, content, value => $$invalidate(5, $content = value));
|
||||||
|
let logoText;
|
||||||
|
let locale = loadLocaleContent(content, "navbar-component", loaded);
|
||||||
|
|
||||||
|
function changeNavbar() {
|
||||||
|
if (hambInput.checked) {
|
||||||
|
$$invalidate(1, navbar.style.background = "white", navbar);
|
||||||
|
} else {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
$$invalidate(1, navbar.style.position = "relative", navbar);
|
||||||
|
$$invalidate(1, navbar.style.background = "", navbar);
|
||||||
|
$$invalidate(1, navbar.style.boxShadow = "", navbar);
|
||||||
|
},
|
||||||
|
510
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function showDropdown(dropdown) {
|
||||||
|
let state = dropdown.style.display;
|
||||||
|
$$invalidate(3, initiativesDropdown.style.display = "none", initiativesDropdown);
|
||||||
|
$$invalidate(2, localesDropdown.style.display = "none", localesDropdown);
|
||||||
|
|
||||||
|
if (state == "block") {
|
||||||
|
dropdown.style.display = "none";
|
||||||
|
} else {
|
||||||
|
dropdown.style.display = "block";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeLocale(lang) {
|
||||||
|
localStorage.setItem("locale", lang);
|
||||||
|
let locSplit = location.href.split("/");
|
||||||
|
let localesSymbols = Object.keys(locales);
|
||||||
|
locSplit = locSplit.filter(x => !localesSymbols.includes(x));
|
||||||
|
let loc = locSplit.slice(0, locSplit.length - 1).join("/") + "/" + lang + "/" + locSplit[locSplit.length - 1];
|
||||||
|
location.href = loc;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fixHeading() {
|
||||||
|
if (locale == "ru") {
|
||||||
|
let func = () => {
|
||||||
|
if (logoText == undefined) {
|
||||||
|
setTimeout(func, 100);
|
||||||
|
} else {
|
||||||
|
if ((window.innerWidth < 1700 && window.innerWidth > 1400 || window.innerWidth < 400) && logoText.style.lineHeight != "100%") {
|
||||||
|
$$invalidate(4, logoText.style.lineHeight = "120%", logoText);
|
||||||
|
$$invalidate(4, logoText.style.top = "1rem", logoText);
|
||||||
|
$$invalidate(4, logoText.style.width = "16rem", logoText);
|
||||||
|
} else if ((window.innerWidth > 1700 || window.innerWidth > 400 && window.innerWidth < 1400) && logoText.style.lineHeight != "400%") {
|
||||||
|
$$invalidate(4, logoText.style.lineHeight = "400%", logoText);
|
||||||
|
$$invalidate(4, logoText.style.top = "0rem", logoText);
|
||||||
|
$$invalidate(4, logoText.style.width = "auto", logoText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
func();
|
||||||
|
addEventListener("resize", func);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
fixHeading();
|
||||||
|
});
|
||||||
|
|
||||||
|
const writable_props = [];
|
||||||
|
|
||||||
|
Object_1.keys($$props).forEach(key => {
|
||||||
|
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console.warn(`<navbar-logged> was created with unknown prop '${key}'`);
|
||||||
|
});
|
||||||
|
|
||||||
|
function input_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
hambInput = $$value;
|
||||||
|
$$invalidate(0, hambInput);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function span1_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
logoText = $$value;
|
||||||
|
$$invalidate(4, logoText);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const click_handler = () => showDropdown(initiativesDropdown);
|
||||||
|
const focusout_handler = () => hide(initiativesDropdown);
|
||||||
|
|
||||||
|
function div0_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
initiativesDropdown = $$value;
|
||||||
|
$$invalidate(3, initiativesDropdown);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const click_handler_1 = () => showDropdown(localesDropdown);
|
||||||
|
const focusout_handler_1 = () => hide(localesDropdown);
|
||||||
|
const click_handler_2 = loc => changeLocale(loc);
|
||||||
|
|
||||||
|
function div1_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
localesDropdown = $$value;
|
||||||
|
$$invalidate(2, localesDropdown);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function header_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
navbar = $$value;
|
||||||
|
$$invalidate(1, navbar);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$$self.$capture_state = () => ({
|
||||||
|
onMount,
|
||||||
|
getContext,
|
||||||
|
writable,
|
||||||
|
loadLocaleContent,
|
||||||
|
locales,
|
||||||
|
hambInput,
|
||||||
|
navbar,
|
||||||
|
localesDropdown,
|
||||||
|
initiativesDropdown,
|
||||||
|
loaded,
|
||||||
|
content,
|
||||||
|
logoText,
|
||||||
|
locale,
|
||||||
|
changeNavbar,
|
||||||
|
showDropdown,
|
||||||
|
changeLocale,
|
||||||
|
fixHeading,
|
||||||
|
hide,
|
||||||
|
$content
|
||||||
|
});
|
||||||
|
|
||||||
|
$$self.$inject_state = $$props => {
|
||||||
|
if ('hambInput' in $$props) $$invalidate(0, hambInput = $$props.hambInput);
|
||||||
|
if ('navbar' in $$props) $$invalidate(1, navbar = $$props.navbar);
|
||||||
|
if ('localesDropdown' in $$props) $$invalidate(2, localesDropdown = $$props.localesDropdown);
|
||||||
|
if ('initiativesDropdown' in $$props) $$invalidate(3, initiativesDropdown = $$props.initiativesDropdown);
|
||||||
|
if ('loaded' in $$props) $$invalidate(6, loaded = $$props.loaded);
|
||||||
|
if ('content' in $$props) $$invalidate(7, content = $$props.content);
|
||||||
|
if ('logoText' in $$props) $$invalidate(4, logoText = $$props.logoText);
|
||||||
|
if ('locale' in $$props) $$invalidate(8, locale = $$props.locale);
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($$props && "$$inject" in $$props) {
|
||||||
|
$$self.$inject_state($$props.$$inject);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
hambInput,
|
||||||
|
navbar,
|
||||||
|
localesDropdown,
|
||||||
|
initiativesDropdown,
|
||||||
|
logoText,
|
||||||
|
$content,
|
||||||
|
loaded,
|
||||||
|
content,
|
||||||
|
locale,
|
||||||
|
changeNavbar,
|
||||||
|
showDropdown,
|
||||||
|
changeLocale,
|
||||||
|
input_binding,
|
||||||
|
span1_binding,
|
||||||
|
click_handler,
|
||||||
|
focusout_handler,
|
||||||
|
div0_binding,
|
||||||
|
click_handler_1,
|
||||||
|
focusout_handler_1,
|
||||||
|
click_handler_2,
|
||||||
|
div1_binding,
|
||||||
|
header_binding
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
class Navbar_logged extends SvelteElement {
|
||||||
|
constructor(options) {
|
||||||
|
super();
|
||||||
|
this.shadowRoot.innerHTML = `<style>@import '/css/common.css';#navbar{position:relative;top:0;width:min(100%,116rem);z-index:1000000000;height:5.26rem;padding-left:0rem;padding-right:0rem}#navbar *{font-family:var(--sans-serif, sans-serif)}#logo-container{display:flex;position:absolute;margin-left:1rem;height:100%;max-height:5.26rem;color:black;z-index:1;flex-direction:row;flex-wrap:nowrap;align-items:center}#navbar-logo{height:3.5rem;width:3.5rem;object-fit:contain;border-radius:10rem}#navbar-logo-text{position:relative;word-wrap:normal;height:100%;line-height:400%;font-size:1.4rem;color:#292222;font-family:var(--sans-serif, sans-serif);font-weight:400;padding-left:1.2rem}#nav{position:fixed;width:100%;height:100%;background-color:white;overflow:hidden;z-index:0}#menu>li>a,.options-button{display:block;padding:1.2rem;padding-top:1rem;padding-bottom:1rem;color:black;font-size:1.4rem}#menu>li>a:active{background-color:#f7aec0}#menu li{list-style-type:none}#nav{max-height:0}#hamb{position:absolute;cursor:pointer;right:0rem;padding:2.8rem 2rem;z-index:9999}#hamb-line{background:black;display:block;height:2px;position:relative;width:24px}#hamb-line::before,#hamb-line::after{background:black;content:'';display:block;height:100%;position:absolute;transition:all .2s ease-out;width:100%}#hamb-line::before{top:5px}#hamb-line::after{top:-5px}#side-menu{display:none}#side-menu:checked~nav{display:block;max-height:100%;padding-top:5.625rem}#side-menu:checked~#logo-container{position:fixed}#side-menu:checked~#hamb{position:fixed}#side-menu:checked~#logo-container{position:fixed}#side-menu:checked~#hamb #hamb-line{background:transparent}#side-menu:checked~#hamb #hamb-line::before{transform:rotate(-45deg);top:0}#side-menu:checked~#hamb #hamb-line::after{transform:rotate(45deg);top:0}.options-dropdown{position:absolute;display:none;top:5.6rem;right:1.8rem;border:#404040 solid 0.1rem;background-color:white;z-index:10}.options-dropdown button,.options-dropdown a{display:block;font-family:var(--sans-serif,sans-serif);font-size:1.2rem;width:100%;padding:1rem;text-align:left}.options-dropdown button:hover,.options-dropdown a:hover{background-color:var(--red);color:white}.options-button{width:100%;text-align:left}#locales{position:relative}#locales button{width:100%;text-align:left;height:4rem}#locales button:hover{opacity:0.5}#locales-img{position:relative;top:0rem;height:2rem;margin-left:1.2rem}@media only screen and (min-width: 1200px){#navbar{position:relative;width:min(100%,116rem);left:50%;transform:translateX(-50%);padding-right:4rem;padding-left:4rem}#nav{max-height:none;top:0;position:relative;float:right;width:fit-content;background-color:transparent;overflow:visible}#side-menu:checked~nav{padding-top:0}#menu li{float:left}#menu>li>a:hover,.options-button:hover,#navbar-logo-text:hover{color:rgb(127, 127, 127)}#menu>li>a,.options-button{padding:0.9rem;padding-top:1.9rem;padding-bottom:1.9rem}#hamb{display:none}#locales{position:relative;margin-right:1.8rem}#locales-img{top:0.9rem}}</style>`;
|
||||||
|
|
||||||
|
init(
|
||||||
|
this,
|
||||||
|
{
|
||||||
|
target: this.shadowRoot,
|
||||||
|
props: attribute_to_object(this.attributes),
|
||||||
|
customElement: true
|
||||||
|
},
|
||||||
|
instance,
|
||||||
|
create_fragment,
|
||||||
|
safe_not_equal,
|
||||||
|
{},
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
if (options) {
|
||||||
|
if (options.target) {
|
||||||
|
insert_dev(options.target, this, options.anchor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
customElements.define("navbar-logged", Navbar_logged);
|
||||||
|
|
||||||
|
export { Navbar_logged as default };
|
|
@ -0,0 +1,687 @@
|
||||||
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
import { S as SvelteElement, i as init, a as attribute_to_object, b as insert_dev, s as safe_not_equal, d as dispatch_dev, v as validate_slots, w as validate_store, x as component_subscribe, o as onMount, g as getContext, e as globals, A as validate_each_argument, y as empty, n as noop, p as detach_dev, q as binding_callbacks, f as element, h as space, B as text, k as attr_dev, j as add_location, u as src_url_equal, l as append_dev, m as listen_dev, C as set_data_dev, D as destroy_each, r as run_all } from './index-998178c7.js';
|
||||||
|
import { w as writable } from './index-f9998ce7.js';
|
||||||
|
import { loadLocaleContent, locales } from '../../../../../../../../../js/libraries/serverTools.js';
|
||||||
|
|
||||||
|
/* src\navbar\navbar-not-logged.svelte generated by Svelte v3.52.0 */
|
||||||
|
|
||||||
|
const { Object: Object_1 } = globals;
|
||||||
|
const file = "src\\navbar\\navbar-not-logged.svelte";
|
||||||
|
|
||||||
|
function get_each_context(ctx, list, i) {
|
||||||
|
const child_ctx = ctx.slice();
|
||||||
|
child_ctx[23] = list[i][0];
|
||||||
|
child_ctx[24] = list[i][1];
|
||||||
|
return child_ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
// (97:4) {#if Object.keys($content).length!=0}
|
||||||
|
function create_if_block(ctx) {
|
||||||
|
let header;
|
||||||
|
let input;
|
||||||
|
let t0;
|
||||||
|
let label;
|
||||||
|
let span0;
|
||||||
|
let t1;
|
||||||
|
let a0;
|
||||||
|
let img0;
|
||||||
|
let img0_src_value;
|
||||||
|
let t2;
|
||||||
|
let span1;
|
||||||
|
let raw_value = /*$content*/ ctx[5].orgName + "";
|
||||||
|
let t3;
|
||||||
|
let nav;
|
||||||
|
let ul;
|
||||||
|
let li0;
|
||||||
|
let a1;
|
||||||
|
let t4_value = /*$content*/ ctx[5].joinUs + "";
|
||||||
|
let t4;
|
||||||
|
let t5;
|
||||||
|
let li1;
|
||||||
|
let a2;
|
||||||
|
let t6_value = /*$content*/ ctx[5].manifesto + "";
|
||||||
|
let t6;
|
||||||
|
let t7;
|
||||||
|
let li2;
|
||||||
|
let button0;
|
||||||
|
let t8_value = /*$content*/ ctx[5].initiatives + "";
|
||||||
|
let t8;
|
||||||
|
let t9;
|
||||||
|
let div0;
|
||||||
|
let a3;
|
||||||
|
let t10_value = /*$content*/ ctx[5].groups + "";
|
||||||
|
let t10;
|
||||||
|
let t11;
|
||||||
|
let a4;
|
||||||
|
let t12_value = /*$content*/ ctx[5].communes + "";
|
||||||
|
let t12;
|
||||||
|
let t13;
|
||||||
|
let a5;
|
||||||
|
let t14_value = /*$content*/ ctx[5].cooperatives + "";
|
||||||
|
let t14;
|
||||||
|
let t15;
|
||||||
|
let a6;
|
||||||
|
let t16_value = /*$content*/ ctx[5].parties + "";
|
||||||
|
let t16;
|
||||||
|
let t17;
|
||||||
|
let a7;
|
||||||
|
let t18_value = /*$content*/ ctx[5].partners + "";
|
||||||
|
let t18;
|
||||||
|
let t19;
|
||||||
|
let li3;
|
||||||
|
let a8;
|
||||||
|
let t20_value = /*$content*/ ctx[5].login + "";
|
||||||
|
let t20;
|
||||||
|
let t21;
|
||||||
|
let li4;
|
||||||
|
let button1;
|
||||||
|
let picture;
|
||||||
|
let source0;
|
||||||
|
let t22;
|
||||||
|
let source1;
|
||||||
|
let t23;
|
||||||
|
let img1;
|
||||||
|
let t24;
|
||||||
|
let div1;
|
||||||
|
let mounted;
|
||||||
|
let dispose;
|
||||||
|
let each_value = Object.entries(locales);
|
||||||
|
validate_each_argument(each_value);
|
||||||
|
let each_blocks = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < each_value.length; i += 1) {
|
||||||
|
each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i));
|
||||||
|
}
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
header = element("header");
|
||||||
|
input = element("input");
|
||||||
|
t0 = space();
|
||||||
|
label = element("label");
|
||||||
|
span0 = element("span");
|
||||||
|
t1 = space();
|
||||||
|
a0 = element("a");
|
||||||
|
img0 = element("img");
|
||||||
|
t2 = space();
|
||||||
|
span1 = element("span");
|
||||||
|
t3 = space();
|
||||||
|
nav = element("nav");
|
||||||
|
ul = element("ul");
|
||||||
|
li0 = element("li");
|
||||||
|
a1 = element("a");
|
||||||
|
t4 = text(t4_value);
|
||||||
|
t5 = space();
|
||||||
|
li1 = element("li");
|
||||||
|
a2 = element("a");
|
||||||
|
t6 = text(t6_value);
|
||||||
|
t7 = space();
|
||||||
|
li2 = element("li");
|
||||||
|
button0 = element("button");
|
||||||
|
t8 = text(t8_value);
|
||||||
|
t9 = space();
|
||||||
|
div0 = element("div");
|
||||||
|
a3 = element("a");
|
||||||
|
t10 = text(t10_value);
|
||||||
|
t11 = space();
|
||||||
|
a4 = element("a");
|
||||||
|
t12 = text(t12_value);
|
||||||
|
t13 = space();
|
||||||
|
a5 = element("a");
|
||||||
|
t14 = text(t14_value);
|
||||||
|
t15 = space();
|
||||||
|
a6 = element("a");
|
||||||
|
t16 = text(t16_value);
|
||||||
|
t17 = space();
|
||||||
|
a7 = element("a");
|
||||||
|
t18 = text(t18_value);
|
||||||
|
t19 = space();
|
||||||
|
li3 = element("li");
|
||||||
|
a8 = element("a");
|
||||||
|
t20 = text(t20_value);
|
||||||
|
t21 = space();
|
||||||
|
li4 = element("li");
|
||||||
|
button1 = element("button");
|
||||||
|
picture = element("picture");
|
||||||
|
source0 = element("source");
|
||||||
|
t22 = space();
|
||||||
|
source1 = element("source");
|
||||||
|
t23 = space();
|
||||||
|
img1 = element("img");
|
||||||
|
t24 = space();
|
||||||
|
div1 = element("div");
|
||||||
|
|
||||||
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
||||||
|
each_blocks[i].c();
|
||||||
|
}
|
||||||
|
|
||||||
|
attr_dev(input, "type", "checkbox");
|
||||||
|
attr_dev(input, "id", "side-menu");
|
||||||
|
add_location(input, file, 99, 12, 3171);
|
||||||
|
attr_dev(span0, "id", "hamb-line");
|
||||||
|
add_location(span0, file, 100, 45, 3302);
|
||||||
|
attr_dev(label, "id", "hamb");
|
||||||
|
attr_dev(label, "for", "side-menu");
|
||||||
|
add_location(label, file, 100, 12, 3269);
|
||||||
|
if (!src_url_equal(img0.src, img0_src_value = "/img/common/flag.png")) attr_dev(img0, "src", img0_src_value);
|
||||||
|
attr_dev(img0, "id", "navbar-logo");
|
||||||
|
attr_dev(img0, "alt", "logo");
|
||||||
|
add_location(img0, file, 103, 16, 3444);
|
||||||
|
attr_dev(span1, "id", "navbar-logo-text");
|
||||||
|
add_location(span1, file, 104, 16, 3522);
|
||||||
|
attr_dev(a0, "id", "logo-container");
|
||||||
|
attr_dev(a0, "href", "/" + /*locale*/ ctx[8] + "/");
|
||||||
|
add_location(a0, file, 102, 12, 3379);
|
||||||
|
attr_dev(a1, "href", "/" + /*locale*/ ctx[8] + "/join-us");
|
||||||
|
add_location(a1, file, 109, 24, 3734);
|
||||||
|
add_location(li0, file, 109, 20, 3730);
|
||||||
|
attr_dev(a2, "href", "/" + /*locale*/ ctx[8] + "/manifesto");
|
||||||
|
add_location(a2, file, 110, 24, 3818);
|
||||||
|
add_location(li1, file, 110, 20, 3814);
|
||||||
|
attr_dev(button0, "class", "options-button");
|
||||||
|
add_location(button0, file, 114, 24, 4130);
|
||||||
|
attr_dev(a3, "href", "/" + /*locale*/ ctx[8] + "/groups");
|
||||||
|
add_location(a3, file, 116, 28, 4407);
|
||||||
|
attr_dev(a4, "href", "/" + /*locale*/ ctx[8] + "/communes");
|
||||||
|
add_location(a4, file, 117, 28, 4489);
|
||||||
|
attr_dev(a5, "href", "/" + /*locale*/ ctx[8] + "/cooperatives");
|
||||||
|
add_location(a5, file, 118, 28, 4575);
|
||||||
|
attr_dev(a6, "href", "/" + /*locale*/ ctx[8] + "/parties");
|
||||||
|
add_location(a6, file, 119, 28, 4669);
|
||||||
|
attr_dev(a7, "href", "/" + /*locale*/ ctx[8] + "/partners");
|
||||||
|
add_location(a7, file, 120, 28, 4753);
|
||||||
|
attr_dev(div0, "class", "options-dropdown");
|
||||||
|
add_location(div0, file, 115, 24, 4315);
|
||||||
|
attr_dev(li2, "id", "options-container");
|
||||||
|
add_location(li2, file, 113, 20, 4077);
|
||||||
|
attr_dev(a8, "href", "/" + /*locale*/ ctx[8] + "/auth");
|
||||||
|
add_location(a8, file, 123, 24, 4894);
|
||||||
|
add_location(li3, file, 123, 20, 4890);
|
||||||
|
attr_dev(source0, "srcset", "/img/common/globe.webp");
|
||||||
|
add_location(source0, file, 127, 32, 5183);
|
||||||
|
attr_dev(source1, "srcset", "/img/common/globe.png");
|
||||||
|
add_location(source1, file, 128, 32, 5257);
|
||||||
|
attr_dev(img1, "id", "locales-img");
|
||||||
|
attr_dev(img1, "alt", "globe");
|
||||||
|
add_location(img1, file, 129, 32, 5330);
|
||||||
|
add_location(picture, file, 126, 28, 5140);
|
||||||
|
add_location(button1, file, 125, 24, 5013);
|
||||||
|
attr_dev(li4, "id", "locales");
|
||||||
|
add_location(li4, file, 124, 20, 4970);
|
||||||
|
attr_dev(div1, "class", "options-dropdown");
|
||||||
|
add_location(div1, file, 133, 20, 5488);
|
||||||
|
attr_dev(ul, "id", "menu");
|
||||||
|
add_location(ul, file, 108, 16, 3694);
|
||||||
|
attr_dev(nav, "id", "nav");
|
||||||
|
add_location(nav, file, 107, 12, 3662);
|
||||||
|
attr_dev(header, "id", "navbar");
|
||||||
|
add_location(header, file, 97, 8, 3081);
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
insert_dev(target, header, anchor);
|
||||||
|
append_dev(header, input);
|
||||||
|
/*input_binding*/ ctx[12](input);
|
||||||
|
append_dev(header, t0);
|
||||||
|
append_dev(header, label);
|
||||||
|
append_dev(label, span0);
|
||||||
|
append_dev(header, t1);
|
||||||
|
append_dev(header, a0);
|
||||||
|
append_dev(a0, img0);
|
||||||
|
append_dev(a0, t2);
|
||||||
|
append_dev(a0, span1);
|
||||||
|
span1.innerHTML = raw_value;
|
||||||
|
/*span1_binding*/ ctx[13](span1);
|
||||||
|
append_dev(header, t3);
|
||||||
|
append_dev(header, nav);
|
||||||
|
append_dev(nav, ul);
|
||||||
|
append_dev(ul, li0);
|
||||||
|
append_dev(li0, a1);
|
||||||
|
append_dev(a1, t4);
|
||||||
|
append_dev(ul, t5);
|
||||||
|
append_dev(ul, li1);
|
||||||
|
append_dev(li1, a2);
|
||||||
|
append_dev(a2, t6);
|
||||||
|
append_dev(ul, t7);
|
||||||
|
append_dev(ul, li2);
|
||||||
|
append_dev(li2, button0);
|
||||||
|
append_dev(button0, t8);
|
||||||
|
append_dev(li2, t9);
|
||||||
|
append_dev(li2, div0);
|
||||||
|
append_dev(div0, a3);
|
||||||
|
append_dev(a3, t10);
|
||||||
|
append_dev(div0, t11);
|
||||||
|
append_dev(div0, a4);
|
||||||
|
append_dev(a4, t12);
|
||||||
|
append_dev(div0, t13);
|
||||||
|
append_dev(div0, a5);
|
||||||
|
append_dev(a5, t14);
|
||||||
|
append_dev(div0, t15);
|
||||||
|
append_dev(div0, a6);
|
||||||
|
append_dev(a6, t16);
|
||||||
|
append_dev(div0, t17);
|
||||||
|
append_dev(div0, a7);
|
||||||
|
append_dev(a7, t18);
|
||||||
|
/*div0_binding*/ ctx[16](div0);
|
||||||
|
append_dev(ul, t19);
|
||||||
|
append_dev(ul, li3);
|
||||||
|
append_dev(li3, a8);
|
||||||
|
append_dev(a8, t20);
|
||||||
|
append_dev(ul, t21);
|
||||||
|
append_dev(ul, li4);
|
||||||
|
append_dev(li4, button1);
|
||||||
|
append_dev(button1, picture);
|
||||||
|
append_dev(picture, source0);
|
||||||
|
append_dev(picture, t22);
|
||||||
|
append_dev(picture, source1);
|
||||||
|
append_dev(picture, t23);
|
||||||
|
append_dev(picture, img1);
|
||||||
|
append_dev(ul, t24);
|
||||||
|
append_dev(ul, div1);
|
||||||
|
|
||||||
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
||||||
|
each_blocks[i].m(div1, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*div1_binding*/ ctx[20](div1);
|
||||||
|
/*header_binding*/ ctx[21](header);
|
||||||
|
|
||||||
|
if (!mounted) {
|
||||||
|
dispose = [
|
||||||
|
listen_dev(input, "click", /*changeNavbar*/ ctx[9], false, false, false),
|
||||||
|
listen_dev(button0, "click", /*click_handler*/ ctx[14], false, false, false),
|
||||||
|
listen_dev(button0, "focusout", /*focusout_handler*/ ctx[15], false, false, false),
|
||||||
|
listen_dev(button1, "click", /*click_handler_1*/ ctx[17], false, false, false),
|
||||||
|
listen_dev(button1, "focusout", /*focusout_handler_1*/ ctx[18], false, false, false)
|
||||||
|
];
|
||||||
|
|
||||||
|
mounted = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
p: function update(ctx, dirty) {
|
||||||
|
if (dirty & /*$content*/ 32 && raw_value !== (raw_value = /*$content*/ ctx[5].orgName + "")) span1.innerHTML = raw_value; if (dirty & /*$content*/ 32 && t4_value !== (t4_value = /*$content*/ ctx[5].joinUs + "")) set_data_dev(t4, t4_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t6_value !== (t6_value = /*$content*/ ctx[5].manifesto + "")) set_data_dev(t6, t6_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t8_value !== (t8_value = /*$content*/ ctx[5].initiatives + "")) set_data_dev(t8, t8_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t10_value !== (t10_value = /*$content*/ ctx[5].groups + "")) set_data_dev(t10, t10_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t12_value !== (t12_value = /*$content*/ ctx[5].communes + "")) set_data_dev(t12, t12_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t14_value !== (t14_value = /*$content*/ ctx[5].cooperatives + "")) set_data_dev(t14, t14_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t16_value !== (t16_value = /*$content*/ ctx[5].parties + "")) set_data_dev(t16, t16_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t18_value !== (t18_value = /*$content*/ ctx[5].partners + "")) set_data_dev(t18, t18_value);
|
||||||
|
if (dirty & /*$content*/ 32 && t20_value !== (t20_value = /*$content*/ ctx[5].login + "")) set_data_dev(t20, t20_value);
|
||||||
|
|
||||||
|
if (dirty & /*changeLocale, Object, locales*/ 2048) {
|
||||||
|
each_value = Object.entries(locales);
|
||||||
|
validate_each_argument(each_value);
|
||||||
|
let i;
|
||||||
|
|
||||||
|
for (i = 0; i < each_value.length; i += 1) {
|
||||||
|
const child_ctx = get_each_context(ctx, each_value, i);
|
||||||
|
|
||||||
|
if (each_blocks[i]) {
|
||||||
|
each_blocks[i].p(child_ctx, dirty);
|
||||||
|
} else {
|
||||||
|
each_blocks[i] = create_each_block(child_ctx);
|
||||||
|
each_blocks[i].c();
|
||||||
|
each_blocks[i].m(div1, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; i < each_blocks.length; i += 1) {
|
||||||
|
each_blocks[i].d(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
each_blocks.length = each_value.length;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(header);
|
||||||
|
/*input_binding*/ ctx[12](null);
|
||||||
|
/*span1_binding*/ ctx[13](null);
|
||||||
|
/*div0_binding*/ ctx[16](null);
|
||||||
|
destroy_each(each_blocks, detaching);
|
||||||
|
/*div1_binding*/ ctx[20](null);
|
||||||
|
/*header_binding*/ ctx[21](null);
|
||||||
|
mounted = false;
|
||||||
|
run_all(dispose);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_if_block.name,
|
||||||
|
type: "if",
|
||||||
|
source: "(97:4) {#if Object.keys($content).length!=0}",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
// (135:24) {#each Object.entries(locales) as [loc,name]}
|
||||||
|
function create_each_block(ctx) {
|
||||||
|
let button;
|
||||||
|
let t_value = /*name*/ ctx[24] + "";
|
||||||
|
let t;
|
||||||
|
let mounted;
|
||||||
|
let dispose;
|
||||||
|
|
||||||
|
function click_handler_2() {
|
||||||
|
return /*click_handler_2*/ ctx[19](/*loc*/ ctx[23]);
|
||||||
|
}
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
button = element("button");
|
||||||
|
t = text(t_value);
|
||||||
|
add_location(button, file, 135, 28, 5647);
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
insert_dev(target, button, anchor);
|
||||||
|
append_dev(button, t);
|
||||||
|
|
||||||
|
if (!mounted) {
|
||||||
|
dispose = listen_dev(button, "click", click_handler_2, false, false, false);
|
||||||
|
mounted = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
p: function update(new_ctx, dirty) {
|
||||||
|
ctx = new_ctx;
|
||||||
|
},
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(button);
|
||||||
|
mounted = false;
|
||||||
|
dispose();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_each_block.name,
|
||||||
|
type: "each",
|
||||||
|
source: "(135:24) {#each Object.entries(locales) as [loc,name]}",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_fragment(ctx) {
|
||||||
|
let show_if = Object.keys(/*$content*/ ctx[5]).length != 0;
|
||||||
|
let if_block_anchor;
|
||||||
|
let if_block = show_if && create_if_block(ctx);
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
if (if_block) if_block.c();
|
||||||
|
if_block_anchor = empty();
|
||||||
|
this.c = noop;
|
||||||
|
},
|
||||||
|
l: function claim(nodes) {
|
||||||
|
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
if (if_block) if_block.m(target, anchor);
|
||||||
|
insert_dev(target, if_block_anchor, anchor);
|
||||||
|
},
|
||||||
|
p: function update(ctx, [dirty]) {
|
||||||
|
if (dirty & /*$content*/ 32) show_if = Object.keys(/*$content*/ ctx[5]).length != 0;
|
||||||
|
|
||||||
|
if (show_if) {
|
||||||
|
if (if_block) {
|
||||||
|
if_block.p(ctx, dirty);
|
||||||
|
} else {
|
||||||
|
if_block = create_if_block(ctx);
|
||||||
|
if_block.c();
|
||||||
|
if_block.m(if_block_anchor.parentNode, if_block_anchor);
|
||||||
|
}
|
||||||
|
} else if (if_block) {
|
||||||
|
if_block.d(1);
|
||||||
|
if_block = null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
i: noop,
|
||||||
|
o: noop,
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (if_block) if_block.d(detaching);
|
||||||
|
if (detaching) detach_dev(if_block_anchor);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_fragment.name,
|
||||||
|
type: "component",
|
||||||
|
source: "",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
function hide(dropdown) {
|
||||||
|
let callback = () => {
|
||||||
|
dropdown.style.display = "none";
|
||||||
|
};
|
||||||
|
|
||||||
|
setTimeout(callback, 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
function instance($$self, $$props, $$invalidate) {
|
||||||
|
let $content;
|
||||||
|
let { $$slots: slots = {}, $$scope } = $$props;
|
||||||
|
validate_slots('navbar-not-logged', slots, []);
|
||||||
|
let hambInput;
|
||||||
|
let navbar;
|
||||||
|
let localesDropdown;
|
||||||
|
let initiativesDropdown;
|
||||||
|
let loaded = writable(0);
|
||||||
|
let content = writable({});
|
||||||
|
validate_store(content, 'content');
|
||||||
|
component_subscribe($$self, content, value => $$invalidate(5, $content = value));
|
||||||
|
let logoText;
|
||||||
|
let locale = loadLocaleContent(content, "navbar-component", loaded);
|
||||||
|
|
||||||
|
function changeNavbar() {
|
||||||
|
if (hambInput.checked) {
|
||||||
|
$$invalidate(1, navbar.style.background = "white", navbar);
|
||||||
|
} else {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
$$invalidate(1, navbar.style.position = "relative", navbar);
|
||||||
|
$$invalidate(1, navbar.style.background = "", navbar);
|
||||||
|
$$invalidate(1, navbar.style.boxShadow = "", navbar);
|
||||||
|
},
|
||||||
|
510
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function showDropdown(dropdown) {
|
||||||
|
let state = dropdown.style.display;
|
||||||
|
$$invalidate(3, initiativesDropdown.style.display = "none", initiativesDropdown);
|
||||||
|
$$invalidate(2, localesDropdown.style.display = "none", localesDropdown);
|
||||||
|
|
||||||
|
if (state == "block") {
|
||||||
|
dropdown.style.display = "none";
|
||||||
|
} else {
|
||||||
|
dropdown.style.display = "block";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeLocale(lang) {
|
||||||
|
localStorage.setItem("locale", lang);
|
||||||
|
let locSplit = location.href.split("/");
|
||||||
|
let localesSymbols = Object.keys(locales);
|
||||||
|
locSplit = locSplit.filter(x => !localesSymbols.includes(x));
|
||||||
|
let loc = locSplit.slice(0, locSplit.length - 1).join("/") + "/" + lang + "/" + locSplit[locSplit.length - 1];
|
||||||
|
location.href = loc;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fixHeading() {
|
||||||
|
if (locale == "ru") {
|
||||||
|
let func = () => {
|
||||||
|
if (logoText == undefined) {
|
||||||
|
setTimeout(func, 100);
|
||||||
|
} else {
|
||||||
|
if ((window.innerWidth < 1700 && window.innerWidth > 1400 || window.innerWidth < 400) && logoText.style.lineHeight != "100%") {
|
||||||
|
$$invalidate(4, logoText.style.lineHeight = "120%", logoText);
|
||||||
|
$$invalidate(4, logoText.style.top = "1rem", logoText);
|
||||||
|
$$invalidate(4, logoText.style.width = "16rem", logoText);
|
||||||
|
} else if ((window.innerWidth > 1700 || window.innerWidth > 400 && window.innerWidth < 1400) && logoText.style.lineHeight != "400%") {
|
||||||
|
$$invalidate(4, logoText.style.lineHeight = "400%", logoText);
|
||||||
|
$$invalidate(4, logoText.style.top = "0rem", logoText);
|
||||||
|
$$invalidate(4, logoText.style.width = "auto", logoText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
func();
|
||||||
|
addEventListener("resize", func);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
fixHeading();
|
||||||
|
});
|
||||||
|
|
||||||
|
const writable_props = [];
|
||||||
|
|
||||||
|
Object_1.keys($$props).forEach(key => {
|
||||||
|
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console.warn(`<navbar-not-logged> was created with unknown prop '${key}'`);
|
||||||
|
});
|
||||||
|
|
||||||
|
function input_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
hambInput = $$value;
|
||||||
|
$$invalidate(0, hambInput);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function span1_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
logoText = $$value;
|
||||||
|
$$invalidate(4, logoText);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const click_handler = () => showDropdown(initiativesDropdown);
|
||||||
|
const focusout_handler = () => hide(initiativesDropdown);
|
||||||
|
|
||||||
|
function div0_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
initiativesDropdown = $$value;
|
||||||
|
$$invalidate(3, initiativesDropdown);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const click_handler_1 = () => showDropdown(localesDropdown);
|
||||||
|
const focusout_handler_1 = () => hide(localesDropdown);
|
||||||
|
const click_handler_2 = loc => changeLocale(loc);
|
||||||
|
|
||||||
|
function div1_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
localesDropdown = $$value;
|
||||||
|
$$invalidate(2, localesDropdown);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function header_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
navbar = $$value;
|
||||||
|
$$invalidate(1, navbar);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$$self.$capture_state = () => ({
|
||||||
|
onMount,
|
||||||
|
getContext,
|
||||||
|
writable,
|
||||||
|
loadLocaleContent,
|
||||||
|
locales,
|
||||||
|
hambInput,
|
||||||
|
navbar,
|
||||||
|
localesDropdown,
|
||||||
|
initiativesDropdown,
|
||||||
|
loaded,
|
||||||
|
content,
|
||||||
|
logoText,
|
||||||
|
locale,
|
||||||
|
changeNavbar,
|
||||||
|
showDropdown,
|
||||||
|
changeLocale,
|
||||||
|
fixHeading,
|
||||||
|
hide,
|
||||||
|
$content
|
||||||
|
});
|
||||||
|
|
||||||
|
$$self.$inject_state = $$props => {
|
||||||
|
if ('hambInput' in $$props) $$invalidate(0, hambInput = $$props.hambInput);
|
||||||
|
if ('navbar' in $$props) $$invalidate(1, navbar = $$props.navbar);
|
||||||
|
if ('localesDropdown' in $$props) $$invalidate(2, localesDropdown = $$props.localesDropdown);
|
||||||
|
if ('initiativesDropdown' in $$props) $$invalidate(3, initiativesDropdown = $$props.initiativesDropdown);
|
||||||
|
if ('loaded' in $$props) $$invalidate(6, loaded = $$props.loaded);
|
||||||
|
if ('content' in $$props) $$invalidate(7, content = $$props.content);
|
||||||
|
if ('logoText' in $$props) $$invalidate(4, logoText = $$props.logoText);
|
||||||
|
if ('locale' in $$props) $$invalidate(8, locale = $$props.locale);
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($$props && "$$inject" in $$props) {
|
||||||
|
$$self.$inject_state($$props.$$inject);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
hambInput,
|
||||||
|
navbar,
|
||||||
|
localesDropdown,
|
||||||
|
initiativesDropdown,
|
||||||
|
logoText,
|
||||||
|
$content,
|
||||||
|
loaded,
|
||||||
|
content,
|
||||||
|
locale,
|
||||||
|
changeNavbar,
|
||||||
|
showDropdown,
|
||||||
|
changeLocale,
|
||||||
|
input_binding,
|
||||||
|
span1_binding,
|
||||||
|
click_handler,
|
||||||
|
focusout_handler,
|
||||||
|
div0_binding,
|
||||||
|
click_handler_1,
|
||||||
|
focusout_handler_1,
|
||||||
|
click_handler_2,
|
||||||
|
div1_binding,
|
||||||
|
header_binding
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
class Navbar_not_logged extends SvelteElement {
|
||||||
|
constructor(options) {
|
||||||
|
super();
|
||||||
|
this.shadowRoot.innerHTML = `<style>@import '/css/common.css';#navbar{position:relative;top:0;width:min(100%,116rem);z-index:1000000000;height:5.26rem;padding-left:0rem;padding-right:0rem}#navbar *{font-family:var(--sans-serif, sans-serif)}#logo-container{display:flex;position:absolute;margin-left:1rem;height:100%;max-height:5.26rem;color:black;z-index:1;flex-direction:row;flex-wrap:nowrap;align-items:center}#navbar-logo{height:3.5rem;width:3.5rem;object-fit:contain;border-radius:10rem}#navbar-logo-text{position:relative;word-wrap:normal;height:100%;line-height:400%;font-size:1.4rem;color:#292222;font-family:var(--sans-serif, sans-serif);font-weight:400;padding-left:1.2rem}#nav{position:fixed;width:100%;height:100%;background-color:white;overflow:hidden;z-index:0}#menu>li>a,.options-button{display:block;padding:1.2rem;padding-top:1rem;padding-bottom:1rem;color:black;font-size:1.4rem}#menu>li>a:active{background-color:#f7aec0}#menu li{list-style-type:none}#nav{max-height:0}#hamb{position:absolute;cursor:pointer;right:0rem;padding:2.8rem 2rem;z-index:9999}#hamb-line{background:black;display:block;height:2px;position:relative;width:24px}#hamb-line::before,#hamb-line::after{background:black;content:'';display:block;height:100%;position:absolute;transition:all .2s ease-out;width:100%}#hamb-line::before{top:5px}#hamb-line::after{top:-5px}#side-menu{display:none}#side-menu:checked~nav{display:block;max-height:100%;padding-top:5.625rem}#side-menu:checked~#logo-container{position:fixed}#side-menu:checked~#hamb{position:fixed}#side-menu:checked~#logo-container{position:fixed}#side-menu:checked~#hamb #hamb-line{background:transparent}#side-menu:checked~#hamb #hamb-line::before{transform:rotate(-45deg);top:0}#side-menu:checked~#hamb #hamb-line::after{transform:rotate(45deg);top:0}.options-dropdown{position:absolute;display:none;top:5.6rem;right:1.8rem;border:#404040 solid 0.1rem;background-color:white;z-index:10}.options-dropdown button,.options-dropdown a{display:block;font-family:var(--sans-serif,sans-serif);font-size:1.2rem;width:100%;padding:1rem;text-align:left}.options-dropdown button:hover,.options-dropdown a:hover{background-color:var(--red);color:white}.options-button{width:100%;text-align:left}#locales{position:relative}#locales button{width:100%;text-align:left;height:4rem}#locales button:hover{opacity:0.5}#locales-img{position:relative;top:0rem;height:2rem;margin-left:1.2rem}@media only screen and (min-width: 1200px){#navbar{position:relative;width:min(100%,116rem);left:50%;transform:translateX(-50%);padding-right:4rem;padding-left:4rem}#nav{max-height:none;top:0;position:relative;float:right;width:fit-content;background-color:transparent;overflow:visible}#side-menu:checked~nav{padding-top:0}#menu li{float:left}#menu>li>a:hover,.options-button:hover,#navbar-logo-text:hover{color:rgb(127, 127, 127)}#menu>li>a,.options-button{padding:0.9rem;padding-top:1.9rem;padding-bottom:1.9rem}#hamb{display:none}#locales{position:relative;margin-right:1.8rem}#locales-img{top:0.9rem}}</style>`;
|
||||||
|
|
||||||
|
init(
|
||||||
|
this,
|
||||||
|
{
|
||||||
|
target: this.shadowRoot,
|
||||||
|
props: attribute_to_object(this.attributes),
|
||||||
|
customElement: true
|
||||||
|
},
|
||||||
|
instance,
|
||||||
|
create_fragment,
|
||||||
|
safe_not_equal,
|
||||||
|
{},
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
if (options) {
|
||||||
|
if (options.target) {
|
||||||
|
insert_dev(options.target, this, options.anchor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
customElements.define("navbar-not-logged", Navbar_not_logged);
|
||||||
|
|
||||||
|
export { Navbar_not_logged as default };
|
|
@ -1 +1,301 @@
|
||||||
import{S as i,i as e,a,b as t,s as n,g as r,h as s,n as d,j as o,m as l,d as m,x as p,o as h,f as g}from"./index-8c09578c.js";import{debounce as c}from"../../../../../../../../../js/libraries/miscTools.js";function f(i){let e,a,n,p,h,g,c,f,u,b;return{c(){e=r("div"),a=r("div"),n=r("div"),p=r("div"),p.innerHTML='<slot name="sidebar-left"></slot>',h=s(),g=r("div"),g.innerHTML='<slot name="sidebar-left2"></slot>',c=s(),f=r("div"),f.innerHTML='<slot name="sidebar-right"></slot>',u=s(),b=r("div"),b.innerHTML='<slot name="main" id="main-slot"></slot>',this.c=d,o(p,"id","sidebar-left"),o(p,"class","pane"),o(g,"id","sidebar-left2"),o(g,"class","pane"),o(n,"id","sidebars-left"),o(n,"class","sidebar"),o(f,"id","sidebar-right"),o(f,"class","pane sidebar"),o(b,"id","main-pane"),o(b,"class","pane"),o(a,"class","pane-container"),o(e,"id","root"),o(e,"class","pane-centering")},m(r,s){t(r,e,s),l(e,a),l(a,n),l(n,p),i[5](p),l(n,h),l(n,g),i[6](g),l(a,c),l(a,f),i[7](f),l(a,u),l(a,b),i[8](b),i[9](e)},p:d,i:d,o:d,d(a){a&&m(e),i[5](null),i[6](null),i[7](null),i[8](null),i[9](null)}}}function u(i,e,a){let t,n,r,s,d,o=null!=p("alignerParent")?p("alignerParent").switchView:void 0,l=!1,m=!1,f=!1;function u(){if(null!=t.parentNode){let i=t.parentNode.host.childNodes;if(0==i.length)setTimeout(u,50);else{let e=!1,n=t.parentNode.innerHTML;for(let a of i)"sidebar-left"!=a.slot||l?"sidebar-left2"!=a.slot||m?"sidebar-right"!=a.slot||f||(n=n.replace("#sidebar-right{display:none;","#sidebar-right{"),f=!0,e=!0):(n=n.replace("#sidebar-left2{display:none}",""),m=!0,e=!0):(n=n.replace("#sidebar-left{display:none}",""),l=!0,e=!0);null!=o&&(n=n.replace("1880px",o),e=!0),e&&a(0,t.parentNode.innerHTML=n,t)}}}return window.addEventListener("resize",c(u,100)),h((()=>{u()})),[t,n,r,s,d,function(i){g[i?"unshift":"push"]((()=>{r=i,a(2,r)}))},function(i){g[i?"unshift":"push"]((()=>{s=i,a(3,s)}))},function(i){g[i?"unshift":"push"]((()=>{d=i,a(4,d)}))},function(i){g[i?"unshift":"push"]((()=>{n=i,a(1,n)}))},function(i){g[i?"unshift":"push"]((()=>{t=i,a(0,t)}))}]}class b extends i{constructor(i){super(),this.shadowRoot.innerHTML="<style>@import '/css/common.css';.pane-container{display:block;margin-left:var(--total-margin-left,0rem)}#root{min-height:var(--min-height,auto)}#main-pane{position:relative;padding-left:var(--padding-left,0rem);padding-right:var(--padding-right,0rem);padding-top:var(--padding-top,0rem);padding-bottom:var(--padding-bottom,0rem);text-align:justify;background:var(--background,white);box-shadow:var(--box-shadow,0 0 0.314rem rgb(187, 187, 187));margin:auto;height:min-content;max-width:var(--width-main,66rem);width:var(--width-main,66rem);z-index:1;overflow-x:var(--overflow-x,hidden)}.sidebar{position:absolute}#sidebars-left{display:flex;flex-direction:column;gap:1rem;margin-left:calc(-1*var(--width-left,22.5rem) - 1rem - 4rem);width:calc(var(--width-left,22.5rem) + 4rem)}#sidebar-left,#sidebar-left2{position:relative;background-color:white;padding:2rem 2rem}#sidebar-left{display:none}#sidebar-left2{display:none}#sidebar-right{display:none;margin-left:calc(var(--width-main,66rem) + 1rem);width:var(--width-right,auto);background-color:white;padding:2rem 2rem}@media only screen and (max-width: 1880px){#main-pane{max-width:initial;width:100%;max-width:var(--width-main,66rem);padding-left:var(--padding-left-mobile,1.8rem);padding-right:var(--padding-right-mobile,1.8rem);padding-top:var(--padding-top-mobile,1.8rem);padding-bottom:var(--padding-bottom-mobile,1.8rem)}#sidebars-left,#sidebar-right{position:relative;margin:auto;margin-top:1rem;margin-bottom:1rem;max-width:var(--width-main,66rem);width:100%}.pane-container{width:95%;justify-items:center;grid-auto-flow:row;margin-left:0}}</style>",e(this,{target:this.shadowRoot,props:a(this.attributes),customElement:!0},u,f,n,{},null),i&&i.target&&t(i.target,this,i.anchor)}}customElements.define("pane-aligner",b);export{b as default};
|
|
||||||
|
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
|
||||||
|
import { S as SvelteElement, i as init, a as attribute_to_object, b as insert_dev, s as safe_not_equal, d as dispatch_dev, v as validate_slots, g as getContext, o as onMount, c as setContext, f as element, h as space, n as noop, k as attr_dev, j as add_location, l as append_dev, p as detach_dev, q as binding_callbacks } from './index-998178c7.js';
|
||||||
|
import { debounce } from '../../../../../../../../../js/libraries/miscTools.js';
|
||||||
|
|
||||||
|
/* src\components\pane-aligner.svelte generated by Svelte v3.52.0 */
|
||||||
|
const file = "src\\components\\pane-aligner.svelte";
|
||||||
|
|
||||||
|
function create_fragment(ctx) {
|
||||||
|
let div6;
|
||||||
|
let div5;
|
||||||
|
let div2;
|
||||||
|
let div0;
|
||||||
|
let slot0;
|
||||||
|
let t0;
|
||||||
|
let div1;
|
||||||
|
let slot1;
|
||||||
|
let t1;
|
||||||
|
let div3;
|
||||||
|
let slot2;
|
||||||
|
let t2;
|
||||||
|
let div4;
|
||||||
|
let slot3;
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
div6 = element("div");
|
||||||
|
div5 = element("div");
|
||||||
|
div2 = element("div");
|
||||||
|
div0 = element("div");
|
||||||
|
slot0 = element("slot");
|
||||||
|
t0 = space();
|
||||||
|
div1 = element("div");
|
||||||
|
slot1 = element("slot");
|
||||||
|
t1 = space();
|
||||||
|
div3 = element("div");
|
||||||
|
slot2 = element("slot");
|
||||||
|
t2 = space();
|
||||||
|
div4 = element("div");
|
||||||
|
slot3 = element("slot");
|
||||||
|
this.c = noop;
|
||||||
|
attr_dev(slot0, "name", "sidebar-left");
|
||||||
|
add_location(slot0, file, 74, 16, 2554);
|
||||||
|
attr_dev(div0, "id", "sidebar-left");
|
||||||
|
add_location(div0, file, 73, 12, 2489);
|
||||||
|
attr_dev(slot1, "name", "sidebar-left2");
|
||||||
|
add_location(slot1, file, 77, 16, 2688);
|
||||||
|
attr_dev(div1, "id", "sidebar-left2");
|
||||||
|
add_location(div1, file, 76, 12, 2621);
|
||||||
|
attr_dev(div2, "id", "sidebars-left");
|
||||||
|
attr_dev(div2, "class", "sidebar");
|
||||||
|
add_location(div2, file, 72, 8, 2435);
|
||||||
|
attr_dev(slot2, "name", "sidebar-right");
|
||||||
|
add_location(slot2, file, 81, 12, 2853);
|
||||||
|
attr_dev(div3, "id", "sidebar-right");
|
||||||
|
attr_dev(div3, "class", "pane sidebar");
|
||||||
|
add_location(div3, file, 80, 8, 2768);
|
||||||
|
attr_dev(slot3, "name", "main");
|
||||||
|
attr_dev(slot3, "id", "main-slot");
|
||||||
|
add_location(slot3, file, 84, 12, 2968);
|
||||||
|
attr_dev(div4, "id", "main-pane");
|
||||||
|
add_location(div4, file, 83, 8, 2913);
|
||||||
|
attr_dev(div5, "class", "pane-container");
|
||||||
|
add_location(div5, file, 71, 4, 2397);
|
||||||
|
attr_dev(div6, "id", "root");
|
||||||
|
attr_dev(div6, "class", "pane-centering");
|
||||||
|
add_location(div6, file, 70, 0, 2336);
|
||||||
|
},
|
||||||
|
l: function claim(nodes) {
|
||||||
|
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
insert_dev(target, div6, anchor);
|
||||||
|
append_dev(div6, div5);
|
||||||
|
append_dev(div5, div2);
|
||||||
|
append_dev(div2, div0);
|
||||||
|
append_dev(div0, slot0);
|
||||||
|
/*div0_binding*/ ctx[5](div0);
|
||||||
|
append_dev(div2, t0);
|
||||||
|
append_dev(div2, div1);
|
||||||
|
append_dev(div1, slot1);
|
||||||
|
/*div1_binding*/ ctx[6](div1);
|
||||||
|
append_dev(div5, t1);
|
||||||
|
append_dev(div5, div3);
|
||||||
|
append_dev(div3, slot2);
|
||||||
|
/*div3_binding*/ ctx[7](div3);
|
||||||
|
append_dev(div5, t2);
|
||||||
|
append_dev(div5, div4);
|
||||||
|
append_dev(div4, slot3);
|
||||||
|
/*div4_binding*/ ctx[8](div4);
|
||||||
|
/*div6_binding*/ ctx[9](div6);
|
||||||
|
},
|
||||||
|
p: noop,
|
||||||
|
i: noop,
|
||||||
|
o: noop,
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(div6);
|
||||||
|
/*div0_binding*/ ctx[5](null);
|
||||||
|
/*div1_binding*/ ctx[6](null);
|
||||||
|
/*div3_binding*/ ctx[7](null);
|
||||||
|
/*div4_binding*/ ctx[8](null);
|
||||||
|
/*div6_binding*/ ctx[9](null);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_fragment.name,
|
||||||
|
type: "component",
|
||||||
|
source: "",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
function instance($$self, $$props, $$invalidate) {
|
||||||
|
let { $$slots: slots = {}, $$scope } = $$props;
|
||||||
|
validate_slots('pane-aligner', slots, []);
|
||||||
|
let root;
|
||||||
|
let mainPane;
|
||||||
|
let sidebarLeft;
|
||||||
|
let sidebarLeft2;
|
||||||
|
let sidebarRight;
|
||||||
|
let parentProps = getContext("alignerParent");
|
||||||
|
|
||||||
|
let switchView = parentProps != undefined
|
||||||
|
? getContext("alignerParent").switchView
|
||||||
|
: undefined;
|
||||||
|
|
||||||
|
let leftReplaced = false;
|
||||||
|
let left2Replaced = false;
|
||||||
|
let rightReplaced = false;
|
||||||
|
let switchViewReplaced = false;
|
||||||
|
|
||||||
|
function adjustSlotted() {
|
||||||
|
if (root.parentNode != null) {
|
||||||
|
let slotted = root.parentNode.host.childNodes;
|
||||||
|
|
||||||
|
if (slotted.length == 0) {
|
||||||
|
setTimeout(adjustSlotted, 50);
|
||||||
|
} else {
|
||||||
|
let changed = false;
|
||||||
|
let html = root.parentNode.innerHTML;
|
||||||
|
|
||||||
|
for (let item of slotted) {
|
||||||
|
if (item.slot == "sidebar-left" && !leftReplaced) {
|
||||||
|
html = html.replace("#sidebar-left{display:none}", "");
|
||||||
|
leftReplaced = true;
|
||||||
|
changed = true;
|
||||||
|
} else if (item.slot == "sidebar-left2" && !left2Replaced) {
|
||||||
|
html = html.replace("#sidebar-left2{display:none}", "");
|
||||||
|
left2Replaced = true;
|
||||||
|
changed = true;
|
||||||
|
} else if (item.slot == "sidebar-right" && !rightReplaced) {
|
||||||
|
html = html.replace("#sidebar-right{display:none;", "#sidebar-right{");
|
||||||
|
rightReplaced = true;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (switchView != undefined && !switchViewReplaced) {
|
||||||
|
html = html.replace("1880px", switchView);
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changed) {
|
||||||
|
$$invalidate(0, root.parentNode.innerHTML = html, root);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener("resize", debounce(adjustSlotted, 100));
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
adjustSlotted();
|
||||||
|
});
|
||||||
|
|
||||||
|
const writable_props = [];
|
||||||
|
|
||||||
|
Object.keys($$props).forEach(key => {
|
||||||
|
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') console.warn(`<pane-aligner> was created with unknown prop '${key}'`);
|
||||||
|
});
|
||||||
|
|
||||||
|
function div0_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
sidebarLeft = $$value;
|
||||||
|
$$invalidate(2, sidebarLeft);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function div1_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
sidebarLeft2 = $$value;
|
||||||
|
$$invalidate(3, sidebarLeft2);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function div3_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
sidebarRight = $$value;
|
||||||
|
$$invalidate(4, sidebarRight);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function div4_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
mainPane = $$value;
|
||||||
|
$$invalidate(1, mainPane);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function div6_binding($$value) {
|
||||||
|
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
||||||
|
root = $$value;
|
||||||
|
$$invalidate(0, root);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$$self.$capture_state = () => ({
|
||||||
|
getContext,
|
||||||
|
setContext,
|
||||||
|
onMount,
|
||||||
|
debounce,
|
||||||
|
root,
|
||||||
|
mainPane,
|
||||||
|
sidebarLeft,
|
||||||
|
sidebarLeft2,
|
||||||
|
sidebarRight,
|
||||||
|
parentProps,
|
||||||
|
switchView,
|
||||||
|
leftReplaced,
|
||||||
|
left2Replaced,
|
||||||
|
rightReplaced,
|
||||||
|
switchViewReplaced,
|
||||||
|
adjustSlotted
|
||||||
|
});
|
||||||
|
|
||||||
|
$$self.$inject_state = $$props => {
|
||||||
|
if ('root' in $$props) $$invalidate(0, root = $$props.root);
|
||||||
|
if ('mainPane' in $$props) $$invalidate(1, mainPane = $$props.mainPane);
|
||||||
|
if ('sidebarLeft' in $$props) $$invalidate(2, sidebarLeft = $$props.sidebarLeft);
|
||||||
|
if ('sidebarLeft2' in $$props) $$invalidate(3, sidebarLeft2 = $$props.sidebarLeft2);
|
||||||
|
if ('sidebarRight' in $$props) $$invalidate(4, sidebarRight = $$props.sidebarRight);
|
||||||
|
if ('parentProps' in $$props) parentProps = $$props.parentProps;
|
||||||
|
if ('switchView' in $$props) switchView = $$props.switchView;
|
||||||
|
if ('leftReplaced' in $$props) leftReplaced = $$props.leftReplaced;
|
||||||
|
if ('left2Replaced' in $$props) left2Replaced = $$props.left2Replaced;
|
||||||
|
if ('rightReplaced' in $$props) rightReplaced = $$props.rightReplaced;
|
||||||
|
if ('switchViewReplaced' in $$props) switchViewReplaced = $$props.switchViewReplaced;
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($$props && "$$inject" in $$props) {
|
||||||
|
$$self.$inject_state($$props.$$inject);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
root,
|
||||||
|
mainPane,
|
||||||
|
sidebarLeft,
|
||||||
|
sidebarLeft2,
|
||||||
|
sidebarRight,
|
||||||
|
div0_binding,
|
||||||
|
div1_binding,
|
||||||
|
div3_binding,
|
||||||
|
div4_binding,
|
||||||
|
div6_binding
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
class Pane_aligner extends SvelteElement {
|
||||||
|
constructor(options) {
|
||||||
|
super();
|
||||||
|
this.shadowRoot.innerHTML = `<style>@import '/css/common.css';.pane-container{display:block;margin-left:var(--total-margin-left,0rem)}#root{position:relative;margin-top:auto;min-height:var(--min-height,auto);height:100%}#main-pane{position:relative;padding-left:var(--padding-left,0rem);padding-right:var(--padding-right,0rem);padding-top:var(--padding-top,0rem);padding-bottom:var(--padding-bottom,0rem);text-align:justify;margin:auto;height:100%;max-width:var(--width-main,66rem);width:var(--width-main,66rem);z-index:1;overflow-x:var(--overflow-x,hidden)}.sidebar{position:absolute}#sidebars-left{display:flex;flex-direction:column;gap:1rem;margin-left:calc(-1*var(--width-left,22.5rem) - 1rem - 4rem);width:max-content;max-width:30rem}#sidebar-left,#sidebar-left2{position:relative;background-color:white;padding:0rem 0rem}#sidebar-left{display:none}#sidebar-left2{display:none}#sidebar-right{display:none;margin-left:calc(var(--width-main,66rem) + 1rem);width:var(--width-right,auto);background-color:white;padding:2rem 2rem}@media only screen and (max-width: 1340px){#main-pane{max-width:initial;width:100%;max-width:var(--width-main,66rem);padding-left:var(--padding-left-mobile,0rem);padding-right:var(--padding-right-mobile,0rem);padding-top:var(--padding-top-mobile,0rem);padding-bottom:var(--padding-bottom-mobile,0rem)}#sidebars-left,#sidebar-right{position:relative;margin:auto;margin-top:1rem;margin-bottom:1rem;max-width:var(--width-main,66rem);width:100%}.pane-container{width:95%;justify-items:center;grid-auto-flow:row;margin-left:0}}</style>`;
|
||||||
|
|
||||||
|
init(
|
||||||
|
this,
|
||||||
|
{
|
||||||
|
target: this.shadowRoot,
|
||||||
|
props: attribute_to_object(this.attributes),
|
||||||
|
customElement: true
|
||||||
|
},
|
||||||
|
instance,
|
||||||
|
create_fragment,
|
||||||
|
safe_not_equal,
|
||||||
|
{},
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
if (options) {
|
||||||
|
if (options.target) {
|
||||||
|
insert_dev(options.target, this, options.anchor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
customElements.define("pane-aligner", Pane_aligner);
|
||||||
|
|
||||||
|
export { Pane_aligner as default };
|
||||||
|
|