├── .gitattributes
├── static
├── img
│ ├── marker-icon.png
│ ├── marker-icon-2x.png
│ └── marker-shadow.png
├── _redirects
├── css
│ └── leaflet.bundle.css
└── js
│ └── bootstrap.bundle.min.js
├── src
├── css
│ ├── leaflet.bundle.css
│ ├── L.Control.Locate.css
│ ├── MarkerCluster.Default.css
│ ├── MarkerCluster.css
│ ├── page.css
│ └── leaflet.css
└── js
│ └── L.Control.Locate.js
├── config.toml
├── layouts
├── partials
│ ├── footer.html
│ ├── header.html
│ ├── head.html
│ └── js.html
├── _default
│ └── baseof.html
└── index.html
├── package.json
├── README.md
├── .github
└── FUNDING.yml
├── LICENSE
├── netlify.toml
├── gulpfile.js
├── .gitignore
└── data
└── stores.json
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/static/img/marker-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ttntm/hugo-leaflet-store-locator/HEAD/static/img/marker-icon.png
--------------------------------------------------------------------------------
/static/img/marker-icon-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ttntm/hugo-leaflet-store-locator/HEAD/static/img/marker-icon-2x.png
--------------------------------------------------------------------------------
/static/img/marker-shadow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ttntm/hugo-leaflet-store-locator/HEAD/static/img/marker-shadow.png
--------------------------------------------------------------------------------
/src/css/leaflet.bundle.css:
--------------------------------------------------------------------------------
1 | @import url("leaflet.css");
2 | @import url("MarkerCluster.css");
3 | @import url("MarkerCluster.Default.css");
4 | @import url("L.Control.Locate.css");
--------------------------------------------------------------------------------
/static/_redirects:
--------------------------------------------------------------------------------
1 | # Redirect default Netlify subdomain to primary domain
2 | https://leaflet-store-locator.netlify.app/* https://storelocator.ttntm.me/:splat 301!
3 | https://master--leaflet-store-locator.netlify.app/* https://storelocator.ttntm.me/:splat 301!
4 |
--------------------------------------------------------------------------------
/config.toml:
--------------------------------------------------------------------------------
1 | # SETUP
2 | baseurl = ""
3 | publishdir = "public"
4 | canonifyUrls = "true"
5 | disableKinds = ["RSS","taxonomy","taxonomyTerm","sitemap"]
6 |
7 | [params]
8 | author = "ttntm"
9 | DateForm = "02.01.2006"
10 | showReadTime = 1
11 | title = "Hugo+Leaflet Store Locator"
12 | description = "A Leaflet based store locator rendered as a static site by hugo."
--------------------------------------------------------------------------------
/layouts/partials/footer.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/css/L.Control.Locate.css:
--------------------------------------------------------------------------------
1 | .leaflet-control-locate a{font-size:1.4em;color:#444;cursor:pointer}.leaflet-control-locate.active a{color:#2074b6}.leaflet-control-locate.active.following a{color:#fc8428}.leaflet-control-locate-location circle{animation:leaflet-control-locate-throb 4s ease infinite}@keyframes leaflet-control-locate-throb{0%{stroke-width:1}50%{stroke-width:3;transform:scale(0.8, 0.8)}100%{stroke-width:1}}
2 | /*# sourceMappingURL=L.Control.Locate.min.css.map */
3 |
--------------------------------------------------------------------------------
/layouts/partials/header.html:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "hugo-leaflet-store-locator",
3 | "version": "1.0.0",
4 | "description": "A Leaflet based store locator rendered as a static site by hugo.",
5 | "main": "index.html",
6 | "scripts": {
7 | "start": "hugo server --disableFastRender"
8 | },
9 | "author": "ttntm",
10 | "license": "MIT",
11 | "devDependencies": {
12 | "css-mqpacker": "^7.0.0",
13 | "gulp": "^3.9.1",
14 | "gulp-concat": "^2.6.1",
15 | "gulp-concat-css": "^3.1.0",
16 | "gulp-cssnano": "^2.1.3",
17 | "gulp-postcss": "^8.0.0",
18 | "gulp-uglify": "^3.0.1"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # hugo-leaflet-store-locator
2 |
3 | A simple store locator based on Leaflet, built into a static site generated by Hugo.
4 |
5 | Demo: https://leaflet-store-locator.netlify.app/
6 |
7 | Detailed description: https://ttntm.me/blog/store-locator-leaflet-hugo/
8 |
9 | ---
10 |
11 | Requires Hugo to build/run the site; after cloning/downloading it, you can either `hugo server` or `npm run start` in order to view the site on `http://localhost:1313`.
12 |
13 | ---
14 |
15 | [](https://app.netlify.com/sites/leaflet-store-locator/deploys)
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: # Replace with a single Patreon username
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: # Replace with a single Ko-fi username
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: # Replace with a single IssueHunt username
11 | otechie: # Replace with a single Otechie username
12 | custom: ['https://www.buymeacoffee.com/ttntm']
13 |
--------------------------------------------------------------------------------
/layouts/_default/baseof.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ block "head" . }}
5 | {{ partial "head.html" . }}
6 | {{ end }}
7 |
8 |
9 |
10 | {{ block "header" . }}
11 | {{ partial "header.html" . }}
12 | {{ end }}
13 |
14 | {{ block "main" . }}
15 |
16 | {{ end }}
17 |
18 | {{ block "footer" . }}
19 | {{ partial "footer.html" . }}
20 | {{ end }}
21 |
22 | {{ partial "js.html" . }}
23 |
24 |
--------------------------------------------------------------------------------
/src/css/MarkerCluster.Default.css:
--------------------------------------------------------------------------------
1 | .marker-cluster-small {
2 | background-color: rgba(235,203,139, 0.4);
3 | }
4 | .marker-cluster-small div {
5 | background-color: rgba(235,203,139, 0.8);
6 | }
7 |
8 | .marker-cluster-medium {
9 | background-color: rgba(208,135,112, 0.4);
10 | }
11 | .marker-cluster-medium div {
12 | background-color: rgba(208,135,112, 0.8);
13 | }
14 |
15 | .marker-cluster-large {
16 | background-color: rgba(191,97,106, 0.4);
17 | }
18 | .marker-cluster-large div {
19 | background-color: rgba(191,97,106, 0.8);
20 | }
21 |
22 | .marker-cluster {
23 | background-clip: padding-box;
24 | border-radius: 20px;
25 | }
26 | .marker-cluster div {
27 | width: 30px;
28 | height: 30px;
29 | margin-left: 5px;
30 | margin-top: 5px;
31 | color: var(--bright);
32 | text-align: center;
33 | border-radius: 15px;
34 | font: 12px 'Quicksand', sans-serif;
35 | }
36 | .marker-cluster span {
37 | line-height: 30px;
38 | }
--------------------------------------------------------------------------------
/src/css/MarkerCluster.css:
--------------------------------------------------------------------------------
1 | .leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-anim .leaflet-marker-shadow {
2 | -webkit-transition: -webkit-transform 0.3s ease-out, opacity 0.3s ease-in;
3 | -moz-transition: -moz-transform 0.3s ease-out, opacity 0.3s ease-in;
4 | -o-transition: -o-transform 0.3s ease-out, opacity 0.3s ease-in;
5 | transition: transform 0.3s ease-out, opacity 0.3s ease-in;
6 | }
7 |
8 | .leaflet-cluster-spider-leg {
9 | /* stroke-dashoffset (duration and function) should match with leaflet-marker-icon transform in order to track it exactly */
10 | -webkit-transition: -webkit-stroke-dashoffset 0.3s ease-out, -webkit-stroke-opacity 0.3s ease-in;
11 | -moz-transition: -moz-stroke-dashoffset 0.3s ease-out, -moz-stroke-opacity 0.3s ease-in;
12 | -o-transition: -o-stroke-dashoffset 0.3s ease-out, -o-stroke-opacity 0.3s ease-in;
13 | transition: stroke-dashoffset 0.3s ease-out, stroke-opacity 0.3s ease-in;
14 | }
15 |
--------------------------------------------------------------------------------
/layouts/partials/head.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | {{ .Site.Params.title }}
17 |
18 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 ttntm
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/netlify.toml:
--------------------------------------------------------------------------------
1 | [build]
2 | publish = "public"
3 | command = "hugo --minify"
4 |
5 | [context.production.environment]
6 | HUGO_VERSION = "0.58.0"
7 | HUGO_ENV = "production"
8 | HUGO_ENABLEGITINFO = "false"
9 | command = "hugo --minify"
10 |
11 | [Settings]
12 | ID = "alpengummi.at"
13 |
14 | [[headers]]
15 | for = "/*" # This defines which paths this specific [[headers]] block will cover.
16 | [headers.values]
17 | X-Frame-Options = "DENY"
18 | X-XSS-Protection = "1; mode=block"
19 | #Cache-Control = "public, max-age=31536000"
20 | X-Content-Type-Options = "nosniff"
21 | [[headers]]
22 | for = "/*.js"
23 | [headers.values]
24 | Access-Control-Allow-Origin = "*"
25 | Content-Type = "application/javascript"
26 | [[headers]]
27 | for = "/*.css"
28 | [headers.values]
29 | Access-Control-Allow-Origin = "*"
30 | Content-Type = "text/css"
31 | [[headers]]
32 | for = "/*.png"
33 | [headers.values]
34 | Access-Control-Allow-Origin = "*"
35 | Content-Type = "image/png"
36 | [[headers]]
37 | for = "/*.woff2"
38 | [headers.values]
39 | Access-Control-Allow-Origin = "*"
40 | Content-Type = "font/woff2"
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | var gulp = require('gulp'),
2 | postcss = require('gulp-postcss'),
3 | concatCss = require('gulp-concat-css'),
4 | cssnano = require('gulp-cssnano'),
5 | uglify = require('gulp-uglify'),
6 | concat = require('gulp-concat');
7 |
8 | gulp.task('procss', function () {
9 | return gulp.src('./src/css/page.css')
10 | .pipe(postcss([
11 | require('css-mqpacker'),
12 | ]))
13 | .pipe(concatCss('page.css'))
14 | .pipe(cssnano({
15 | reduceIdents: false,
16 | svgo: false,
17 | discardComments: {removeAll: true},
18 | zindex: false
19 | }))
20 | .pipe(gulp.dest('./static/css/'));
21 | });
22 |
23 | gulp.task('leaflet-css', function () {
24 | return gulp.src('./src/css/leaflet.bundle.css')
25 | .pipe(postcss([
26 | require('css-mqpacker'),
27 | ]))
28 | .pipe(concatCss('leaflet.bundle.css'))
29 | .pipe(cssnano({
30 | reduceIdents: false,
31 | svgo: false,
32 | discardComments: {removeAll: true}
33 | }))
34 | .pipe(gulp.dest('./static/css/'));
35 | });
36 |
37 | gulp.task('leafletjs', function () {
38 | return gulp.src(['./src/js/leaflet.js','./src/js/leaflet.markercluster.js','./src/js/L.Control.Locate.js'])
39 | .pipe(concat('leaflet.bundle.min.js'))
40 | .pipe(uglify())
41 | .pipe(gulp.dest('./static/js/'));
42 | });
43 |
44 | gulp.task('watch-css', function() {
45 | gulp.watch('./src/css/*', ['procss'])
46 | });
47 |
48 | gulp.task('build-css', ['procss','leaflet-css']);
49 |
50 | gulp.task('build-js', ['leafletjs']);
51 |
52 | gulp.task('deploy', ['build-css', 'build-js']);
--------------------------------------------------------------------------------
/layouts/index.html:
--------------------------------------------------------------------------------
1 | {{ define "main" }}
2 | {{ $shops := .Site.Data.stores }}
3 |
4 |
5 |
6 |
7 |
8 |
17 |
18 |
19 | {{ range sort $shops "shopPLZ" "asc" }}
20 | {{ if .shopActive }}
21 |
22 |
23 |
{{ .shopName }}
24 |
{{ .shopAddress }} {{ .shopPLZ }}, {{ .shopCountry }}
25 |
26 |
27 | {{ end }}
28 | {{ end }}
29 |
30 |
31 |
32 |
35 |
36 |
37 | {{ end }}
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 | # Diagnostic reports (https://nodejs.org/api/report.html)
10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 |
12 | # Runtime data
13 | pids
14 | *.pid
15 | *.seed
16 | *.pid.lock
17 |
18 | # Directory for instrumented libs generated by jscoverage/JSCover
19 | lib-cov
20 |
21 | # Coverage directory used by tools like istanbul
22 | coverage
23 | *.lcov
24 |
25 | # nyc test coverage
26 | .nyc_output
27 |
28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29 | .grunt
30 |
31 | # Bower dependency directory (https://bower.io/)
32 | bower_components
33 |
34 | # node-waf configuration
35 | .lock-wscript
36 |
37 | # Compiled binary addons (https://nodejs.org/api/addons.html)
38 | build/Release
39 |
40 | # Dependency directories
41 | node_modules/
42 | jspm_packages/
43 |
44 | # TypeScript v1 declaration files
45 | typings/
46 |
47 | # TypeScript cache
48 | *.tsbuildinfo
49 |
50 | # Optional npm cache directory
51 | .npm
52 |
53 | # Optional eslint cache
54 | .eslintcache
55 |
56 | # Microbundle cache
57 | .rpt2_cache/
58 | .rts2_cache_cjs/
59 | .rts2_cache_es/
60 | .rts2_cache_umd/
61 |
62 | # Optional REPL history
63 | .node_repl_history
64 |
65 | # Output of 'npm pack'
66 | *.tgz
67 |
68 | # Yarn Integrity file
69 | .yarn-integrity
70 |
71 | # dotenv environment variables file
72 | .env
73 | .env.test
74 |
75 | # parcel-bundler cache (https://parceljs.org/)
76 | .cache
77 |
78 | # Next.js build output
79 | .next
80 |
81 | # Nuxt.js build / generate output
82 | .nuxt
83 | dist
84 |
85 | # Gatsby files
86 | .cache/
87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
88 | # https://nextjs.org/blog/next-9-1#public-directory-support
89 | # public
90 |
91 | # vuepress build output
92 | .vuepress/dist
93 |
94 | # Serverless directories
95 | .serverless/
96 |
97 | # FuseBox cache
98 | .fusebox/
99 |
100 | # DynamoDB Local files
101 | .dynamodb/
102 |
103 | # TernJS port file
104 | .tern-port
105 |
--------------------------------------------------------------------------------
/src/css/page.css:
--------------------------------------------------------------------------------
1 | /* bootstrap 4 styles */
2 | @import url("bootstrap4.4.css");
3 |
4 | /*
5 | * Globals -- https://getbootstrap.com/docs/4.4/examples/cover/cover.css
6 | */
7 |
8 | /* Links */
9 | a,
10 | a:focus,
11 | a:hover {
12 | color: #5E81AC;
13 | transition: all .35s ease-in-out;
14 | }
15 |
16 | /* Custom default button */
17 | .btn-secondary,
18 | .btn-secondary:hover,
19 | .btn-secondary:focus {
20 | color: #2E3440;
21 | background-color: #88C0D0;
22 | border: .05rem solid #88C0D0;
23 | }
24 |
25 | html,
26 | body {
27 | height: 100%;
28 | background-color: #ECEFF4;
29 | }
30 |
31 | body {
32 | display: -ms-flexbox;
33 | display: flex;
34 | color: #4C566A;
35 | }
36 |
37 | @media(min-width:1281px) {
38 | .cover-container {
39 | max-width: 75vw;
40 | }
41 | .cover {
42 | padding: 0 1.5rem;
43 | }
44 | }
45 |
46 | .masthead {
47 | margin-bottom: 2rem;
48 | }
49 |
50 | .masthead-brand {
51 | margin-bottom: 0;
52 | }
53 |
54 | .nav-masthead .nav-link {
55 | padding: .25rem 0;
56 | font-weight: 700;
57 | color: #5E81AC;
58 | background-color: transparent;
59 | border-bottom: .25rem solid transparent;
60 | }
61 |
62 | .nav-masthead .nav-link:hover,
63 | .nav-masthead .nav-link:focus {
64 | border-bottom-color: #81A1C1;
65 | }
66 |
67 | .nav-masthead .nav-link + .nav-link {
68 | margin-left: 1rem;
69 | }
70 |
71 | .nav-masthead .active {
72 | color: #5E81AC;
73 | border-bottom-color: #5E81AC;
74 | }
75 |
76 | @media (min-width: 48em) {
77 | .masthead-brand {
78 | float: left;
79 | }
80 | .nav-masthead {
81 | float: right;
82 | }
83 | }
84 |
85 |
86 | .cover .btn-lg {
87 | padding: .75rem 1.25rem;
88 | font-weight: 700;
89 | }
90 |
91 | .mastfoot {
92 | color: #4C566A;
93 | }
94 |
95 | .sItem-container {
96 | width: 33.33333%;
97 | }
98 |
99 | .sItem--offline {
100 | border-left: 8px solid #5E81AC;
101 | background-color: #f9f8fa;
102 | text-align: left;
103 | }
104 |
105 | .sItem--hidden {
106 | display: none;
107 | }
108 |
109 | .content img {max-width: 100%;}
110 |
111 | .map-container {
112 | overflow: hidden;
113 | }
114 |
115 | .shop-container {
116 | max-height: 50vh;
117 | overflow-y: auto;
118 | }
119 |
120 | @media(max-width:767px) {
121 | .sItem-container {
122 | width: 100%;
123 | }
124 |
125 | .map-container {
126 | min-height: 75vh;
127 | }
128 | }
129 |
130 | @media(min-width:768px) and (max-width:1023px) {
131 | .sItem-container {
132 | width: 50%;
133 | }
134 | }
135 |
136 | @media(min-width:768px) {
137 | .map-container {
138 | min-height: 50vh;
139 | }
140 |
141 | .sItem--offline:hover {
142 | cursor: pointer;
143 | border-left: 8px solid #BF616A;
144 | background-color: #E5E9F0;
145 | transition: all .35s ease-in-out;
146 | }
147 |
148 | .map-border {
149 | border: 2px solid #4C566A;
150 | border-radius: 0.3rem;
151 | box-shadow: 0 .5rem 1rem rgba(0,0,0,.15)!important;
152 | }
153 | }
154 |
155 | @media(min-width:1024px) {
156 | .shop-container {
157 | max-height: 50vh;
158 | }
159 | }
160 |
161 | .gps-marker::after {
162 | content: "📍";
163 | }
--------------------------------------------------------------------------------
/layouts/partials/js.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/static/css/leaflet.bundle.css:
--------------------------------------------------------------------------------
1 | .leaflet-image-layer,.leaflet-layer,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-pane,.leaflet-pane>canvas,.leaflet-pane>svg,.leaflet-tile,.leaflet-tile-container,.leaflet-zoom-box{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-overlay-pane svg,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer{max-width:none!important}.leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{-ms-touch-action:none;touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,.4)}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;box-sizing:border-box;z-index:8}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:3}.leaflet-tile-pane{z-index:2}.leaflet-overlay-pane{z-index:3}.leaflet-shadow-pane{z-index:4}.leaflet-marker-pane{z-index:5}.leaflet-tooltip-pane{z-index:6}.leaflet-popup-pane{z-index:7}.leaflet-map-pane canvas{z-index:1}.leaflet-map-pane svg{z-index:2}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:8;pointer-events:visiblePainted;pointer-events:auto}.leaflet-bottom,.leaflet-top{position:absolute;z-index:9;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-tile{will-change:opacity}.leaflet-fade-anim .leaflet-popup{opacity:0;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{transform-origin:0 0}.leaflet-zoom-anim .leaflet-zoom-animated{will-change:transform;transition:transform .25s cubic-bezier(0,0,.25,1)}.leaflet-pan-anim .leaflet-tile,.leaflet-zoom-anim .leaflet-tile{transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:-moz-grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-control,.leaflet-popup-pane{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-moz-grabbing}.leaflet-image-layer,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-image-layer.leaflet-interactive,.leaflet-marker-icon.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{background:#ddd;outline:0}.leaflet-container a{color:#0078a8}.leaflet-container a.leaflet-active{outline:2px solid orange}.leaflet-zoom-box{border:2px dotted #38f;background:hsla(0,0%,100%,.5)}.leaflet-container{font:12px/1.5 Helvetica Neue,Arial,Helvetica,sans-serif}.leaflet-bar{box-shadow:0 1px 5px rgba(0,0,0,.65);border-radius:4px}.leaflet-bar a,.leaflet-bar a:hover{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:#000}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:700 18px Lucida Console,Monaco,monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{box-shadow:0 1px 5px rgba(0,0,0,.4);background:#fff;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(images/layers.png);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(images/layers-2x.png);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers-expanded .leaflet-control-layers-toggle,.leaflet-control-layers .leaflet-control-layers-list{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(../../../img/marker-icon.png)}.leaflet-container .leaflet-control-attribution{background:#fff;background:hsla(0,0%,100%,.7);margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333}.leaflet-control-attribution a{text-decoration:none}.leaflet-control-attribution a:hover{text-decoration:underline}.leaflet-container .leaflet-control-attribution,.leaflet-container .leaflet-control-scale{font-size:11px}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;font-size:11px;white-space:nowrap;overflow:hidden;box-sizing:border-box;background:#fff;background:hsla(0,0%,100%,.5)}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-bar,.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers{box-shadow:none}.leaflet-touch .leaflet-bar,.leaflet-touch .leaflet-control-layers{border:2px solid rgba(0,0,0,.2);background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 19px;line-height:1.4}.leaflet-popup-content p{margin:18px 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;color:#333;box-shadow:0 3px 14px rgba(0,0,0,.4)}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;padding:4px 4px 0 0;border:none;text-align:center;width:18px;height:14px;font:16px/14px Tahoma,Verdana,sans-serif;color:#c3c3c3;text-decoration:none;font-weight:700;background:transparent}.leaflet-container a.leaflet-popup-close-button:hover{color:#999}.leaflet-popup-scrolled{overflow:auto;border-bottom:1px solid #ddd;border-top:1px solid #ddd}.leaflet-oldie .leaflet-popup-content-wrapper{zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";filter:progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678,M12=0.70710678,M21=-0.70710678,M22=0.70710678)}.leaflet-oldie .leaflet-popup-tip-container{margin-top:-1px}.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px rgba(0,0,0,.4)}.leaflet-tooltip.leaflet-clickable{cursor:pointer;pointer-events:auto}.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before,.leaflet-tooltip-top:before{position:absolute;pointer-events:none;border:6px solid transparent;background:transparent;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}.leaflet-cluster-anim .leaflet-marker-icon,.leaflet-cluster-anim .leaflet-marker-shadow{transition:transform .3s ease-out,opacity .3s ease-in}.leaflet-cluster-spider-leg{transition:stroke-dashoffset .3s ease-out,stroke-opacity .3s ease-in}.marker-cluster-small{background-color:hsla(40,71%,73%,.4)}.marker-cluster-small div{background-color:hsla(40,71%,73%,.8)}.marker-cluster-medium{background-color:hsla(14,51%,63%,.4)}.marker-cluster-medium div{background-color:hsla(14,51%,63%,.8)}.marker-cluster-large{background-color:rgba(191,97,106,.4)}.marker-cluster-large div{background-color:rgba(191,97,106,.8)}.marker-cluster{background-clip:padding-box;border-radius:20px}.marker-cluster div{width:30px;height:30px;margin-left:5px;margin-top:5px;color:var(--bright);text-align:center;border-radius:15px;font:12px Quicksand,sans-serif}.marker-cluster span{line-height:30px}.leaflet-control-locate a{font-size:1.4em;color:#444;cursor:pointer}.leaflet-control-locate.active a{color:#2074b6}.leaflet-control-locate.active.following a{color:#fc8428}.leaflet-control-locate-location circle{animation:leaflet-control-locate-throb 4s ease infinite}@keyframes leaflet-control-locate-throb{0%{stroke-width:1}50%{stroke-width:3;transform:scale(.8)}to{stroke-width:1}}
--------------------------------------------------------------------------------
/data/stores.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "shopName": "McDonald's Messe Vienna",
4 | "shopAddress": "Ausstellungsstraße 44A",
5 | "shopPLZ": "1020 Vienna",
6 | "shopCountry": "Austria",
7 | "shopLatitude": "48.217461",
8 | "shopLongitude": "16.405981",
9 | "shopActive": true
10 | },
11 | {
12 | "shopName": "McDonald's Praterstern",
13 | "shopAddress": "Praterstern 3990/2",
14 | "shopPLZ": "1020 Vienna",
15 | "shopCountry": "Austria",
16 | "shopLatitude": "48.217836",
17 | "shopLongitude": "16.392217",
18 | "shopActive": true
19 | },
20 | {
21 | "shopName": "McDonald's Handelskai",
22 | "shopAddress": "Handelskai 130",
23 | "shopPLZ": "1020 Vienna",
24 | "shopCountry": "Austria",
25 | "shopLatitude": "48.233456",
26 | "shopLongitude": "16.395025",
27 | "shopActive": true
28 | },
29 | {
30 | "shopName": "McDonald's Taborstraße",
31 | "shopAddress": "Taborstraße 39",
32 | "shopPLZ": "1020 Vienna",
33 | "shopCountry": "Austria",
34 | "shopLatitude": "48.219235",
35 | "shopLongitude": "16.380754",
36 | "shopActive": true
37 | },
38 | {
39 | "shopName": "McDonald's Rivergate",
40 | "shopAddress": "Rivergate, Handelskai 92",
41 | "shopPLZ": "1200 Vienna",
42 | "shopCountry": "Austria",
43 | "shopLatitude": "48.241946",
44 | "shopLongitude": "16.384423",
45 | "shopActive": true
46 | },
47 | {
48 | "shopName": "McDonald's Schwedenplatz",
49 | "shopAddress": "Rotenturmstraße 29",
50 | "shopPLZ": "1010 Vienna",
51 | "shopCountry": "Austria",
52 | "shopLatitude": "48.211787",
53 | "shopLongitude": "16.375875",
54 | "shopActive": true
55 | },
56 | {
57 | "shopName": "McDonald's Heiligenstadt",
58 | "shopAddress": "Heiligenstädter Straße 68",
59 | "shopPLZ": "1190 Vienna",
60 | "shopCountry": "Austria",
61 | "shopLatitude": "48.243213",
62 | "shopLongitude": "16.361738",
63 | "shopActive": true
64 | },
65 | {
66 | "shopName": "McDonald's FJB",
67 | "shopAddress": "Julius-Tandler-Platz 3",
68 | "shopPLZ": "1090 Vienna",
69 | "shopCountry": "Austria",
70 | "shopLatitude": "48.226074",
71 | "shopLongitude": "16.361011",
72 | "shopActive": true
73 | },
74 | {
75 | "shopName": "McDonald's Universität",
76 | "shopAddress": "Universitätsring 12",
77 | "shopPLZ": "1010 Vienna",
78 | "shopCountry": "Austria",
79 | "shopLatitude": "48.213414",
80 | "shopLongitude": "16.362011",
81 | "shopActive": true
82 | },
83 | {
84 | "shopName": "McDonald's Singerstraße",
85 | "shopAddress": "Singerstraße 4",
86 | "shopPLZ": "1010 Vienna",
87 | "shopCountry": "Austria",
88 | "shopLatitude": "48.207648",
89 | "shopLongitude": "16.372437",
90 | "shopActive": true
91 | },
92 | {
93 | "shopName": "McDonald's Wien Mitte",
94 | "shopAddress": "Landstraßer Hauptstraße 1B",
95 | "shopPLZ": "1030 Vienna",
96 | "shopCountry": "Austria",
97 | "shopLatitude": "48.206481",
98 | "shopLongitude": "16.384397",
99 | "shopActive": true
100 | },
101 | {
102 | "shopName": "McDonald's Schwarzenbergplatz",
103 | "shopAddress": "Schwarzenbergplatz 17",
104 | "shopPLZ": "1010 Vienna",
105 | "shopCountry": "Austria",
106 | "shopLatitude": "48.201102",
107 | "shopLongitude": "16.374146",
108 | "shopActive": true
109 | },
110 | {
111 | "shopName": "McDonald's Karlsplatz",
112 | "shopAddress": "Nr.1, U-Bahnpassage Lokal, Karlsplatz",
113 | "shopPLZ": "1010 Vienna",
114 | "shopCountry": "Austria",
115 | "shopLatitude": "48.200972",
116 | "shopLongitude": "16.368528",
117 | "shopActive": true
118 | },
119 | {
120 | "shopName": "McDonald's Johannesgasse",
121 | "shopAddress": "Johannesgasse 3",
122 | "shopPLZ": "1010 Vienna",
123 | "shopCountry": "Austria",
124 | "shopLatitude": "48.205252",
125 | "shopLongitude": "16.371649",
126 | "shopActive": true
127 | },
128 | {
129 | "shopName": "McDonald's Mariahilfer Straße 1",
130 | "shopAddress": "Mariahilfer Straße 22-24",
131 | "shopPLZ": "1070 Vienna",
132 | "shopCountry": "Austria",
133 | "shopLatitude": "48.200860",
134 | "shopLongitude": "16.357434",
135 | "shopActive": true
136 | },
137 | {
138 | "shopName": "McDonald's Mariahilfer Straße 2",
139 | "shopAddress": "Mariahilfer Straße 85-87",
140 | "shopPLZ": "1070 Vienna",
141 | "shopCountry": "Austria",
142 | "shopLatitude": "48.197566",
143 | "shopLongitude": "16.348327",
144 | "shopActive": true
145 | },
146 | {
147 | "shopName": "McDonald's Westbahnhof",
148 | "shopAddress": "Europaplatz 2 OB 1.26",
149 | "shopPLZ": "1150 Vienna",
150 | "shopCountry": "Austria",
151 | "shopLatitude": "48.196285",
152 | "shopLongitude": "16.338262",
153 | "shopActive": true
154 | },
155 | {
156 | "shopName": "McDonald's Pilgrambrücke",
157 | "shopAddress": "Pilgrambrücke 1",
158 | "shopPLZ": "1050 Vienna",
159 | "shopCountry": "Austria",
160 | "shopLatitude": "48.192794",
161 | "shopLongitude": "16.354584",
162 | "shopActive": true
163 | },
164 | {
165 | "shopName": "McDonald's Thaliastraße",
166 | "shopAddress": "Thaliastraße 17",
167 | "shopPLZ": "1160 Vienna",
168 | "shopCountry": "Austria",
169 | "shopLatitude": "48.209025",
170 | "shopLongitude": "16.335059",
171 | "shopActive": true
172 | },
173 | {
174 | "shopName": "McDonald's Hernalser Gürtel",
175 | "shopAddress": "Stadtbahnbögen 82a-87",
176 | "shopPLZ": "1090 Vienna",
177 | "shopCountry": "Austria",
178 | "shopLatitude": "48.216086",
179 | "shopLongitude": "16.341460",
180 | "shopActive": true
181 | },
182 | {
183 | "shopName": "McDonald's Grinzing",
184 | "shopAddress": "Grinzinger Allee 3",
185 | "shopPLZ": "1190 Vienna",
186 | "shopCountry": "Austria",
187 | "shopLatitude": "48.246301",
188 | "shopLongitude": "16.342273",
189 | "shopActive": true
190 | },
191 | {
192 | "shopName": "McDonald's Johnstraße",
193 | "shopAddress": "Hütteldorfer Straße 81B/4",
194 | "shopPLZ": "1150 Vienna",
195 | "shopCountry": "Austria",
196 | "shopLatitude": "48.198866",
197 | "shopLongitude": "16.319411",
198 | "shopActive": true
199 | },
200 | {
201 | "shopName": "McDonald's Hadikgasse 1",
202 | "shopAddress": "Hadikgasse 62",
203 | "shopPLZ": "1140 Vienna",
204 | "shopCountry": "Austria",
205 | "shopLatitude": "48.188406",
206 | "shopLongitude": "16.303783",
207 | "shopActive": true
208 | },
209 | {
210 | "shopName": "McDonald's Hietzinger Kai",
211 | "shopAddress": "Hietzinger Kai 137",
212 | "shopPLZ": "1130 Vienna",
213 | "shopCountry": "Austria",
214 | "shopLatitude": "48.191507",
215 | "shopLongitude": "16.279168",
216 | "shopActive": true
217 | },
218 | {
219 | "shopName": "McDonald's Hadikgasse 2",
220 | "shopAddress": "Hadikgasse 254",
221 | "shopPLZ": "1140 Vienna",
222 | "shopCountry": "Austria",
223 | "shopLatitude": "48.192890",
224 | "shopLongitude": "16.276212",
225 | "shopActive": true
226 | },
227 | {
228 | "shopName": "McDonald's Meidling",
229 | "shopAddress": "Wilhelmstraße 64",
230 | "shopPLZ": "1120 Vienna",
231 | "shopCountry": "Austria",
232 | "shopLatitude": "48.174810",
233 | "shopLongitude": "16.331071",
234 | "shopActive": true
235 | },
236 | {
237 | "shopName": "McDonald's Margaretengürtel",
238 | "shopAddress": "Margaretengürtel 45",
239 | "shopPLZ": "1050 Vienna",
240 | "shopCountry": "Austria",
241 | "shopLatitude": "48.179553",
242 | "shopLongitude": "16.351150",
243 | "shopActive": true
244 | },
245 | {
246 | "shopName": "McDonald's Triester Straße",
247 | "shopAddress": "Triester Straße 70",
248 | "shopPLZ": "1100 Vienna",
249 | "shopCountry": "Austria",
250 | "shopLatitude": "48.165230",
251 | "shopLongitude": "16.346285",
252 | "shopActive": true
253 | },
254 | {
255 | "shopName": "McDonald's Verteilerkreis",
256 | "shopAddress": "Ludwig-von-Höhnel-Gasse 15",
257 | "shopPLZ": "1100 Vienna",
258 | "shopCountry": "Austria",
259 | "shopLatitude": "48.159443",
260 | "shopLongitude": "16.387097",
261 | "shopActive": true
262 | },
263 | {
264 | "shopName": "McDonald's Favoritenstraße 1",
265 | "shopAddress": "Favoritenstraße 130",
266 | "shopPLZ": "1100 Vienna",
267 | "shopCountry": "Austria",
268 | "shopLatitude": "48.175068",
269 | "shopLongitude": "16.377686",
270 | "shopActive": true
271 | },
272 | {
273 | "shopName": "McDonald's Favoritenstraße 2",
274 | "shopAddress": "Favoritenstraße 89",
275 | "shopPLZ": "1100 Vienna",
276 | "shopCountry": "Austria",
277 | "shopLatitude": "48.179838",
278 | "shopLongitude": "16.376108",
279 | "shopActive": true
280 | },
281 | {
282 | "shopName": "McDonald's Hauptbahnhof",
283 | "shopAddress": "EG, TOP 151",
284 | "shopPLZ": "1100 Vienna",
285 | "shopCountry": "Austria",
286 | "shopLatitude": "48.185476",
287 | "shopLongitude": "16.375235",
288 | "shopActive": true
289 | },
290 | {
291 | "shopName": "McDonald's Südtiroler Platz",
292 | "shopAddress": "Unterfahrung Südtiroler Platz B",
293 | "shopPLZ": "1040 Vienna",
294 | "shopCountry": "Austria",
295 | "shopLatitude": "48.185995",
296 | "shopLongitude": "16.374703",
297 | "shopActive": true
298 | },
299 | {
300 | "shopName": "McDonald's Donaustadtstraße",
301 | "shopAddress": "Donaustadtstraße 49",
302 | "shopPLZ": "1220 Vienna",
303 | "shopCountry": "Austria",
304 | "shopLatitude": "48.220003",
305 | "shopLongitude": "16.444164",
306 | "shopActive": true
307 | },
308 | {
309 | "shopName": "McDonald's Wagramer Straße",
310 | "shopAddress": "Wagramer Straße 54",
311 | "shopPLZ": "1220 Vienna",
312 | "shopCountry": "Austria",
313 | "shopLatitude": "48.239411",
314 | "shopLongitude": "16.431121",
315 | "shopActive": true
316 | },
317 | {
318 | "shopName": "McDonald's Donauzentrum",
319 | "shopAddress": "Wagramer Straße 81-83, TOP 320",
320 | "shopPLZ": "1220 Vienna",
321 | "shopCountry": "Austria",
322 | "shopLatitude": "48.242760",
323 | "shopLongitude": "16.435368",
324 | "shopActive": true
325 | },
326 | {
327 | "shopName": "McDonald's Floridsdorf",
328 | "shopAddress": "Schloßhofer Straße 13-15",
329 | "shopPLZ": "1210 Vienna",
330 | "shopCountry": "Austria",
331 | "shopLatitude": "48.257528",
332 | "shopLongitude": "16.400514",
333 | "shopActive": true
334 | },
335 | {
336 | "shopName": "McDonald's Leopoldau",
337 | "shopAddress": "Leopoldauer Straße 49",
338 | "shopPLZ": "1210 Vienna",
339 | "shopCountry": "Austria",
340 | "shopLatitude": "48.260205",
341 | "shopLongitude": "16.411159",
342 | "shopActive": true
343 | },
344 | {
345 | "shopName": "McDonald's Breitenlee",
346 | "shopAddress": "Breitenleer Str. S2",
347 | "shopPLZ": "1220 Vienna",
348 | "shopCountry": "Austria",
349 | "shopLatitude": "48.250124",
350 | "shopLongitude": "16.470861",
351 | "shopActive": true
352 | },
353 | {
354 | "shopName": "McDonald's Rautenweg",
355 | "shopAddress": "Rautenweg 2",
356 | "shopPLZ": "1220 Vienna",
357 | "shopCountry": "Austria",
358 | "shopLatitude": "48.264109",
359 | "shopLongitude": "16.456108",
360 | "shopActive": true
361 | },
362 | {
363 | "shopName": "McDonald's Brünnerstraße",
364 | "shopAddress": "Brünnerstraße 170",
365 | "shopPLZ": "1210 Vienna",
366 | "shopCountry": "Austria",
367 | "shopLatitude": "48.280578",
368 | "shopLongitude": "16.411830",
369 | "shopActive": true
370 | }
371 | ]
--------------------------------------------------------------------------------
/src/js/L.Control.Locate.js:
--------------------------------------------------------------------------------
1 | /*! Version: 0.70.0
2 | Copyright (c) 2016 Dominik Moritz */
3 |
4 | !function(t,i){"function"==typeof define&&define.amd?define(["leaflet"],t):"object"==typeof exports&&(void 0!==i&&i.L?module.exports=t(L):module.exports=t(require("leaflet"))),void 0!==i&&i.L&&(i.L.Control.Locate=t(L))}(function(r){function o(i,o,t){(t=t.split(" ")).forEach(function(t){r.DomUtil[i].call(this,o,t)})}function i(t,i){o("addClass",t,i)}function s(t,i){o("removeClass",t,i)}var t=r.Marker.extend({initialize:function(t,i){r.Util.setOptions(this,i),this._latlng=t,this.createIcon()},createIcon:function(){var t=this.options,i="";void 0!==t.color&&(i+="stroke:"+t.color+";"),void 0!==t.weight&&(i+="stroke-width:"+t.weight+";"),void 0!==t.fillColor&&(i+="fill:"+t.fillColor+";"),void 0!==t.fillOpacity&&(i+="fill-opacity:"+t.fillOpacity+";"),void 0!==t.opacity&&(i+="opacity:"+t.opacity+";");var o=this._getIconSVG(t,i);this._locationIcon=r.divIcon({className:o.className,html:o.svg,iconSize:[o.w,o.h]}),this.setIcon(this._locationIcon)},_getIconSVG:function(t,i){var o=t.radius,s=o+t.weight,e=2*s;return{className:"leaflet-control-locate-location",svg:' ',w:e,h:e}},setStyle:function(t){r.Util.setOptions(this,t),this.createIcon()}}),e=t.extend({initialize:function(t,i,o){r.Util.setOptions(this,o),this._latlng=t,this._heading=i,this.createIcon()},setHeading:function(t){this._heading=t},_getIconSVG:function(t,i){var o=t.radius,s=t.width+t.weight,e=2*(o+t.depth+t.weight),n="M0,0 l"+t.width/2+","+t.depth+" l-"+s+",0 z";return{className:"leaflet-control-locate-heading",svg:' ',w:s,h:e}}}),n=r.Control.extend({options:{position:"topleft",layer:void 0,setView:"untilPanOrZoom",keepCurrentZoomLevel:!1,getLocationBounds:function(t){return t.bounds},flyTo:!1,clickBehavior:{inView:"stop",outOfView:"setView",inViewNotFollowing:"inView"},returnToPrevBounds:!1,cacheLocation:!0,drawCircle:!0,drawMarker:!0,showCompass:!0,markerClass:t,compassClass:e,circleStyle:{className:"leaflet-control-locate-circle",color:"#136AEC",fillColor:"#136AEC",fillOpacity:.15,weight:0},markerStyle:{className:"leaflet-control-locate-marker",color:"#fff",fillColor:"#2A93EE",fillOpacity:1,weight:3,opacity:1,radius:9},compassStyle:{fillColor:"#2A93EE",fillOpacity:1,weight:0,color:"#fff",opacity:1,radius:9,width:9,depth:6},followCircleStyle:{},followMarkerStyle:{},followCompassStyle:{},icon:"gps-marker",iconLoading:"fa fa-spinner fa-spin",iconElementTag:"span",circlePadding:[0,0],metric:!0,createButtonCallback:function(t,i){var o=r.DomUtil.create("a","leaflet-bar-part leaflet-bar-part-single",t);return o.title=i.strings.title,{link:o,icon:r.DomUtil.create(i.iconElementTag,i.icon,o)}},onLocationError:function(t,i){alert(t.message)},onLocationOutsideMapBounds:function(t){t.stop(),alert(t.options.strings.outsideMapBoundsMsg)},showPopup:!0,strings:{title:"Show me where I am",metersUnit:"meters",feetUnit:"feet",popup:"You are within {distance} {unit} from this point",outsideMapBoundsMsg:"You seem located outside the boundaries of the map"},locateOptions:{maxZoom:1/0,watch:!0,setView:!1}},initialize:function(t){for(var i in t)"object"==typeof this.options[i]?r.extend(this.options[i],t[i]):this.options[i]=t[i];this.options.followMarkerStyle=r.extend({},this.options.markerStyle,this.options.followMarkerStyle),this.options.followCircleStyle=r.extend({},this.options.circleStyle,this.options.followCircleStyle),this.options.followCompassStyle=r.extend({},this.options.compassStyle,this.options.followCompassStyle)},onAdd:function(t){var i=r.DomUtil.create("div","leaflet-control-locate leaflet-bar leaflet-control");this._layer=this.options.layer||new r.LayerGroup,this._layer.addTo(t),this._event=void 0,this._compassHeading=null,this._prevBounds=null;var o=this.options.createButtonCallback(i,this.options);return this._link=o.link,this._icon=o.icon,r.DomEvent.on(this._link,"click",r.DomEvent.stopPropagation).on(this._link,"click",r.DomEvent.preventDefault).on(this._link,"click",this._onClick,this).on(this._link,"dblclick",r.DomEvent.stopPropagation),this._resetVariables(),this._map.on("unload",this._unload,this),i},_onClick:function(){this._justClicked=!0;var t=this._isFollowing();if(this._userPanned=!1,this._userZoomed=!1,this._active&&!this._event)this.stop();else if(this._active&&void 0!==this._event){var i=this.options.clickBehavior,o=i.outOfView;switch(this._map.getBounds().contains(this._event.latlng)&&(o=t?i.inView:i.inViewNotFollowing),i[o]&&(o=i[o]),o){case"setView":this.setView();break;case"stop":if(this.stop(),this.options.returnToPrevBounds)(this.options.flyTo?this._map.flyToBounds:this._map.fitBounds).bind(this._map)(this._prevBounds)}}else this.options.returnToPrevBounds&&(this._prevBounds=this._map.getBounds()),this.start();this._updateContainerStyle()},start:function(){this._activate(),this._event&&(this._drawMarker(this._map),this.options.setView&&this.setView()),this._updateContainerStyle()},stop:function(){this._deactivate(),this._cleanClasses(),this._resetVariables(),this._removeMarker()},stopFollowing:function(){this._userPanned=!0,this._updateContainerStyle(),this._drawMarker()},_activate:function(){if(!this._active&&(this._map.locate(this.options.locateOptions),this._active=!0,this._map.on("locationfound",this._onLocationFound,this),this._map.on("locationerror",this._onLocationError,this),this._map.on("dragstart",this._onDrag,this),this._map.on("zoomstart",this._onZoom,this),this._map.on("zoomend",this._onZoomEnd,this),this.options.showCompass)){var t="ondeviceorientationabsolute"in window;if(t||"ondeviceorientation"in window){function i(){r.DomEvent.on(window,t?"deviceorientationabsolute":"deviceorientation",o._onDeviceOrientation,o)}var o=this;DeviceOrientationEvent&&"function"==typeof DeviceOrientationEvent.requestPermission?DeviceOrientationEvent.requestPermission().then(function(t){"granted"===t&&i()}):i()}}},_deactivate:function(){this._map.stopLocate(),this._active=!1,this.options.cacheLocation||(this._event=void 0),this._map.off("locationfound",this._onLocationFound,this),this._map.off("locationerror",this._onLocationError,this),this._map.off("dragstart",this._onDrag,this),this._map.off("zoomstart",this._onZoom,this),this._map.off("zoomend",this._onZoomEnd,this),this.options.showCompass&&(this._compassHeading=null,"ondeviceorientationabsolute"in window?r.DomEvent.off(window,"deviceorientationabsolute",this._onDeviceOrientation,this):"ondeviceorientation"in window&&r.DomEvent.off(window,"deviceorientation",this._onDeviceOrientation,this))},setView:function(){if(this._drawMarker(),this._isOutsideMapBounds())this._event=void 0,this.options.onLocationOutsideMapBounds(this);else if(this.options.keepCurrentZoomLevel){(t=this.options.flyTo?this._map.flyTo:this._map.panTo).bind(this._map)([this._event.latitude,this._event.longitude])}else{var t=this.options.flyTo?this._map.flyToBounds:this._map.fitBounds;this._ignoreEvent=!0,t.bind(this._map)(this.options.getLocationBounds(this._event),{padding:this.options.circlePadding,maxZoom:this.options.locateOptions.maxZoom}),r.Util.requestAnimFrame(function(){this._ignoreEvent=!1},this)}},_drawCompass:function(){if(this._event){var t=this._event.latlng;if(this.options.showCompass&&t&&null!==this._compassHeading){var i=this._isFollowing()?this.options.followCompassStyle:this.options.compassStyle;this._compass?(this._compass.setLatLng(t),this._compass.setHeading(this._compassHeading),this._compass.setStyle&&this._compass.setStyle(i)):this._compass=new this.options.compassClass(t,this._compassHeading,i).addTo(this._layer)}!this._compass||this.options.showCompass&&null!==this._compassHeading||(this._compass.removeFrom(this._layer),this._compass=null)}},_drawMarker:function(){void 0===this._event.accuracy&&(this._event.accuracy=0);var t,i,o=this._event.accuracy,s=this._event.latlng;if(this.options.drawCircle){var e=this._isFollowing()?this.options.followCircleStyle:this.options.circleStyle;this._circle?this._circle.setLatLng(s).setRadius(o).setStyle(e):this._circle=r.circle(s,o,e).addTo(this._layer)}if(i=this.options.metric?(t=o.toFixed(0),this.options.strings.metersUnit):(t=(3.2808399*o).toFixed(0),this.options.strings.feetUnit),this.options.drawMarker){var n=this._isFollowing()?this.options.followMarkerStyle:this.options.markerStyle;this._marker?(this._marker.setLatLng(s),this._marker.setStyle&&this._marker.setStyle(n)):this._marker=new this.options.markerClass(s,n).addTo(this._layer)}this._drawCompass();var a=this.options.strings.popup;function h(){return"string"==typeof a?r.Util.template(a,{distance:t,unit:i}):"function"==typeof a?a({distance:t,unit:i}):a}this.options.showPopup&&a&&this._marker&&this._marker.bindPopup(h())._popup.setLatLng(s),this.options.showPopup&&a&&this._compass&&this._compass.bindPopup(h())._popup.setLatLng(s)},_removeMarker:function(){this._layer.clearLayers(),this._marker=void 0,this._circle=void 0},_unload:function(){this.stop(),this._map.off("unload",this._unload,this)},_setCompassHeading:function(t){!isNaN(parseFloat(t))&&isFinite(t)?(t=Math.round(t),this._compassHeading=t,r.Util.requestAnimFrame(this._drawCompass,this)):this._compassHeading=null},_onCompassNeedsCalibration:function(){this._setCompassHeading()},_onDeviceOrientation:function(t){this._active&&(t.webkitCompassHeading?this._setCompassHeading(t.webkitCompassHeading):t.absolute&&t.alpha&&this._setCompassHeading(360-t.alpha))},_onLocationError:function(t){3==t.code&&this.options.locateOptions.watch||(this.stop(),this.options.onLocationError(t,this))},_onLocationFound:function(t){if((!this._event||this._event.latlng.lat!==t.latlng.lat||this._event.latlng.lng!==t.latlng.lng||this._event.accuracy!==t.accuracy)&&this._active){switch(this._event=t,this._drawMarker(),this._updateContainerStyle(),this.options.setView){case"once":this._justClicked&&this.setView();break;case"untilPan":this._userPanned||this.setView();break;case"untilPanOrZoom":this._userPanned||this._userZoomed||this.setView();break;case"always":this.setView()}this._justClicked=!1}},_onDrag:function(){this._event&&!this._ignoreEvent&&(this._userPanned=!0,this._updateContainerStyle(),this._drawMarker())},_onZoom:function(){this._event&&!this._ignoreEvent&&(this._userZoomed=!0,this._updateContainerStyle(),this._drawMarker())},_onZoomEnd:function(){this._event&&this._drawCompass(),this._event&&!this._ignoreEvent&&this._marker&&!this._map.getBounds().pad(-.3).contains(this._marker.getLatLng())&&(this._userPanned=!0,this._updateContainerStyle(),this._drawMarker())},_isFollowing:function(){return!!this._active&&("always"===this.options.setView||("untilPan"===this.options.setView?!this._userPanned:"untilPanOrZoom"===this.options.setView?!this._userPanned&&!this._userZoomed:void 0))},_isOutsideMapBounds:function(){return void 0!==this._event&&(this._map.options.maxBounds&&!this._map.options.maxBounds.contains(this._event.latlng))},_updateContainerStyle:function(){this._container&&(this._active&&!this._event?this._setClasses("requesting"):this._isFollowing()?this._setClasses("following"):this._active?this._setClasses("active"):this._cleanClasses())},_setClasses:function(t){"requesting"==t?(s(this._container,"active following"),i(this._container,"requesting"),s(this._icon,this.options.icon),i(this._icon,this.options.iconLoading)):"active"==t?(s(this._container,"requesting following"),i(this._container,"active"),s(this._icon,this.options.iconLoading),i(this._icon,this.options.icon)):"following"==t&&(s(this._container,"requesting"),i(this._container,"active following"),s(this._icon,this.options.iconLoading),i(this._icon,this.options.icon))},_cleanClasses:function(){r.DomUtil.removeClass(this._container,"requesting"),r.DomUtil.removeClass(this._container,"active"),r.DomUtil.removeClass(this._container,"following"),s(this._icon,this.options.iconLoading),i(this._icon,this.options.icon)},_resetVariables:function(){this._active=!1,this._justClicked=!1,this._userPanned=!1,this._userZoomed=!1}});return r.control.locate=function(t){return new r.Control.Locate(t)},n},window);
5 | //# sourceMappingURL=L.Control.Locate.min.js.map
--------------------------------------------------------------------------------
/src/css/leaflet.css:
--------------------------------------------------------------------------------
1 | .leaflet-pane,
2 | .leaflet-tile,
3 | .leaflet-marker-icon,
4 | .leaflet-marker-shadow,
5 | .leaflet-tile-container,
6 | .leaflet-pane > svg,
7 | .leaflet-pane > canvas,
8 | .leaflet-zoom-box,
9 | .leaflet-image-layer,
10 | .leaflet-layer {
11 | position: absolute;
12 | left: 0;
13 | top: 0;
14 | }
15 | .leaflet-container {
16 | overflow: hidden;
17 | }
18 | .leaflet-tile,
19 | .leaflet-marker-icon,
20 | .leaflet-marker-shadow {
21 | -webkit-user-select: none;
22 | -moz-user-select: none;
23 | user-select: none;
24 | -webkit-user-drag: none;
25 | }
26 | /* Safari renders non-retina tile on retina better with this, but Chrome is worse */
27 | .leaflet-safari .leaflet-tile {
28 | image-rendering: -webkit-optimize-contrast;
29 | }
30 | /* hack that prevents hw layers "stretching" when loading new tiles */
31 | .leaflet-safari .leaflet-tile-container {
32 | width: 1600px;
33 | height: 1600px;
34 | -webkit-transform-origin: 0 0;
35 | }
36 | .leaflet-marker-icon,
37 | .leaflet-marker-shadow {
38 | display: block;
39 | }
40 | /* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
41 | /* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
42 | .leaflet-container .leaflet-overlay-pane svg,
43 | .leaflet-container .leaflet-marker-pane img,
44 | .leaflet-container .leaflet-shadow-pane img,
45 | .leaflet-container .leaflet-tile-pane img,
46 | .leaflet-container img.leaflet-image-layer {
47 | max-width: none !important;
48 | }
49 |
50 | .leaflet-container.leaflet-touch-zoom {
51 | -ms-touch-action: pan-x pan-y;
52 | touch-action: pan-x pan-y;
53 | }
54 | .leaflet-container.leaflet-touch-drag {
55 | -ms-touch-action: pinch-zoom;
56 | }
57 | .leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
58 | -ms-touch-action: none;
59 | touch-action: none;
60 | }
61 | .leaflet-container {
62 | -webkit-tap-highlight-color: transparent;
63 | }
64 | .leaflet-container a {
65 | -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
66 | }
67 | .leaflet-tile {
68 | filter: inherit;
69 | visibility: hidden;
70 | }
71 | .leaflet-tile-loaded {
72 | visibility: inherit;
73 | }
74 | .leaflet-zoom-box {
75 | width: 0;
76 | height: 0;
77 | -moz-box-sizing: border-box;
78 | box-sizing: border-box;
79 | z-index: 800;
80 | }
81 | /* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
82 | .leaflet-overlay-pane svg {
83 | -moz-user-select: none;
84 | }
85 |
86 | .leaflet-pane { z-index: 400; }
87 |
88 | .leaflet-tile-pane { z-index: 200; }
89 | .leaflet-overlay-pane { z-index: 400; }
90 | .leaflet-shadow-pane { z-index: 500; }
91 | .leaflet-marker-pane { z-index: 600; }
92 | .leaflet-tooltip-pane { z-index: 650; }
93 | .leaflet-popup-pane { z-index: 700; }
94 |
95 | .leaflet-map-pane canvas { z-index: 100; }
96 | .leaflet-map-pane svg { z-index: 200; }
97 |
98 | .leaflet-vml-shape {
99 | width: 1px;
100 | height: 1px;
101 | }
102 | .lvml {
103 | behavior: url(#default#VML);
104 | display: inline-block;
105 | position: absolute;
106 | }
107 |
108 |
109 | /* control positioning */
110 |
111 | .leaflet-control {
112 | position: relative;
113 | z-index: 800;
114 | pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
115 | pointer-events: auto;
116 | }
117 | .leaflet-top,
118 | .leaflet-bottom {
119 | position: absolute;
120 | z-index: 1000;
121 | pointer-events: none;
122 | }
123 | .leaflet-top {
124 | top: 0;
125 | }
126 | .leaflet-right {
127 | right: 0;
128 | }
129 | .leaflet-bottom {
130 | bottom: 0;
131 | }
132 | .leaflet-left {
133 | left: 0;
134 | }
135 | .leaflet-control {
136 | float: left;
137 | clear: both;
138 | }
139 | .leaflet-right .leaflet-control {
140 | float: right;
141 | }
142 | .leaflet-top .leaflet-control {
143 | margin-top: 10px;
144 | }
145 | .leaflet-bottom .leaflet-control {
146 | margin-bottom: 10px;
147 | }
148 | .leaflet-left .leaflet-control {
149 | margin-left: 10px;
150 | }
151 | .leaflet-right .leaflet-control {
152 | margin-right: 10px;
153 | }
154 |
155 |
156 | /* zoom and fade animations */
157 |
158 | .leaflet-fade-anim .leaflet-tile {
159 | will-change: opacity;
160 | }
161 | .leaflet-fade-anim .leaflet-popup {
162 | opacity: 0;
163 | -webkit-transition: opacity 0.2s linear;
164 | -moz-transition: opacity 0.2s linear;
165 | -o-transition: opacity 0.2s linear;
166 | transition: opacity 0.2s linear;
167 | }
168 | .leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
169 | opacity: 1;
170 | }
171 | .leaflet-zoom-animated {
172 | -webkit-transform-origin: 0 0;
173 | -ms-transform-origin: 0 0;
174 | transform-origin: 0 0;
175 | }
176 | .leaflet-zoom-anim .leaflet-zoom-animated {
177 | will-change: transform;
178 | }
179 | .leaflet-zoom-anim .leaflet-zoom-animated {
180 | -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
181 | -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
182 | -o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1);
183 | transition: transform 0.25s cubic-bezier(0,0,0.25,1);
184 | }
185 | .leaflet-zoom-anim .leaflet-tile,
186 | .leaflet-pan-anim .leaflet-tile {
187 | -webkit-transition: none;
188 | -moz-transition: none;
189 | -o-transition: none;
190 | transition: none;
191 | }
192 |
193 | .leaflet-zoom-anim .leaflet-zoom-hide {
194 | visibility: hidden;
195 | }
196 |
197 |
198 | /* cursors */
199 |
200 | .leaflet-interactive {
201 | cursor: pointer;
202 | }
203 | .leaflet-grab {
204 | cursor: -webkit-grab;
205 | cursor: -moz-grab;
206 | }
207 | .leaflet-crosshair,
208 | .leaflet-crosshair .leaflet-interactive {
209 | cursor: crosshair;
210 | }
211 | .leaflet-popup-pane,
212 | .leaflet-control {
213 | cursor: auto;
214 | }
215 | .leaflet-dragging .leaflet-grab,
216 | .leaflet-dragging .leaflet-grab .leaflet-interactive,
217 | .leaflet-dragging .leaflet-marker-draggable {
218 | cursor: move;
219 | cursor: -webkit-grabbing;
220 | cursor: -moz-grabbing;
221 | }
222 |
223 | /* marker & overlays interactivity */
224 | .leaflet-marker-icon,
225 | .leaflet-marker-shadow,
226 | .leaflet-image-layer,
227 | .leaflet-pane > svg path,
228 | .leaflet-tile-container {
229 | pointer-events: none;
230 | }
231 |
232 | .leaflet-marker-icon.leaflet-interactive,
233 | .leaflet-image-layer.leaflet-interactive,
234 | .leaflet-pane > svg path.leaflet-interactive {
235 | pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
236 | pointer-events: auto;
237 | }
238 |
239 | /* visual tweaks */
240 |
241 | .leaflet-container {
242 | background: #ddd;
243 | outline: 0;
244 | }
245 | .leaflet-container a {
246 | color: #0078A8;
247 | }
248 | .leaflet-container a.leaflet-active {
249 | outline: 2px solid orange;
250 | }
251 | .leaflet-zoom-box {
252 | border: 2px dotted #38f;
253 | background: rgba(255,255,255,0.5);
254 | }
255 |
256 |
257 | /* general typography */
258 | .leaflet-container {
259 | font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
260 | }
261 |
262 |
263 | /* general toolbar styles */
264 |
265 | .leaflet-bar {
266 | box-shadow: 0 1px 5px rgba(0,0,0,0.65);
267 | border-radius: 4px;
268 | }
269 | .leaflet-bar a,
270 | .leaflet-bar a:hover {
271 | background-color: #fff;
272 | border-bottom: 1px solid #ccc;
273 | width: 26px;
274 | height: 26px;
275 | line-height: 26px;
276 | display: block;
277 | text-align: center;
278 | text-decoration: none;
279 | color: black;
280 | }
281 | .leaflet-bar a,
282 | .leaflet-control-layers-toggle {
283 | background-position: 50% 50%;
284 | background-repeat: no-repeat;
285 | display: block;
286 | }
287 | .leaflet-bar a:hover {
288 | background-color: #f4f4f4;
289 | }
290 | .leaflet-bar a:first-child {
291 | border-top-left-radius: 4px;
292 | border-top-right-radius: 4px;
293 | }
294 | .leaflet-bar a:last-child {
295 | border-bottom-left-radius: 4px;
296 | border-bottom-right-radius: 4px;
297 | border-bottom: none;
298 | }
299 | .leaflet-bar a.leaflet-disabled {
300 | cursor: default;
301 | background-color: #f4f4f4;
302 | color: #bbb;
303 | }
304 |
305 | .leaflet-touch .leaflet-bar a {
306 | width: 30px;
307 | height: 30px;
308 | line-height: 30px;
309 | }
310 | .leaflet-touch .leaflet-bar a:first-child {
311 | border-top-left-radius: 2px;
312 | border-top-right-radius: 2px;
313 | }
314 | .leaflet-touch .leaflet-bar a:last-child {
315 | border-bottom-left-radius: 2px;
316 | border-bottom-right-radius: 2px;
317 | }
318 |
319 | /* zoom control */
320 |
321 | .leaflet-control-zoom-in,
322 | .leaflet-control-zoom-out {
323 | font: bold 18px 'Lucida Console', Monaco, monospace;
324 | text-indent: 1px;
325 | }
326 |
327 | .leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
328 | font-size: 22px;
329 | }
330 |
331 |
332 | /* layers control */
333 |
334 | .leaflet-control-layers {
335 | box-shadow: 0 1px 5px rgba(0,0,0,0.4);
336 | background: #fff;
337 | border-radius: 5px;
338 | }
339 | .leaflet-control-layers-toggle {
340 | background-image: url(images/layers.png);
341 | width: 36px;
342 | height: 36px;
343 | }
344 | .leaflet-retina .leaflet-control-layers-toggle {
345 | background-image: url(images/layers-2x.png);
346 | background-size: 26px 26px;
347 | }
348 | .leaflet-touch .leaflet-control-layers-toggle {
349 | width: 44px;
350 | height: 44px;
351 | }
352 | .leaflet-control-layers .leaflet-control-layers-list,
353 | .leaflet-control-layers-expanded .leaflet-control-layers-toggle {
354 | display: none;
355 | }
356 | .leaflet-control-layers-expanded .leaflet-control-layers-list {
357 | display: block;
358 | position: relative;
359 | }
360 | .leaflet-control-layers-expanded {
361 | padding: 6px 10px 6px 6px;
362 | color: #333;
363 | background: #fff;
364 | }
365 | .leaflet-control-layers-scrollbar {
366 | overflow-y: scroll;
367 | overflow-x: hidden;
368 | padding-right: 5px;
369 | }
370 | .leaflet-control-layers-selector {
371 | margin-top: 2px;
372 | position: relative;
373 | top: 1px;
374 | }
375 | .leaflet-control-layers label {
376 | display: block;
377 | }
378 | .leaflet-control-layers-separator {
379 | height: 0;
380 | border-top: 1px solid #ddd;
381 | margin: 5px -10px 5px -6px;
382 | }
383 |
384 | /* Default icon URLs */
385 | .leaflet-default-icon-path {
386 | background-image: url(/img/marker-icon.png);
387 | }
388 |
389 |
390 | /* attribution and scale controls */
391 |
392 | .leaflet-container .leaflet-control-attribution {
393 | background: #fff;
394 | background: rgba(255, 255, 255, 0.7);
395 | margin: 0;
396 | }
397 | .leaflet-control-attribution,
398 | .leaflet-control-scale-line {
399 | padding: 0 5px;
400 | color: #333;
401 | }
402 | .leaflet-control-attribution a {
403 | text-decoration: none;
404 | }
405 | .leaflet-control-attribution a:hover {
406 | text-decoration: underline;
407 | }
408 | .leaflet-container .leaflet-control-attribution,
409 | .leaflet-container .leaflet-control-scale {
410 | font-size: 11px;
411 | }
412 | .leaflet-left .leaflet-control-scale {
413 | margin-left: 5px;
414 | }
415 | .leaflet-bottom .leaflet-control-scale {
416 | margin-bottom: 5px;
417 | }
418 | .leaflet-control-scale-line {
419 | border: 2px solid #777;
420 | border-top: none;
421 | line-height: 1.1;
422 | padding: 2px 5px 1px;
423 | font-size: 11px;
424 | white-space: nowrap;
425 | overflow: hidden;
426 | -moz-box-sizing: border-box;
427 | box-sizing: border-box;
428 |
429 | background: #fff;
430 | background: rgba(255, 255, 255, 0.5);
431 | }
432 | .leaflet-control-scale-line:not(:first-child) {
433 | border-top: 2px solid #777;
434 | border-bottom: none;
435 | margin-top: -2px;
436 | }
437 | .leaflet-control-scale-line:not(:first-child):not(:last-child) {
438 | border-bottom: 2px solid #777;
439 | }
440 |
441 | .leaflet-touch .leaflet-control-attribution,
442 | .leaflet-touch .leaflet-control-layers,
443 | .leaflet-touch .leaflet-bar {
444 | box-shadow: none;
445 | }
446 | .leaflet-touch .leaflet-control-layers,
447 | .leaflet-touch .leaflet-bar {
448 | border: 2px solid rgba(0,0,0,0.2);
449 | background-clip: padding-box;
450 | }
451 |
452 |
453 | /* popup */
454 |
455 | .leaflet-popup {
456 | position: absolute;
457 | text-align: center;
458 | margin-bottom: 20px;
459 | }
460 | .leaflet-popup-content-wrapper {
461 | padding: 1px;
462 | text-align: left;
463 | border-radius: 12px;
464 | }
465 | .leaflet-popup-content {
466 | margin: 13px 19px;
467 | line-height: 1.4;
468 | }
469 | .leaflet-popup-content p {
470 | margin: 18px 0;
471 | }
472 | .leaflet-popup-tip-container {
473 | width: 40px;
474 | height: 20px;
475 | position: absolute;
476 | left: 50%;
477 | margin-left: -20px;
478 | overflow: hidden;
479 | pointer-events: none;
480 | }
481 | .leaflet-popup-tip {
482 | width: 17px;
483 | height: 17px;
484 | padding: 1px;
485 |
486 | margin: -10px auto 0;
487 |
488 | -webkit-transform: rotate(45deg);
489 | -moz-transform: rotate(45deg);
490 | -ms-transform: rotate(45deg);
491 | -o-transform: rotate(45deg);
492 | transform: rotate(45deg);
493 | }
494 | .leaflet-popup-content-wrapper,
495 | .leaflet-popup-tip {
496 | background: white;
497 | color: #333;
498 | box-shadow: 0 3px 14px rgba(0,0,0,0.4);
499 | }
500 | .leaflet-container a.leaflet-popup-close-button {
501 | position: absolute;
502 | top: 0;
503 | right: 0;
504 | padding: 4px 4px 0 0;
505 | border: none;
506 | text-align: center;
507 | width: 18px;
508 | height: 14px;
509 | font: 16px/14px Tahoma, Verdana, sans-serif;
510 | color: #c3c3c3;
511 | text-decoration: none;
512 | font-weight: bold;
513 | background: transparent;
514 | }
515 | .leaflet-container a.leaflet-popup-close-button:hover {
516 | color: #999;
517 | }
518 | .leaflet-popup-scrolled {
519 | overflow: auto;
520 | border-bottom: 1px solid #ddd;
521 | border-top: 1px solid #ddd;
522 | }
523 |
524 | .leaflet-oldie .leaflet-popup-content-wrapper {
525 | zoom: 1;
526 | }
527 | .leaflet-oldie .leaflet-popup-tip {
528 | width: 24px;
529 | margin: 0 auto;
530 |
531 | -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
532 | filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
533 | }
534 | .leaflet-oldie .leaflet-popup-tip-container {
535 | margin-top: -1px;
536 | }
537 |
538 | .leaflet-oldie .leaflet-control-zoom,
539 | .leaflet-oldie .leaflet-control-layers,
540 | .leaflet-oldie .leaflet-popup-content-wrapper,
541 | .leaflet-oldie .leaflet-popup-tip {
542 | border: 1px solid #999;
543 | }
544 |
545 |
546 | /* div icon */
547 |
548 | .leaflet-div-icon {
549 | background: #fff;
550 | border: 1px solid #666;
551 | }
552 |
553 |
554 | /* Tooltip */
555 | /* Base styles for the element that has a tooltip */
556 | .leaflet-tooltip {
557 | position: absolute;
558 | padding: 6px;
559 | background-color: #fff;
560 | border: 1px solid #fff;
561 | border-radius: 3px;
562 | color: #222;
563 | white-space: nowrap;
564 | -webkit-user-select: none;
565 | -moz-user-select: none;
566 | -ms-user-select: none;
567 | user-select: none;
568 | pointer-events: none;
569 | box-shadow: 0 1px 3px rgba(0,0,0,0.4);
570 | }
571 | .leaflet-tooltip.leaflet-clickable {
572 | cursor: pointer;
573 | pointer-events: auto;
574 | }
575 | .leaflet-tooltip-top:before,
576 | .leaflet-tooltip-bottom:before,
577 | .leaflet-tooltip-left:before,
578 | .leaflet-tooltip-right:before {
579 | position: absolute;
580 | pointer-events: none;
581 | border: 6px solid transparent;
582 | background: transparent;
583 | content: "";
584 | }
585 |
586 | /* Directions */
587 |
588 | .leaflet-tooltip-bottom {
589 | margin-top: 6px;
590 | }
591 | .leaflet-tooltip-top {
592 | margin-top: -6px;
593 | }
594 | .leaflet-tooltip-bottom:before,
595 | .leaflet-tooltip-top:before {
596 | left: 50%;
597 | margin-left: -6px;
598 | }
599 | .leaflet-tooltip-top:before {
600 | bottom: 0;
601 | margin-bottom: -12px;
602 | border-top-color: #fff;
603 | }
604 | .leaflet-tooltip-bottom:before {
605 | top: 0;
606 | margin-top: -12px;
607 | margin-left: -6px;
608 | border-bottom-color: #fff;
609 | }
610 | .leaflet-tooltip-left {
611 | margin-left: -6px;
612 | }
613 | .leaflet-tooltip-right {
614 | margin-left: 6px;
615 | }
616 | .leaflet-tooltip-left:before,
617 | .leaflet-tooltip-right:before {
618 | top: 50%;
619 | margin-top: -6px;
620 | }
621 | .leaflet-tooltip-left:before {
622 | right: 0;
623 | margin-right: -12px;
624 | border-left-color: #fff;
625 | }
626 | .leaflet-tooltip-right:before {
627 | left: 0;
628 | margin-left: -12px;
629 | border-right-color: #fff;
630 | }
631 |
--------------------------------------------------------------------------------
/static/js/bootstrap.bundle.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v4.4.1 (https://getbootstrap.com/)
3 | * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("jquery")):"function"==typeof define&&define.amd?define(["exports","jquery"],t):t((e=e||self).bootstrap={},e.jQuery)}(this,function(e,p){"use strict";function i(e,t){for(var n=0;nthis._items.length-1||e<0))if(this._isSliding)p(this._element).one(V.SLID,function(){return t.to(e)});else{if(n===e)return this.pause(),void this.cycle();var i=n=i.clientWidth&&n>=i.clientHeight}),u=0l[e]&&!i.escapeWithReference&&(n=Math.min(h[t],l[e]-("right"===e?h.width:h.height))),Ye({},t,n)}};return c.forEach(function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";h=ze({},h,u[t](e))}),e.offsets.popper=h,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,i=t.reference,o=e.placement.split("-")[0],r=Math.floor,s=-1!==["top","bottom"].indexOf(o),a=s?"right":"bottom",l=s?"left":"top",c=s?"width":"height";return n[a]r(i[a])&&(e.offsets.popper[l]=r(i[a])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!gt(e.instance.modifiers,"arrow","keepTogether"))return e;var i=t.element;if("string"==typeof i){if(!(i=e.instance.popper.querySelector(i)))return e}else if(!e.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var o=e.placement.split("-")[0],r=e.offsets,s=r.popper,a=r.reference,l=-1!==["left","right"].indexOf(o),c=l?"height":"width",h=l?"Top":"Left",u=h.toLowerCase(),f=l?"left":"top",d=l?"bottom":"right",p=nt(i)[c];a[d]-ps[d]&&(e.offsets.popper[u]+=a[u]+p-s[d]),e.offsets.popper=Xe(e.offsets.popper);var m=a[u]+a[c]/2-p/2,g=ke(e.instance.popper),_=parseFloat(g["margin"+h],10),v=parseFloat(g["border"+h+"Width"],10),y=m-e.offsets.popper[u]-_-v;return y=Math.max(Math.min(s[c]-p,y),0),e.arrowElement=i,e.offsets.arrow=(Ye(n={},u,Math.round(y)),Ye(n,f,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(m,g){if(at(m.instance.modifiers,"inner"))return m;if(m.flipped&&m.placement===m.originalPlacement)return m;var _=Ze(m.instance.popper,m.instance.reference,g.padding,g.boundariesElement,m.positionFixed),v=m.placement.split("-")[0],y=it(v),E=m.placement.split("-")[1]||"",b=[];switch(g.behavior){case Et:b=[v,y];break;case bt:b=yt(v);break;case wt:b=yt(v,!0);break;default:b=g.behavior}return b.forEach(function(e,t){if(v!==e||b.length===t+1)return m;v=m.placement.split("-")[0],y=it(v);var n=m.offsets.popper,i=m.offsets.reference,o=Math.floor,r="left"===v&&o(n.right)>o(i.left)||"right"===v&&o(n.left)o(i.top)||"bottom"===v&&o(n.top)o(_.right),l=o(n.top)o(_.bottom),h="left"===v&&s||"right"===v&&a||"top"===v&&l||"bottom"===v&&c,u=-1!==["top","bottom"].indexOf(v),f=!!g.flipVariations&&(u&&"start"===E&&s||u&&"end"===E&&a||!u&&"start"===E&&l||!u&&"end"===E&&c),d=!!g.flipVariationsByContent&&(u&&"start"===E&&a||u&&"end"===E&&s||!u&&"start"===E&&c||!u&&"end"===E&&l),p=f||d;(r||h||p)&&(m.flipped=!0,(r||h)&&(v=b[t+1]),p&&(E=function(e){return"end"===e?"start":"start"===e?"end":e}(E)),m.placement=v+(E?"-"+E:""),m.offsets.popper=ze({},m.offsets.popper,ot(m.instance.popper,m.offsets.reference,m.placement)),m=st(m.instance.modifiers,m,"flip"))}),m},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],i=e.offsets,o=i.popper,r=i.reference,s=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return o[s?"left":"top"]=r[n]-(a?o[s?"width":"height"]:0),e.placement=it(t),e.offsets.popper=Xe(o),e}},hide:{order:800,enabled:!0,fn:function(e){if(!gt(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=rt(e.instance.modifiers,function(e){return"preventOverflow"===e.name}).boundaries;if(t.bottomn.right||t.top>n.bottom||t.rightdocument.documentElement.clientHeight;!this._isBodyOverflowing&&e&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!e&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var e=document.body.getBoundingClientRect();this._isBodyOverflowing=e.left+e.right
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Cn,popperConfig:null},Fn="show",Mn="out",Wn={HIDE:"hide"+Nn,HIDDEN:"hidden"+Nn,SHOW:"show"+Nn,SHOWN:"shown"+Nn,INSERTED:"inserted"+Nn,CLICK:"click"+Nn,FOCUSIN:"focusin"+Nn,FOCUSOUT:"focusout"+Nn,MOUSEENTER:"mouseenter"+Nn,MOUSELEAVE:"mouseleave"+Nn},Un="fade",Bn="show",qn=".tooltip-inner",Kn=".arrow",Qn="hover",Vn="focus",Yn="click",zn="manual",Xn=function(){function i(e,t){if("undefined"==typeof St)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=e,this.config=this._getConfig(t),this.tip=null,this._setListeners()}var e=i.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(e){if(this._isEnabled)if(e){var t=this.constructor.DATA_KEY,n=p(e.currentTarget).data(t);n||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),p(e.currentTarget).data(t,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(p(this.getTipElement()).hasClass(Bn))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),p.removeData(this.element,this.constructor.DATA_KEY),p(this.element).off(this.constructor.EVENT_KEY),p(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&p(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===p(this.element).css("display"))throw new Error("Please use show on visible elements");var e=p.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){p(this.element).trigger(e);var n=m.findShadowRoot(this.element),i=p.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=m.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&p(o).addClass(Un);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();p(o).data(this.constructor.DATA_KEY,this),p.contains(this.element.ownerDocument.documentElement,this.tip)||p(o).appendTo(l),p(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new St(this.element,o,this._getPopperConfig(a)),p(o).addClass(Bn),"ontouchstart"in document.documentElement&&p(document.body).children().on("mouseover",null,p.noop);var c=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,p(t.element).trigger(t.constructor.Event.SHOWN),e===Mn&&t._leave(null,t)};if(p(this.tip).hasClass(Un)){var h=m.getTransitionDurationFromElement(this.tip);p(this.tip).one(m.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},e.hide=function(e){function t(){n._hoverState!==Fn&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),p(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),e&&e()}var n=this,i=this.getTipElement(),o=p.Event(this.constructor.Event.HIDE);if(p(this.element).trigger(o),!o.isDefaultPrevented()){if(p(i).removeClass(Bn),"ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),this._activeTrigger[Yn]=!1,this._activeTrigger[Vn]=!1,this._activeTrigger[Qn]=!1,p(this.tip).hasClass(Un)){var r=m.getTransitionDurationFromElement(i);p(i).one(m.TRANSITION_END,t).emulateTransitionEnd(r)}else t();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(e){p(this.getTipElement()).addClass(Ln+"-"+e)},e.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},e.setContent=function(){var e=this.getTipElement();this.setElementContent(p(e.querySelectorAll(qn)),this.getTitle()),p(e).removeClass(Un+" "+Bn)},e.setElementContent=function(e,t){"object"!=typeof t||!t.nodeType&&!t.jquery?this.config.html?(this.config.sanitize&&(t=In(t,this.config.whiteList,this.config.sanitizeFn)),e.html(t)):e.text(t):this.config.html?p(t).parent().is(e)||e.empty().append(t):e.text(p(t).text())},e.getTitle=function(){var e=this.element.getAttribute("data-original-title");return e=e||("function"==typeof this.config.title?this.config.title.call(this.element):this.config.title)},e._getPopperConfig=function(e){var t=this;return l({},{placement:e,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:Kn},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(e){e.originalPlacement!==e.placement&&t._handlePopperPlacementChange(e)},onUpdate:function(e){return t._handlePopperPlacementChange(e)}},{},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=l({},e.offsets,{},t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:m.isElement(this.config.container)?p(this.config.container):p(document).find(this.config.container)},e._getAttachment=function(e){return Hn[e.toUpperCase()]},e._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(e){if("click"===e)p(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(e){return i.toggle(e)});else if(e!==zn){var t=e===Qn?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=e===Qn?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;p(i.element).on(t,i.config.selector,function(e){return i._enter(e)}).on(n,i.config.selector,function(e){return i._leave(e)})}}),this._hideModalHandler=function(){i.element&&i.hide()},p(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var e=typeof this.element.getAttribute("data-original-title");!this.element.getAttribute("title")&&"string"==e||(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(e,t){var n=this.constructor.DATA_KEY;(t=t||p(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),p(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusin"===e.type?Vn:Qn]=!0),p(t.getTipElement()).hasClass(Bn)||t._hoverState===Fn?t._hoverState=Fn:(clearTimeout(t._timeout),t._hoverState=Fn,t.config.delay&&t.config.delay.show?t._timeout=setTimeout(function(){t._hoverState===Fn&&t.show()},t.config.delay.show):t.show())},e._leave=function(e,t){var n=this.constructor.DATA_KEY;(t=t||p(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),p(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusout"===e.type?Vn:Qn]=!1),t._isWithActiveTrigger()||(clearTimeout(t._timeout),t._hoverState=Mn,t.config.delay&&t.config.delay.hide?t._timeout=setTimeout(function(){t._hoverState===Mn&&t.hide()},t.config.delay.hide):t.hide())},e._isWithActiveTrigger=function(){for(var e in this._activeTrigger)if(this._activeTrigger[e])return!0;return!1},e._getConfig=function(e){var t=p(this.element).data();return Object.keys(t).forEach(function(e){-1!==xn.indexOf(e)&&delete t[e]}),"number"==typeof(e=l({},this.constructor.Default,{},t,{},"object"==typeof e&&e?e:{})).delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),m.typeCheckConfig(An,e,this.constructor.DefaultType),e.sanitize&&(e.template=In(e.template,e.whiteList,e.sanitizeFn)),e},e._getDelegateConfig=function(){var e={};if(this.config)for(var t in this.config)this.constructor.Default[t]!==this.config[t]&&(e[t]=this.config[t]);return e},e._cleanTipClass=function(){var e=p(this.getTipElement()),t=e.attr("class").match(Pn);null!==t&&t.length&&e.removeClass(t.join(""))},e._handlePopperPlacementChange=function(e){var t=e.instance;this.tip=t.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(e.placement))},e._fixTransition=function(){var e=this.getTipElement(),t=this.config.animation;null===e.getAttribute("x-placement")&&(p(e).removeClass(Un),this.config.animation=!1,this.hide(),this.show(),this.config.animation=t)},i._jQueryInterface=function(n){return this.each(function(){var e=p(this).data(On),t="object"==typeof n&&n;if((e||!/dispose|hide/.test(n))&&(e||(e=new i(this,t),p(this).data(On,e)),"string"==typeof n)){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return Rn}},{key:"NAME",get:function(){return An}},{key:"DATA_KEY",get:function(){return On}},{key:"Event",get:function(){return Wn}},{key:"EVENT_KEY",get:function(){return Nn}},{key:"DefaultType",get:function(){return jn}}]),i}();p.fn[An]=Xn._jQueryInterface,p.fn[An].Constructor=Xn,p.fn[An].noConflict=function(){return p.fn[An]=kn,Xn._jQueryInterface};var Gn="popover",$n="bs.popover",Jn="."+$n,Zn=p.fn[Gn],ei="bs-popover",ti=new RegExp("(^|\\s)"+ei+"\\S+","g"),ni=l({},Xn.Default,{placement:"right",trigger:"click",content:"",template:''}),ii=l({},Xn.DefaultType,{content:"(string|element|function)"}),oi="fade",ri="show",si=".popover-header",ai=".popover-body",li={HIDE:"hide"+Jn,HIDDEN:"hidden"+Jn,SHOW:"show"+Jn,SHOWN:"shown"+Jn,INSERTED:"inserted"+Jn,CLICK:"click"+Jn,FOCUSIN:"focusin"+Jn,FOCUSOUT:"focusout"+Jn,MOUSEENTER:"mouseenter"+Jn,MOUSELEAVE:"mouseleave"+Jn},ci=function(e){function i(){return e.apply(this,arguments)||this}!function(e,t){e.prototype=Object.create(t.prototype),(e.prototype.constructor=e).__proto__=t}(i,e);var t=i.prototype;return t.isWithContent=function(){return this.getTitle()||this._getContent()},t.addAttachmentClass=function(e){p(this.getTipElement()).addClass(ei+"-"+e)},t.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},t.setContent=function(){var e=p(this.getTipElement());this.setElementContent(e.find(si),this.getTitle());var t=this._getContent();"function"==typeof t&&(t=t.call(this.element)),this.setElementContent(e.find(ai),t),e.removeClass(oi+" "+ri)},t._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},t._cleanTipClass=function(){var e=p(this.getTipElement()),t=e.attr("class").match(ti);null!==t&&0=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||e li > .active",qi='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Ki=".dropdown-toggle",Qi="> .dropdown-menu .active",Vi=function(){function i(e){this._element=e}var e=i.prototype;return e.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&p(this._element).hasClass(ji)||p(this._element).hasClass(Hi))){var e,i,t=p(this._element).closest(Wi)[0],o=m.getSelectorFromElement(this._element);if(t){var r="UL"===t.nodeName||"OL"===t.nodeName?Bi:Ui;i=(i=p.makeArray(p(t).find(r)))[i.length-1]}var s=p.Event(Pi.HIDE,{relatedTarget:this._element}),a=p.Event(Pi.SHOW,{relatedTarget:i});if(i&&p(i).trigger(s),p(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){o&&(e=document.querySelector(o)),this._activate(this._element,t);var l=function(){var e=p.Event(Pi.HIDDEN,{relatedTarget:n._element}),t=p.Event(Pi.SHOWN,{relatedTarget:i});p(i).trigger(e),p(n._element).trigger(t)};e?this._activate(e,e.parentNode,l):l()}}},e.dispose=function(){p.removeData(this._element,Ni),this._element=null},e._activate=function(e,t,n){function i(){return o._transitionComplete(e,r,n)}var o=this,r=(!t||"UL"!==t.nodeName&&"OL"!==t.nodeName?p(t).children(Ui):p(t).find(Bi))[0],s=n&&r&&p(r).hasClass(Ri);if(r&&s){var a=m.getTransitionDurationFromElement(r);p(r).removeClass(Fi).one(m.TRANSITION_END,i).emulateTransitionEnd(a)}else i()},e._transitionComplete=function(e,t,n){if(t){p(t).removeClass(ji);var i=p(t.parentNode).find(Qi)[0];i&&p(i).removeClass(ji),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!1)}if(p(e).addClass(ji),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!0),m.reflow(e),e.classList.contains(Ri)&&e.classList.add(Fi),e.parentNode&&p(e.parentNode).hasClass(xi)){var o=p(e).closest(Mi)[0];if(o){var r=[].slice.call(o.querySelectorAll(Ki));p(r).addClass(ji)}e.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var e=p(this),t=e.data(Ni);if(t||(t=new i(this),e.data(Ni,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),i}();p(document).on(Pi.CLICK_DATA_API,qi,function(e){e.preventDefault(),Vi._jQueryInterface.call(p(this),"show")}),p.fn.tab=Vi._jQueryInterface,p.fn.tab.Constructor=Vi,p.fn.tab.noConflict=function(){return p.fn.tab=Li,Vi._jQueryInterface};var Yi="toast",zi="bs.toast",Xi="."+zi,Gi=p.fn[Yi],$i={CLICK_DISMISS:"click.dismiss"+Xi,HIDE:"hide"+Xi,HIDDEN:"hidden"+Xi,SHOW:"show"+Xi,SHOWN:"shown"+Xi},Ji="fade",Zi="hide",eo="show",to="showing",no={animation:"boolean",autohide:"boolean",delay:"number"},io={animation:!0,autohide:!0,delay:500},oo='[data-dismiss="toast"]',ro=function(){function i(e,t){this._element=e,this._config=this._getConfig(t),this._timeout=null,this._setListeners()}var e=i.prototype;return e.show=function(){var e=this,t=p.Event($i.SHOW);if(p(this._element).trigger(t),!t.isDefaultPrevented()){this._config.animation&&this._element.classList.add(Ji);var n=function(){e._element.classList.remove(to),e._element.classList.add(eo),p(e._element).trigger($i.SHOWN),e._config.autohide&&(e._timeout=setTimeout(function(){e.hide()},e._config.delay))};if(this._element.classList.remove(Zi),m.reflow(this._element),this._element.classList.add(to),this._config.animation){var i=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,n).emulateTransitionEnd(i)}else n()}},e.hide=function(){if(this._element.classList.contains(eo)){var e=p.Event($i.HIDE);p(this._element).trigger(e),e.isDefaultPrevented()||this._close()}},e.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(eo)&&this._element.classList.remove(eo),p(this._element).off($i.CLICK_DISMISS),p.removeData(this._element,zi),this._element=null,this._config=null},e._getConfig=function(e){return e=l({},io,{},p(this._element).data(),{},"object"==typeof e&&e?e:{}),m.typeCheckConfig(Yi,e,this.constructor.DefaultType),e},e._setListeners=function(){var e=this;p(this._element).on($i.CLICK_DISMISS,oo,function(){return e.hide()})},e._close=function(){function e(){t._element.classList.add(Zi),p(t._element).trigger($i.HIDDEN)}var t=this;if(this._element.classList.remove(eo),this._config.animation){var n=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},i._jQueryInterface=function(n){return this.each(function(){var e=p(this),t=e.data(zi);if(t||(t=new i(this,"object"==typeof n&&n),e.data(zi,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n](this)}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"DefaultType",get:function(){return no}},{key:"Default",get:function(){return io}}]),i}();p.fn[Yi]=ro._jQueryInterface,p.fn[Yi].Constructor=ro,p.fn[Yi].noConflict=function(){return p.fn[Yi]=Gi,ro._jQueryInterface},e.Alert=_,e.Button=x,e.Carousel=he,e.Collapse=De,e.Dropdown=en,e.Modal=wn,e.Popover=ci,e.Scrollspy=Oi,e.Tab=Vi,e.Toast=ro,e.Tooltip=Xn,e.Util=m,Object.defineProperty(e,"__esModule",{value:!0})});
7 | //# sourceMappingURL=bootstrap.bundle.min.js.map
--------------------------------------------------------------------------------