diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..8380cd93 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,10 @@ +# configuration options for dependency updates +# https://help.github.com/en/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: +- package-ecosystem: bundler + directory: "/" + schedule: + interval: weekly + open-pull-requests-limit: 10 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..24cdf928 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,22 @@ +# https://github.com/actions/starter-workflows/blob/main/pages/jekyll-gh-pages.yml +name: Test build within pull requests + +on: pull_request + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Pages + uses: actions/configure-pages@v2 + - name: Build with Jekyll + uses: actions/jekyll-build-pages@v1 + with: + source: ./ + destination: ./_site diff --git a/Gemfile.lock b/Gemfile.lock index 2000d479..c49dc965 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,212 +1,254 @@ GEM remote: https://rubygems.org/ specs: - activesupport (4.2.9) - i18n (~> 0.7) - minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) - tzinfo (~> 1.1) - addressable (2.5.2) - public_suffix (>= 2.0.2, < 4.0) + activesupport (7.0.7.2) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + addressable (2.8.1) + public_suffix (>= 2.0.2, < 6.0) coffee-script (2.4.1) coffee-script-source execjs coffee-script-source (1.11.1) colorator (1.1.0) - ethon (0.10.1) - ffi (>= 1.3.0) - execjs (2.7.0) - faraday (0.13.1) - multipart-post (>= 1.2, < 3) - ffi (1.9.18) + commonmarker (0.23.10) + concurrent-ruby (1.2.2) + dnsruby (1.61.9) + simpleidn (~> 0.1) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + ethon (0.16.0) + ffi (>= 1.15.0) + eventmachine (1.2.7) + execjs (2.8.1) + faraday (2.7.4) + faraday-net_http (>= 2.0, < 3.1) + ruby2_keywords (>= 0.0.4) + faraday-net_http (3.0.2) + ffi (1.15.5) forwardable-extended (2.6.0) - gemoji (3.0.0) - github-pages (163) - activesupport (= 4.2.9) - github-pages-health-check (= 1.3.5) - jekyll (= 3.5.2) - jekyll-avatar (= 0.5.0) - jekyll-coffeescript (= 1.0.2) + gemoji (3.0.1) + github-pages (228) + github-pages-health-check (= 1.17.9) + jekyll (= 3.9.3) + jekyll-avatar (= 0.7.0) + jekyll-coffeescript (= 1.1.1) + jekyll-commonmark-ghpages (= 0.4.0) jekyll-default-layout (= 0.1.4) - jekyll-feed (= 0.9.2) - jekyll-gist (= 1.4.1) - jekyll-github-metadata (= 2.9.3) - jekyll-mentions (= 1.2.0) - jekyll-optional-front-matter (= 0.2.0) + jekyll-feed (= 0.15.1) + jekyll-gist (= 1.5.0) + jekyll-github-metadata (= 2.13.0) + jekyll-include-cache (= 0.2.1) + jekyll-mentions (= 1.6.0) + jekyll-optional-front-matter (= 0.3.2) jekyll-paginate (= 1.1.0) - jekyll-readme-index (= 0.1.0) - jekyll-redirect-from (= 0.12.1) - jekyll-relative-links (= 0.5.0) - jekyll-sass-converter (= 1.5.0) - jekyll-seo-tag (= 2.3.0) - jekyll-sitemap (= 1.1.1) - jekyll-swiss (= 0.4.0) - jekyll-theme-architect (= 0.1.0) - jekyll-theme-cayman (= 0.1.0) - jekyll-theme-dinky (= 0.1.0) - jekyll-theme-hacker (= 0.1.0) - jekyll-theme-leap-day (= 0.1.0) - jekyll-theme-merlot (= 0.1.0) - jekyll-theme-midnight (= 0.1.0) - jekyll-theme-minimal (= 0.1.0) - jekyll-theme-modernist (= 0.1.0) - jekyll-theme-primer (= 0.5.2) - jekyll-theme-slate (= 0.1.0) - jekyll-theme-tactile (= 0.1.0) - jekyll-theme-time-machine (= 0.1.0) - jekyll-titles-from-headings (= 0.4.0) - jemoji (= 0.8.1) - kramdown (= 1.13.2) - liquid (= 4.0.0) - listen (= 3.0.6) + jekyll-readme-index (= 0.3.0) + jekyll-redirect-from (= 0.16.0) + jekyll-relative-links (= 0.6.1) + jekyll-remote-theme (= 0.4.3) + jekyll-sass-converter (= 1.5.2) + jekyll-seo-tag (= 2.8.0) + jekyll-sitemap (= 1.4.0) + jekyll-swiss (= 1.0.0) + jekyll-theme-architect (= 0.2.0) + jekyll-theme-cayman (= 0.2.0) + jekyll-theme-dinky (= 0.2.0) + jekyll-theme-hacker (= 0.2.0) + jekyll-theme-leap-day (= 0.2.0) + jekyll-theme-merlot (= 0.2.0) + jekyll-theme-midnight (= 0.2.0) + jekyll-theme-minimal (= 0.2.0) + jekyll-theme-modernist (= 0.2.0) + jekyll-theme-primer (= 0.6.0) + jekyll-theme-slate (= 0.2.0) + jekyll-theme-tactile (= 0.2.0) + jekyll-theme-time-machine (= 0.2.0) + jekyll-titles-from-headings (= 0.5.3) + jemoji (= 0.12.0) + kramdown (= 2.3.2) + kramdown-parser-gfm (= 1.1.0) + liquid (= 4.0.4) mercenary (~> 0.3) - minima (= 2.1.1) - rouge (= 1.11.1) + minima (= 2.5.1) + nokogiri (>= 1.13.6, < 2.0) + rouge (= 3.26.0) terminal-table (~> 1.4) - github-pages-health-check (1.3.5) + github-pages-health-check (1.17.9) addressable (~> 2.3) - net-dns (~> 0.8) + dnsruby (~> 1.60) octokit (~> 4.0) - public_suffix (~> 2.0) - typhoeus (~> 0.7) - html-pipeline (2.7.1) + public_suffix (>= 3.0, < 5.0) + typhoeus (~> 1.3) + html-pipeline (2.14.3) activesupport (>= 2) nokogiri (>= 1.4) - i18n (0.8.6) - jekyll (3.5.2) + http_parser.rb (0.8.0) + i18n (1.14.1) + concurrent-ruby (~> 1.0) + jekyll (3.9.3) addressable (~> 2.4) colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (>= 0.7, < 2) jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 1.1) - kramdown (~> 1.3) + jekyll-watch (~> 2.0) + kramdown (>= 1.17, < 3) liquid (~> 4.0) mercenary (~> 0.3.3) pathutil (~> 0.9) - rouge (~> 1.7) + rouge (>= 1.7, < 4) safe_yaml (~> 1.0) - jekyll-avatar (0.5.0) - jekyll (~> 3.0) - jekyll-coffeescript (1.0.2) + jekyll-avatar (0.7.0) + jekyll (>= 3.0, < 5.0) + jekyll-coffeescript (1.1.1) coffee-script (~> 2.2) coffee-script-source (~> 1.11.1) + jekyll-commonmark (1.4.0) + commonmarker (~> 0.22) + jekyll-commonmark-ghpages (0.4.0) + commonmarker (~> 0.23.7) + jekyll (~> 3.9.0) + jekyll-commonmark (~> 1.4.0) + rouge (>= 2.0, < 5.0) jekyll-default-layout (0.1.4) jekyll (~> 3.0) - jekyll-feed (0.9.2) - jekyll (~> 3.3) - jekyll-gist (1.4.1) + jekyll-feed (0.15.1) + jekyll (>= 3.7, < 5.0) + jekyll-gist (1.5.0) octokit (~> 4.2) - jekyll-github-metadata (2.9.3) - jekyll (~> 3.1) + jekyll-github-metadata (2.13.0) + jekyll (>= 3.4, < 5.0) octokit (~> 4.0, != 4.4.0) - jekyll-mentions (1.2.0) - activesupport (~> 4.0) + jekyll-include-cache (0.2.1) + jekyll (>= 3.7, < 5.0) + jekyll-mentions (1.6.0) html-pipeline (~> 2.3) - jekyll (~> 3.0) - jekyll-optional-front-matter (0.2.0) - jekyll (~> 3.0) + jekyll (>= 3.7, < 5.0) + jekyll-optional-front-matter (0.3.2) + jekyll (>= 3.0, < 5.0) jekyll-paginate (1.1.0) - jekyll-readme-index (0.1.0) - jekyll (~> 3.0) - jekyll-redirect-from (0.12.1) - jekyll (~> 3.3) - jekyll-relative-links (0.5.0) - jekyll (~> 3.3) - jekyll-sass-converter (1.5.0) + jekyll-readme-index (0.3.0) + jekyll (>= 3.0, < 5.0) + jekyll-redirect-from (0.16.0) + jekyll (>= 3.3, < 5.0) + jekyll-relative-links (0.6.1) + jekyll (>= 3.3, < 5.0) + jekyll-remote-theme (0.4.3) + addressable (~> 2.0) + jekyll (>= 3.5, < 5.0) + jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) + rubyzip (>= 1.3.0, < 3.0) + jekyll-sass-converter (1.5.2) sass (~> 3.4) - jekyll-seo-tag (2.3.0) - jekyll (~> 3.3) - jekyll-sitemap (1.1.1) - jekyll (~> 3.3) - jekyll-swiss (0.4.0) - jekyll-theme-architect (0.1.0) - jekyll (~> 3.5) + jekyll-seo-tag (2.8.0) + jekyll (>= 3.8, < 5.0) + jekyll-sitemap (1.4.0) + jekyll (>= 3.7, < 5.0) + jekyll-swiss (1.0.0) + jekyll-theme-architect (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-cayman (0.1.0) - jekyll (~> 3.5) + jekyll-theme-cayman (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-dinky (0.1.0) - jekyll (~> 3.5) + jekyll-theme-dinky (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-hacker (0.1.0) - jekyll (~> 3.5) + jekyll-theme-hacker (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-leap-day (0.1.0) - jekyll (~> 3.5) + jekyll-theme-leap-day (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-merlot (0.1.0) - jekyll (~> 3.5) + jekyll-theme-merlot (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-midnight (0.1.0) - jekyll (~> 3.5) + jekyll-theme-midnight (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-minimal (0.1.0) - jekyll (~> 3.5) + jekyll-theme-minimal (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-modernist (0.1.0) - jekyll (~> 3.5) + jekyll-theme-modernist (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-primer (0.5.2) - jekyll (~> 3.5) + jekyll-theme-primer (0.6.0) + jekyll (> 3.5, < 5.0) jekyll-github-metadata (~> 2.9) - jekyll-seo-tag (~> 2.2) - jekyll-theme-slate (0.1.0) - jekyll (~> 3.5) jekyll-seo-tag (~> 2.0) - jekyll-theme-tactile (0.1.0) - jekyll (~> 3.5) + jekyll-theme-slate (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-tactile (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-time-machine (0.1.0) - jekyll (~> 3.5) + jekyll-theme-time-machine (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-titles-from-headings (0.4.0) - jekyll (~> 3.3) - jekyll-watch (1.5.0) - listen (~> 3.0, < 3.1) - jemoji (0.8.1) - activesupport (~> 4.0, >= 4.2.9) + jekyll-titles-from-headings (0.5.3) + jekyll (>= 3.3, < 5.0) + jekyll-watch (2.2.1) + listen (~> 3.0) + jemoji (0.12.0) gemoji (~> 3.0) html-pipeline (~> 2.2) - jekyll (>= 3.0) - kramdown (1.13.2) - liquid (4.0.0) - listen (3.0.6) - rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9.7) + jekyll (>= 3.0, < 5.0) + kramdown (2.3.2) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.4) + listen (3.8.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.3.6) - mini_portile2 (2.3.0) - minima (2.1.1) - jekyll (~> 3.3) - minitest (5.10.3) - multipart-post (2.0.0) - net-dns (0.8.0) - nokogiri (1.8.1) - mini_portile2 (~> 2.3.0) - octokit (4.7.0) - sawyer (~> 0.8.0, >= 0.5.3) - pathutil (0.16.0) + mini_portile2 (2.8.1) + minima (2.5.1) + jekyll (>= 3.5, < 5.0) + jekyll-feed (~> 0.9) + jekyll-seo-tag (~> 2.1) + minitest (5.19.0) + nokogiri (1.14.3) + mini_portile2 (~> 2.8.0) + racc (~> 1.4) + octokit (4.25.1) + faraday (>= 1, < 3) + sawyer (~> 0.9) + pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (2.0.5) - rb-fsevent (0.10.2) - rb-inotify (0.9.10) - ffi (>= 0.5.0, < 2) - rouge (1.11.1) - safe_yaml (1.0.4) - sass (3.5.2) + public_suffix (4.0.7) + racc (1.6.2) + rb-fsevent (0.11.2) + rb-inotify (0.10.1) + ffi (~> 1.0) + rexml (3.2.5) + rouge (3.26.0) + ruby2_keywords (0.0.5) + rubyzip (2.3.2) + safe_yaml (1.0.5) + sass (3.7.4) sass-listen (~> 4.0.0) sass-listen (4.0.0) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) - sawyer (0.8.1) - addressable (>= 2.3.5, < 2.6) - faraday (~> 0.8, < 1.0) + sawyer (0.9.2) + addressable (>= 2.3.5) + faraday (>= 0.17.3, < 3) + simpleidn (0.2.1) + unf (~> 0.1.4) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) - thread_safe (0.3.6) - typhoeus (0.8.0) - ethon (>= 0.8.0) - tzinfo (1.2.3) - thread_safe (~> 0.1) - unicode-display_width (1.3.0) + typhoeus (1.4.0) + ethon (>= 0.9.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + unf (0.1.4) + unf_ext + unf_ext (0.0.8.2) + unicode-display_width (1.8.0) PLATFORMS ruby @@ -216,4 +258,4 @@ DEPENDENCIES minima BUNDLED WITH - 1.15.4 + 1.16.1 diff --git a/LICENSE b/LICENSE index 0947cd3f..21f37c4a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2017 Friends Of REDAXO +Copyright (c) 2019 Friends Of REDAXO Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 69be287b..ee599c6b 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A map filled with people being involved in [REDAXO](https://redaxo.org) CMS. Hos 👉 __https://friendsofredaxo.github.io/community/__ -![Screenshot](https://raw.githubusercontent.com/FriendsOfREDAXO/community/assets/community_02.png) +![Screenshot](https://raw.githubusercontent.com/FriendsOfREDAXO/community/assets/community_03.png) The screenshot above shows what user entries look like. You’ll even get your own URL for your entry, which is awesome! Look, this is a [link to Markus](https://friendsofredaxo.github.io/community/#staabm). diff --git a/_config.yml b/_config.yml index 3e167ec7..06f98e68 100644 --- a/_config.yml +++ b/_config.yml @@ -30,6 +30,7 @@ exclude: - LICENSE - README.md - SETUP.md +- vendor # Compress HTML in Jekyll # http://jch.penibelst.de diff --git a/_data/last-modified.yml b/_data/last-modified.yml new file mode 100644 index 00000000..f6f49a20 --- /dev/null +++ b/_data/last-modified.yml @@ -0,0 +1,162 @@ +HarunurRashid: 1551763727 +Lp1950: 1550147880 +abraxas: 1550742404 +aeberhard: 1510130611 +akrys: 1511718303 +alexander-braendle: 1539162456 +alexplus: 1569314230 +alexwenz: 1511868370 +alissadreiling: 1512551845 +andreastietz: 1512740452 +ansichtsache: 1569319200 +averanga: 1509482954 +beategoeckeritz: 1512386776 +bertram: 1512143346 +bitbender: 1510062098 +bloep: 1509883850 +brandes-webdesign: 1512209670 +brinkers: 1553013120 +busch: 1550498810 +c-reiss: 1515066765 +chip75: 1510069203 +chrfickinger: 1511885643 +chris-s: 1536835913 +chrison94: 1510755727 +christophstaeblein: 1538989363 +claudiaheyer: 1509653328 +codedivision: 1510169069 +concept-check: 1539010515 +contrast-m: 1539005998 +cukabeka: 1512403530 +danielspringer: 1514465331 +danielweitenauer: 1509893743 +darwin: 1510068660 +dbruchmann: 1513846973 +dennzimm: 1512155323 +dergel: 1510068346 +design-to-use: 1510749404 +dpf-dd: 1536311346 +dtpop: 1509628358 +dweingart: 1537361106 +eace: 1510859714 +ebro: 1510068228 +elmono: 1523613961 +elricco: 1509883895 +erraiva: 1515763460 +erwin-oertel: 1539613732 +explorit: 1550181843 +f5alex: 1550137327 +falkomueller: 1512482953 +fanello73: 1510676749 +gege: 1550146878 +georgkaser: 1509640930 +geri: 1547053415 +gharlan: 1510067770 +gorkarod: 1557432425 +greatif: 1512549999 +gseilheimer: 1511529877 +guentertrapp: 1511382335 +hasenmeister: 1512480109 +heidecke: 1552920002 +heikeblum: 1512053602 +hirbod: 1510659082 +hommel: 1510687350 +hut: 1552172621 +ingowinter: 1509833298 +internetmacher: 1510071819 +interweave-media: 1510247924 +isospin: 1510130274 +jackomono: 1513266544 +jankern: 1512481206 +javanita: 1510740743 +jensfuchs: 1511949888 +joachimdoerr: 1509490831 +jochenflaskamp: 1512847684 +jonast: 1510330551 +juergeneggers: 1512402138 +justdun: 1538645548 +juttaschumann: 1557423019 +kabelwelten: 1510330744 +koala: 1512400894 +kobebeef: 1510067508 +kraft: 1510757322 +krisse85: 1511256712 +larsen: 1512477521 +lenathiele: 1511886078 +lexplatt: 1511957579 +lux: 1550215410 +madiko: 1511901947 +mahribar: 1559386449 +maikwagner: 1512489698 +manuel: 1547051907 +marcelscherkamp: 1511015737 +marcohanke: 1510153567 +marie: 1512551389 +mawiwa: 1519500921 +mbodon: 1510659217 +michaelkaser: 1510785608 +michaelwandel: 1510760949 +michaelziem: 1527010972 +michelle: 1523702501 +mschnieder: 1537448238 +muentel: 1510676903 +muenzberg-me: 1510576258 +nassedesign: 1523702926 +nhaessig: 1566475434 +nicomulitze: 1512742499 +nils: 1513844530 +novinet: 1549619420 +nuess: 1562254231 +olien: 1551357739 +omoses: 1547209081 +omphteliba: 1511446353 +palber: 1511958017 +paolo-reininghaus: 1519376606 +paulgoetz: 1569315690 +phoebusryan: 1539164936 +pmoeller: 1550694008 +polarpixel: 1510180843 +pschuchmann: 1515160428 +pschulze: 1511780491 +ritzfritz: 1567413274 +rkemmere: 1515067334 +rlisac: 1553007449 +rokito: 1512641909 +royalemotions: 1509895382 +rsee: 1510128852 +ruedigernitzsche: 1512386783 +ruerob: 1551962402 +sandra: 1510820442 +sardaykin: 1510062098 +schuer: 1509887697 +serhansidan: 1517586248 +shaack: 1510083585 +shauste: 1568120560 +silkehachmann: 1512139448 +simon: 1537349375 +skerbis: 1510677038 +slartibartfass: 1538381216 +staabm: 1509447316 +stefanf: 1524567902 +subunity: 1510069203 +svenkaemper: 1517407351 +tbaddade: 1510067770 +tgoellner: 1513151891 +thomas-engelbrecht: 1550216153 +thomasschwarz: 1512473744 +thorol: 1537722150 +thorstenklein: 1510761159 +thpet: 1512390153 +thuermer: 1537777585 +tkrahmer: 1537335301 +tobigerlach: 1510258673 +tomrotzek: 1510187966 +tyrant88: 1563460822 +vedatoezdemir: 1538393541 +viewsion: 1510742878 +wende60: 1512512522 +wolfrum: 1509975747 +xbluex: 1512551172 +xong: 1557393241 +xyzettgraphix: 1511781368 +ynamite: 1510748340 diff --git a/_directory/data/HarunurRashid/data.yml b/_directory/data/HarunurRashid/data.yml new file mode 100644 index 00000000..915cd18c --- /dev/null +++ b/_directory/data/HarunurRashid/data.yml @@ -0,0 +1,22 @@ +--- +# name (required) +# may be your real name or your nick +name: Harunur Rashid + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 23.681889 +longitude: 90.492160 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hey hey, I'm Harunur Rashid, interested in REDAXO i want to use it in my project" + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://github.com/HarunuRashid +--- diff --git a/_directory/data/Lp1950/data.yml b/_directory/data/Lp1950/data.yml new file mode 100644 index 00000000..098c4613 --- /dev/null +++ b/_directory/data/Lp1950/data.yml @@ -0,0 +1,16 @@ +--- +name: Wolfgang Liepold (Lp1950) + +latitude: 50.372199 +longitude: 8.894851 + +bio: "Hallo @all, + +sicher gehöre ich zu den Oldies hier, dabei liegt der Erstkontakt gerade mal zwei Monate zurĂŒck. + +Ziel: Die statische Seite meines Vereins durch eine REDAXO-Lösung ersetzen. + +Eine Herausforderung! Mit der absolut vorbildlichen UnterstĂŒtzung in der und durch die Community schaffen wir das." + +image: foto_liepold-wolfgang.jpg +--- diff --git a/_directory/data/Lp1950/foto_liepold-wolfgang.jpg b/_directory/data/Lp1950/foto_liepold-wolfgang.jpg new file mode 100644 index 00000000..db7eba99 Binary files /dev/null and b/_directory/data/Lp1950/foto_liepold-wolfgang.jpg differ diff --git a/_directory/data/Markus-GS/data.yml b/_directory/data/Markus-GS/data.yml new file mode 100644 index 00000000..b8112694 --- /dev/null +++ b/_directory/data/Markus-GS/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Markus-GS + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 52.02176 +longitude: 10.43169 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Generalist-Photographer-Programmer :). Working with Redaxo since ages, usually for NPO. See you!" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: jaguar.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://croq.de + +--- diff --git a/_directory/data/Markus-GS/jaguar.jpg b/_directory/data/Markus-GS/jaguar.jpg new file mode 100644 index 00000000..268e11c5 Binary files /dev/null and b/_directory/data/Markus-GS/jaguar.jpg differ diff --git a/_directory/data/NorbertKoch/data.yml b/_directory/data/NorbertKoch/data.yml new file mode 100644 index 00000000..b05e166c --- /dev/null +++ b/_directory/data/NorbertKoch/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick +name: Norbert Koch + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 47.875154 +longitude: 11.470724 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hallo! Ich habe bereits einige Seiten mit Redaxo umgesetzt. Aktuell bin ich Systemadministrator bei Huber PrĂ€zisionstechnik GmbH in Geretsried und arbeite dort (u.a.) gerade an einem neuen Webauftritt." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: https://avatars0.githubusercontent.com/u/60646104?s=300&v=4 + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.huber-gmbh.de +- http://www.huber-gmbh.org +- https://www.nobby-ka.de +--- diff --git a/_directory/data/SchneiderSIT/data.yml b/_directory/data/SchneiderSIT/data.yml new file mode 100644 index 00000000..9a139978 --- /dev/null +++ b/_directory/data/SchneiderSIT/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick +name: Kim Schneider + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 54.31684 +longitude: 10.17672 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hi, I'm Kim, a lead software engineer from Kiel, Germany. I'm the developer of the Ytils Open Source products." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: kim.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: + - https://www.ytils.com + - https://www.schneidersit.de + +--- \ No newline at end of file diff --git a/_directory/data/SchneiderSIT/kim.jpg b/_directory/data/SchneiderSIT/kim.jpg new file mode 100644 index 00000000..472a5f77 Binary files /dev/null and b/_directory/data/SchneiderSIT/kim.jpg differ diff --git a/_directory/data/abraxas/data.yml b/_directory/data/abraxas/data.yml new file mode 100644 index 00000000..3236c877 --- /dev/null +++ b/_directory/data/abraxas/data.yml @@ -0,0 +1,30 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Daniel Lange + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 52.7305 +longitude: 8.2885 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Moin moin. Ich beschĂ€ftige mich noch nicht so lange mit REDAXO (seit Ende 2018), bin aber ĂŒberrascht und total begeistert vom modularen Aufbau. Die Community hier ist stark! Finde ich mit am Wichtigsten. Gerade am Anfang braucht man hier und da noch ein paar Tipps! cYa so far ... AbRaXaS" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: johndoe.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://github.com/Jurgon1976 + + +--- diff --git a/_directory/data/alexander-braendle/alex.jpg b/_directory/data/alexander-braendle/alex.jpg new file mode 100644 index 00000000..4f082e76 Binary files /dev/null and b/_directory/data/alexander-braendle/alex.jpg differ diff --git a/_directory/data/alexander-braendle/data.yml b/_directory/data/alexander-braendle/data.yml new file mode 100644 index 00000000..6fda2b34 --- /dev/null +++ b/_directory/data/alexander-braendle/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Alexander BrĂ€ndle + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 47.383729 +longitude: 8.495420 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "GeschĂ€ftsfĂŒhrer der 100pro GmbH, Agentur fĂŒr visuelle Kommunikation. Wir nutzen ausschliesslich REDAXO als CMS und sind begeistert, dass es alles bietet und trotzdem nicht in die Quere kommt." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: alex.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.100pro.ch + +--- diff --git a/_directory/data/alexplus/data.yml b/_directory/data/alexplus/data.yml index 16980e3d..3b4988f8 100644 --- a/_directory/data/alexplus/data.yml +++ b/_directory/data/alexplus/data.yml @@ -1,12 +1,14 @@ --- name: Alexander Walther -latitude: 49.162068 -longitude: 9.229243 -bio: "SelbstĂ€ndiger Informationsdesigner und Webentwickler bei Pixelfirma. Schreibt Issues und Dokus rund ums Redaxo CMS und dessen Addons ;)" +latitude: 49.13631342020926 +longitude: 9.216501713743023 +bio: "REDAXO-Entwickler seit ĂŒber 2008. Entwickler des YForm Spamschutz-Addons, Speed Up! und weiterer REDAXO-Addons." image: https://www.gravatar.com/avatar/f7cf1b444916b70a31efdda731a78c39?s=200 links: - https://alexplus.de +- https://github.com/alxndr-w - https://github.com/alexplusde -- https://twitter.com/alexplus_de +- https://github.com/alexplusde/media_manager_responsive/ +- https://github.com/alexplusde/speed_up/ --- diff --git a/_directory/data/alexwenz/alexwenz.jpg b/_directory/data/alexwenz/alexwenz.jpg index 71b24994..e12f29d3 100644 Binary files a/_directory/data/alexwenz/alexwenz.jpg and b/_directory/data/alexwenz/alexwenz.jpg differ diff --git a/_directory/data/alissadreiling/data.yml b/_directory/data/alissadreiling/data.yml index 41d3664d..a6bbd769 100644 --- a/_directory/data/alissadreiling/data.yml +++ b/_directory/data/alissadreiling/data.yml @@ -13,7 +13,7 @@ longitude: 8.649196 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Hey, ich bin Alissa von der Denksportler Grafikmanufaktur, wir kĂŒmmern uns um die grafischen Belange von kleinen und mittelstĂ€ndigen Unternehmen. Wir arbeiten schon seit Jahren mit Redaxo und lieben es!" +bio: "Hey, ich bin Alissa von der Denksportler Grafikmanufaktur, wir kĂŒmmern uns um die grafischen Belange von kleinen und mittelstĂ€ndigen Unternehmen. Wir arbeiten schon seit Jahren mit REDAXO und lieben es!" # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/andreasotte/IMG_1165.jpg b/_directory/data/andreasotte/IMG_1165.jpg new file mode 100644 index 00000000..eb2ec0b4 Binary files /dev/null and b/_directory/data/andreasotte/IMG_1165.jpg differ diff --git a/_directory/data/andreasotte/data.yml b/_directory/data/andreasotte/data.yml new file mode 100644 index 00000000..b9ac7834 --- /dev/null +++ b/_directory/data/andreasotte/data.yml @@ -0,0 +1,30 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Andreas Otte + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 51.220857 +longitude: 6.902198 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hallo, Andreas, arbeite als Frontend-Developer und benutze REDAXO seit der Version 3.2" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: IMG_1165.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- http://www.otte.net +- https://github.com/otti242 + +--- diff --git a/_directory/data/andreastietz/data.yml b/_directory/data/andreastietz/data.yml index 34805e3a..bfb99998 100644 --- a/_directory/data/andreastietz/data.yml +++ b/_directory/data/andreastietz/data.yml @@ -13,7 +13,7 @@ longitude: 6.100 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "In addition to my work for Aachen's biggest marketing agency (where I work with Redaxo as well), I also build websites with Redaxo on a part-time basis. And this since 2005 with growing enthusiasm." +bio: "In addition to my work for Aachen's biggest marketing agency (where I work with REDAXO as well), I also build websites with REDAXO on a part-time basis. And this since 2005 with growing enthusiasm." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/andreastietz/tito_300.jpg b/_directory/data/andreastietz/tito_300.jpg index 1d31e253..998cff99 100644 Binary files a/_directory/data/andreastietz/tito_300.jpg and b/_directory/data/andreastietz/tito_300.jpg differ diff --git a/_directory/data/ansichtsache/data.yml b/_directory/data/ansichtsache/data.yml index 1d0fe31f..4b1555b6 100644 --- a/_directory/data/ansichtsache/data.yml +++ b/_directory/data/ansichtsache/data.yml @@ -13,7 +13,7 @@ longitude: 8.84 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Als Diplom-Grafik-Designer und Freelancer mit langjĂ€hriger Agenturerfahrung plane, gestalte und realisiere ich Web-Design – am liebsten in Redaxo!" +bio: "Als Diplom-Grafik-Designer und Freelancer mit langjĂ€hriger Agenturerfahrung plane, gestalte und realisiere ich Web-Design – am liebsten in REDAXO!" # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/ansichtsache/tizian_bauer_300.jpg b/_directory/data/ansichtsache/tizian_bauer_300.jpg index 0478ebd8..26a1a43e 100644 Binary files a/_directory/data/ansichtsache/tizian_bauer_300.jpg and b/_directory/data/ansichtsache/tizian_bauer_300.jpg differ diff --git a/_directory/data/averanga/data.yml b/_directory/data/averanga/data.yml index 08671fca..ccbcab81 100644 --- a/_directory/data/averanga/data.yml +++ b/_directory/data/averanga/data.yml @@ -12,7 +12,7 @@ longitude: -68.13219 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Hello, I work in front end web development for companies, I use Redaxo since version 5 and I am involved in translating the REDAXO backend into Spanish." +bio: "Hello, I work in front end web development for companies, I use REDAXO since version 5 and I am involved in translating the REDAXO backend into Spanish." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/ben-petroci/bp.jpg b/_directory/data/ben-petroci/bp.jpg new file mode 100644 index 00000000..66f939e1 Binary files /dev/null and b/_directory/data/ben-petroci/bp.jpg differ diff --git a/_directory/data/ben-petroci/data.yml b/_directory/data/ben-petroci/data.yml new file mode 100644 index 00000000..f6c45ff8 --- /dev/null +++ b/_directory/data/ben-petroci/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Ben Petroci + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 50.078217 +longitude: 8.239761 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Guten Tag, ich bin seit mehr als 10 Jahren Webentwickler. Durch mein Know-how unterstĂŒtze ich Webdesigner, Grafiker, Agenturen, Endkunden und ExistenzgrĂŒnder bei der Webentwicklung. Dabei benutze ich mit Begeisterung das Content-Management System REDAXO. Ich freue mich von Ihnen zu hören!" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: bp.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: + - https://www.bp-webmedia.de/ + +--- diff --git a/_directory/data/bertram/bertram.jpg b/_directory/data/bertram/bertram.jpg index 3ab9c54f..65bf4a5e 100644 Binary files a/_directory/data/bertram/bertram.jpg and b/_directory/data/bertram/bertram.jpg differ diff --git a/_directory/data/bertram/data.yml b/_directory/data/bertram/data.yml index dac326ae..ee0da4a8 100644 --- a/_directory/data/bertram/data.yml +++ b/_directory/data/bertram/data.yml @@ -13,7 +13,7 @@ longitude: 16.36356 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Bertram bewegt sich gerne in den Weiten des Webs. Redaxo nennt sich die Matrix in der er sich bewegt, weil „code is poetry“ und Bertram liest gerne. Er schaut auch gerne mal ins GrĂŒne, liebt aber die Stadt, die gut aufgelegt auch einmal zum Tanzen einlĂ€dt." +bio: "Bertram bewegt sich gerne in den Weiten des Webs. REDAXO nennt sich die Matrix in der er sich bewegt, weil „code is poetry“ und Bertram liest gerne. Er schaut auch gerne mal ins GrĂŒne, liebt aber die Stadt, die gut aufgelegt auch einmal zum Tanzen einlĂ€dt." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/brandes-webdesign/data.yml b/_directory/data/brandes-webdesign/data.yml index f6eb0bff..563a5cc6 100644 --- a/_directory/data/brandes-webdesign/data.yml +++ b/_directory/data/brandes-webdesign/data.yml @@ -12,7 +12,7 @@ longitude: 6.700444 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Redaxo Programierer seit 2007. Ich setze fĂŒr Agenturen und Grafiker deren Designvorlagen 1:1 fĂŒrs CMS Redaxo um und erstelle dafĂŒr responsive Templates, sowie die passenden Module und Addons." +bio: "REDAXO Programierer seit 2007. Ich setze fĂŒr Agenturen und Grafiker deren Designvorlagen 1:1 fĂŒrs CMS REDAXO um und erstelle dafĂŒr responsive Templates, sowie die passenden Module und Addons." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (like 'https://www.gravatar.com/avatar/{HASH}') diff --git a/_directory/data/brandes-webdesign/mirco_brandes.jpg b/_directory/data/brandes-webdesign/mirco_brandes.jpg index 0c36db0e..ee9126bc 100644 Binary files a/_directory/data/brandes-webdesign/mirco_brandes.jpg and b/_directory/data/brandes-webdesign/mirco_brandes.jpg differ diff --git a/_directory/data/brinkers/data.yml b/_directory/data/brinkers/data.yml new file mode 100644 index 00000000..c3366ee3 --- /dev/null +++ b/_directory/data/brinkers/data.yml @@ -0,0 +1,30 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Stefan Brinkers + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 53.137832 +longitude: 8.214286 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Moin. Arbeite bei der Feinrot Kreativgesellschaft in Oldenburg und setze dort nur noch redaxo ein. Dabei seit Version 3." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: stefan_brinkers.png + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.feinrot.de +- https://github.com/anveno + +--- diff --git a/_directory/data/brinkers/stefan_brinkers.png b/_directory/data/brinkers/stefan_brinkers.png new file mode 100644 index 00000000..8d08768f Binary files /dev/null and b/_directory/data/brinkers/stefan_brinkers.png differ diff --git a/_directory/data/busch/data.yml b/_directory/data/busch/data.yml new file mode 100644 index 00000000..a872d255 --- /dev/null +++ b/_directory/data/busch/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Wolfgang Busch + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 52.17 +longitude: 10.67 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "LangjĂ€hriger Mitarbeiter im Rechenzentrum der TU Braunschweig, Administrator dreier Websites auf REDAXO-Basis (4.7, 5.5), Programmentwickler fĂŒr REDAXOCMS" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: wolfgang_busch.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- http://busch-dettum.de + +--- diff --git a/_directory/data/busch/wolfgang_busch.jpg b/_directory/data/busch/wolfgang_busch.jpg new file mode 100644 index 00000000..adb33549 Binary files /dev/null and b/_directory/data/busch/wolfgang_busch.jpg differ diff --git a/_directory/data/c-reiss/data.yml b/_directory/data/c-reiss/data.yml index 1fabfe56..cb09e45a 100644 --- a/_directory/data/c-reiss/data.yml +++ b/_directory/data/c-reiss/data.yml @@ -13,7 +13,7 @@ longitude: 8.7504448 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Developer at ManĂ©tage for Redaxo." +bio: "Developer at ManĂ©tage for REDAXO." # links # one or more links to your website, your github profile, twitter, facebook et al. diff --git a/_directory/data/catasuisse/catasuisse.jpg b/_directory/data/catasuisse/catasuisse.jpg new file mode 100644 index 00000000..c4f001d5 Binary files /dev/null and b/_directory/data/catasuisse/catasuisse.jpg differ diff --git a/_directory/data/catasuisse/data.yml b/_directory/data/catasuisse/data.yml new file mode 100644 index 00000000..8a767280 --- /dev/null +++ b/_directory/data/catasuisse/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Maik Disch + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 46.980922 +longitude: 9.573711 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Mein Name ist Maik Disch. Ich bin ein Webdesigner und -Developer aus Malans GR (Schweiz) und reise als digitaler Nomade um die Welt." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: catasuisse.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://disch.dev + +--- diff --git a/_directory/data/chgerber/chg.jpg b/_directory/data/chgerber/chg.jpg new file mode 100644 index 00000000..0e43bc30 Binary files /dev/null and b/_directory/data/chgerber/chg.jpg differ diff --git a/_directory/data/chgerber/data.yml b/_directory/data/chgerber/data.yml new file mode 100644 index 00000000..ba515e8e --- /dev/null +++ b/_directory/data/chgerber/data.yml @@ -0,0 +1,7 @@ +--- +name: Christoph Gerber +latitude: 47.063487550226924 +longitude: 7.61232406412839 +bio: REDAXiOnĂ€r seit 2009, aber vor allem tĂ€tig als Requirements Engineer, Informationsmodellierer und Usability-Experte. +image: chg.jpg +--- diff --git a/_directory/data/chris-s/data.yml b/_directory/data/chris-s/data.yml new file mode 100644 index 00000000..dc4a6328 --- /dev/null +++ b/_directory/data/chris-s/data.yml @@ -0,0 +1,28 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Chris S. + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 47.73 +longitude: 10.32 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Benutze REDAXO seit etwa 2011." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: + +--- diff --git a/_directory/data/chrison94/christian.jpg b/_directory/data/chrison94/christian.jpg index 2ade7640..b58288bb 100644 Binary files a/_directory/data/chrison94/christian.jpg and b/_directory/data/chrison94/christian.jpg differ diff --git a/_directory/data/christophstaeblein/data.yml b/_directory/data/christophstaeblein/data.yml index b0618600..b3338aed 100644 --- a/_directory/data/christophstaeblein/data.yml +++ b/_directory/data/christophstaeblein/data.yml @@ -7,8 +7,8 @@ name: Christoph StĂ€blein # geo location (required) # provide your favored level of detail by number of digits (like 50.107811 vs 50.11) # you may use services like openstreetmap.org to find out your geo location -latitude: 53.3460359 -longitude: -6.2650629 +latitude: 50.2683000 +longitude: 10.9748500 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. diff --git a/_directory/data/claudiaheyer/claudiaheyer.png b/_directory/data/claudiaheyer/claudiaheyer.png index c1da2597..dfd19baf 100644 Binary files a/_directory/data/claudiaheyer/claudiaheyer.png and b/_directory/data/claudiaheyer/claudiaheyer.png differ diff --git a/_directory/data/claudiaheyer/data.yml b/_directory/data/claudiaheyer/data.yml index e47e8ecc..994e8025 100644 --- a/_directory/data/claudiaheyer/data.yml +++ b/_directory/data/claudiaheyer/data.yml @@ -12,7 +12,7 @@ longitude: 7.894677 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Moin moin, I'm Claudia, working in the beautiful Middle Rhine Valley as a self employed web developer. Since 2009 I realize my projects with Redaxo. " +bio: "Moin moin, I'm Claudia, working in the beautiful Middle Rhine Valley as a self employed web developer. Since 2009 I realize my projects with REDAXO. " # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/codedivision/serge_hardmeier.jpg b/_directory/data/codedivision/serge_hardmeier.jpg index c0576b37..6a579fb7 100644 Binary files a/_directory/data/codedivision/serge_hardmeier.jpg and b/_directory/data/codedivision/serge_hardmeier.jpg differ diff --git a/_directory/data/concept-check/antje-jaeger.jpg b/_directory/data/concept-check/antje-jaeger.jpg new file mode 100644 index 00000000..a00792f1 Binary files /dev/null and b/_directory/data/concept-check/antje-jaeger.jpg differ diff --git a/_directory/data/concept-check/data.yml b/_directory/data/concept-check/data.yml new file mode 100644 index 00000000..f8251376 --- /dev/null +++ b/_directory/data/concept-check/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Antje JĂ€ger + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 48.050388 +longitude: 8.197672 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: Hi, my name is Antje JĂ€ger. I started my first REDAXO project in 2008 and I fall in love with it. Best system ever!!!! + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: antje-jaeger.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.concept-check.de + +--- diff --git a/_directory/data/contrast-m/data.yml b/_directory/data/contrast-m/data.yml new file mode 100644 index 00000000..6e57b052 --- /dev/null +++ b/_directory/data/contrast-m/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Jens Lindmayer + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 54.517014 +longitude: 13.636230 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Seit vielen Jahren. Viele Websites. Und fast alle mit REDAXO." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +#image: johndoe.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- http://www.contrast-m.de + +--- diff --git a/_directory/data/cukabeka/redaxo-map.jpg b/_directory/data/cukabeka/redaxo-map.jpg index af02895b..134079b1 100644 Binary files a/_directory/data/cukabeka/redaxo-map.jpg and b/_directory/data/cukabeka/redaxo-map.jpg differ diff --git a/_directory/data/danielspringer/data.yml b/_directory/data/danielspringer/data.yml index 81ec4eed..b8aff577 100644 --- a/_directory/data/danielspringer/data.yml +++ b/_directory/data/danielspringer/data.yml @@ -13,7 +13,7 @@ longitude: 9.179145199999994 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "I am Daniel from Stuttgart. I studied Business Informatics and I work with Redaxo (3.2) since 2007." +bio: "I am Daniel from Stuttgart. I studied Business Informatics and I work with REDAXO (3.2) since 2007." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/dario-blauregen/data.yml b/_directory/data/dario-blauregen/data.yml new file mode 100644 index 00000000..b2ef22fc --- /dev/null +++ b/_directory/data/dario-blauregen/data.yml @@ -0,0 +1,28 @@ +--- +# name (required) +# may be your real name or your nick +name: Dario Bossy + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 47.557 +longitude: 8.895 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Heyhey! I'm Dario, designer & developer at blauregen. Invested in REDAXO since my apprenticeship in 2017." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (like 'https://www.gravatar.com/avatar/{HASH}') +# should be square and about 200-300 px size! +image: https://avatars2.githubusercontent.com/u/74457126?s=460&u=a34508e3169d63d908c6ea322a94c3341cece88c&v=4 + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://blauregen.ch +- https://www.linkedin.com/in/dario-bossy/ +--- diff --git a/_directory/data/davudmusic/data.yml b/_directory/data/davudmusic/data.yml new file mode 100644 index 00000000..58e28b13 --- /dev/null +++ b/_directory/data/davudmusic/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Davud Music + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 49.004829 +longitude: 8.429527 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Programmierer seit 2017 und bei Redaxo seit 2019.Angestellt bei Raumkontakt und hauptsĂ€chlich in der Addon-entwicklung tĂ€tig. Eigene Addons: Formular-Download, Rk-Modulsammlung." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: davudm.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.raumkontakt.de/ + +--- diff --git a/_directory/data/davudmusic/davudm.jpg b/_directory/data/davudmusic/davudm.jpg new file mode 100644 index 00000000..f8cf18a1 Binary files /dev/null and b/_directory/data/davudmusic/davudm.jpg differ diff --git a/_directory/data/design-to-use/data.yml b/_directory/data/design-to-use/data.yml index 0e12d6f3..49db13f5 100644 --- a/_directory/data/design-to-use/data.yml +++ b/_directory/data/design-to-use/data.yml @@ -2,7 +2,7 @@ name: Tobias Krais latitude: 47.63720 longitude: 7.69289 -bio: "Beruf: Wirtschaftsinformatiker. Redaxo ist mein CMS seit 2003. Seit 2009 hauptberuflicher Redaxo Entwickler. Spezialisiert auf Addonentwicklung - darf auch mal etwas komplexer sein." +bio: "Beruf: Wirtschaftsinformatiker. REDAXO ist mein CMS seit 2003. Seit 2009 hauptberuflicher REDAXO Entwickler. Spezialisiert auf Addonentwicklung - darf auch mal etwas komplexer sein." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/despecial/data.yml b/_directory/data/despecial/data.yml new file mode 100644 index 00000000..9175e9e3 --- /dev/null +++ b/_directory/data/despecial/data.yml @@ -0,0 +1,25 @@ +--- +# name (required) +name: Lars Lehner + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 53.553950 +longitude: 9.961850 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Front End Designer & Developer from Hamburg with a passion for simple designs and clean coding." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: despecial_avatar_2015.png + +# links +links: +- https://despecial.com + +--- diff --git a/_directory/data/despecial/despecial_avatar_2015.png b/_directory/data/despecial/despecial_avatar_2015.png new file mode 100644 index 00000000..31d8910b Binary files /dev/null and b/_directory/data/despecial/despecial_avatar_2015.png differ diff --git a/_directory/data/dpf-dd/data.yml b/_directory/data/dpf-dd/data.yml new file mode 100644 index 00000000..805f9902 --- /dev/null +++ b/_directory/data/dpf-dd/data.yml @@ -0,0 +1,31 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Stefan Dannfald (dpf.dd) + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 51.038373 +longitude: 13.681850 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Als gelernter Mediengestalter (Digital/Nonprint) und leidenschaftlicher Autodidakt arbeite ich seit 2007 vorwiegend mit REDAXO. Individuelle Module, Templates, AddOns usw. gehen gut von der Hand und sorgen fĂŒr eine zuverlĂ€ssige und schnelle Umsetzung aller KundenwĂŒnsche. Ich liebe es :)" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: https://ca.slack-edge.com/T1BCPLXEE-U41RYAUSJ-b086861ca1a9-512 + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.einradpioniere.de +- https://github.com/dpf-dd +- https://www.facebook.com/stefan.dannfald + +--- diff --git a/_directory/data/dtpop/data.yml b/_directory/data/dtpop/data.yml index 0a84b65b..c84d8183 100644 --- a/_directory/data/dtpop/data.yml +++ b/_directory/data/dtpop/data.yml @@ -12,7 +12,7 @@ longitude: 11.3187910 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "I'm Wolfgang. Web development with REDAXO since 2005, working in home office for customers in Mecklenburg and the rest of the world. Some coding for the multi_glossar AddOn and working on REDAXO documentation." +bio: "I'm Wolfgang. Web development with REDAXO since 2005, working for customers in Mecklenburg and the rest of the world. Some coding for several AddOns and working on REDAXO documentation." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) @@ -23,6 +23,6 @@ bio: "I'm Wolfgang. Web development with REDAXO since 2005, working in home offi # one or more links to your website, your github profile, twitter, facebook et al. # 4 links, tops! links: -- http://agile-websites.de +- https://agile-websites.de --- diff --git a/_directory/data/dweingart/d-weingart.png b/_directory/data/dweingart/d-weingart.png new file mode 100644 index 00000000..c7393c4d Binary files /dev/null and b/_directory/data/dweingart/d-weingart.png differ diff --git a/_directory/data/dweingart/data.yml b/_directory/data/dweingart/data.yml new file mode 100644 index 00000000..be82de03 --- /dev/null +++ b/_directory/data/dweingart/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Daniel Weingart + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 52.27218 +longitude: 8.03078 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Webdesigner & Medien Allrounder" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: d-weingart.png + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.danielweingart.de + +--- diff --git a/_directory/data/ebro/data.yml b/_directory/data/ebro/data.yml index 1d4f92ef..054db820 100644 --- a/_directory/data/ebro/data.yml +++ b/_directory/data/ebro/data.yml @@ -12,7 +12,7 @@ longitude: 8.5219172 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Hinter ebro Web Development steht Diego Brauchbar mit langjĂ€hriger Redaxo Erfahrung..." +bio: "Hinter ebro Web Development steht Diego Brauchbar mit langjĂ€hriger REDAXO Erfahrung..." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/ebro/ebro-e.gif b/_directory/data/ebro/ebro-e.gif index ba6b3967..661b7b0e 100644 Binary files a/_directory/data/ebro/ebro-e.gif and b/_directory/data/ebro/ebro-e.gif differ diff --git a/_directory/data/elmono/data.yml b/_directory/data/elmono/data.yml new file mode 100644 index 00000000..38bec068 --- /dev/null +++ b/_directory/data/elmono/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Christoph Young + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 24.8800950 +longitude: 102.8328910 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hi, I'm Chris. Living in China since 2011. æˆ‘æ˜ŻChris,æˆ‘äœćœšæ˜†æ˜Žă€‚" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: http://coolandeasy.de/media/head.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://coolandeasy.de + +--- diff --git a/_directory/data/erraiva/data.yml b/_directory/data/erraiva/data.yml new file mode 100644 index 00000000..8aa1c97f --- /dev/null +++ b/_directory/data/erraiva/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: erraiva + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 50.7246382 +longitude: 7.0995335 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Seit 2000 EinzelkĂ€mpfer fĂŒr Webseiten in einer Bonner Werbeagentur. Mit REDAXO gelang es von Anfang an, auch frei designte Weblayouts zu realisieren. FlexibilitĂ€t ist mir wichtig, deshalb REDAXO!" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: hz.png + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://github.com/erraiva + +--- diff --git a/_directory/data/erraiva/hz.png b/_directory/data/erraiva/hz.png new file mode 100644 index 00000000..c76ec2d7 Binary files /dev/null and b/_directory/data/erraiva/hz.png differ diff --git a/_directory/data/erwin-oertel/data.yml b/_directory/data/erwin-oertel/data.yml new file mode 100644 index 00000000..f74f6c06 --- /dev/null +++ b/_directory/data/erwin-oertel/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Erwin Oertel + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 51.955929 +longitude: 7.643227 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hallo, ich bin Erwin Oertel. Nach Projekten mit Typo3, Joomla und Wordpress wurde mir 2011 REDAXO empfohlen. Und das fand ich so ĂŒberzeugend, dass ich dabei geblieben bin. Ich realisiere REDAXO Projekte im Rahmen meiner Arbeit bei der terres’agentur GmbH in MĂŒnster." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: https://secure.gravatar.com/avatar/be26f5cbb0d9bafe9241d7a1b3a4f1be?s=300 + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.terresagentur.de + +--- diff --git a/_directory/data/explorit/data.yml b/_directory/data/explorit/data.yml new file mode 100644 index 00000000..d46f233b --- /dev/null +++ b/_directory/data/explorit/data.yml @@ -0,0 +1,28 @@ +--- +# name (required) +# may be your real name or your nick +name: Tobias Daeschner + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 48.0246254 +longitude: 11.0825167 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hi there, I work with and love REDAXO since version 2.7 and use it for almost any kind of web projects for more than 15 years now - thank you REDAXO team!" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (like 'https://www.gravatar.com/avatar/{HASH}') +# should be square and about 200-300 px size! +image: td.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.explorit.de + +--- diff --git a/_directory/data/explorit/td.jpg b/_directory/data/explorit/td.jpg new file mode 100644 index 00000000..f42426fc Binary files /dev/null and b/_directory/data/explorit/td.jpg differ diff --git a/_directory/data/f5alex/data.yml b/_directory/data/f5alex/data.yml new file mode 100644 index 00000000..39967ffc --- /dev/null +++ b/_directory/data/f5alex/data.yml @@ -0,0 +1,30 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Alexander Deß + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 49.794020 +longitude: 9.917044 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Ich verstehe und gestalte Kommunikation - wissbegierig, leidenschaftlich, zielgerichtet." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: tv_icon_700.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.alexander-dess.de/ +- http://frankfurter5.de/ + +--- diff --git a/_directory/data/f5alex/tv_icon_700.jpg b/_directory/data/f5alex/tv_icon_700.jpg new file mode 100644 index 00000000..03886d9e Binary files /dev/null and b/_directory/data/f5alex/tv_icon_700.jpg differ diff --git a/_directory/data/falkomueller/data.yml b/_directory/data/falkomueller/data.yml index 36dc0d40..afee07cf 100644 --- a/_directory/data/falkomueller/data.yml +++ b/_directory/data/falkomueller/data.yml @@ -13,20 +13,19 @@ longitude: 13.319603 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: Hallo, ich bin Webentwicker/-designer und selbstĂ€ndiger Fotograf. Redaxo wird seit 2007 intensiv bei Kundenprojekten genutzt und mit eigenen Erweiterungen ausgebaut. +bio: Hallo, ich bin Webentwicker/-designer und selbstĂ€ndiger Fotograf. REDAXO wird seit 2007 intensiv bei Kundenprojekten genutzt und mit eigenen Erweiterungen ausgebaut. # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) # should be square and about 200-300 px size! -image: +image: falkomueller.jpg # links # one or more links to your website, your github profile, twitter, facebook et al. # 4 links, tops! links: -- http://www.falkomueller.com +- https://www.falkomueller.com - https://www.facebook.com/falkom360 - https://de.linkedin.com/in/fotodesign360 -- https://plus.google.com/+FalkoM%C3%BCller-fotodesign ---- \ No newline at end of file +--- diff --git a/_directory/data/falkomueller/falkomueller.jpg b/_directory/data/falkomueller/falkomueller.jpg new file mode 100644 index 00000000..4656aa73 Binary files /dev/null and b/_directory/data/falkomueller/falkomueller.jpg differ diff --git a/_directory/data/fanello73/data.yml b/_directory/data/fanello73/data.yml index 33371932..97b03b9b 100644 --- a/_directory/data/fanello73/data.yml +++ b/_directory/data/fanello73/data.yml @@ -7,13 +7,13 @@ name: Stefano Cardinale | fanello73 # geo location (required) # provide your favored level of detail by number of digits (like 50.107811 vs 50.11) # you may use services like openstreetmap.org to find out your geo location -latitude: 47.55 -longitude: 9.30 +latitude: 47.57 +longitude: 9.37 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Hi, bin Webdesigner bei der ViDYO GmbH und benutze Redaxo seit der Version 3.2." +bio: "Hi, bin Webentwickler, Interactive Media Designer und Ausbildner bei Advery und benutze REDAXO seit der Version 3.2." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) @@ -24,7 +24,7 @@ image: stefano.jpg # one or more links to your website, your github profile, twitter, facebook et al. # 4 links, tops! links: -- https://www.vidyo.ch +- https://www.advery.ch - https://www.linkedin.com/in/stefano-cardinale/ --- diff --git a/_directory/data/fanello73/stefano.jpg b/_directory/data/fanello73/stefano.jpg index 274641e1..45e0b28b 100644 Binary files a/_directory/data/fanello73/stefano.jpg and b/_directory/data/fanello73/stefano.jpg differ diff --git a/_directory/data/fietstouring/data.yml b/_directory/data/fietstouring/data.yml new file mode 100644 index 00000000..e1916e4c --- /dev/null +++ b/_directory/data/fietstouring/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Philipp HofstĂ€tter + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 48.22 +longitude: 16.36 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Ich bin Webdesigner und Frontend-Entwickler seit 2005 und verwende liebend gerne Redaxo." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: philipp_hofstaetter.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.webdesignwien.co.at + +--- diff --git a/_directory/data/fietstouring/philipp_hofstaetter.jpg b/_directory/data/fietstouring/philipp_hofstaetter.jpg new file mode 100644 index 00000000..1f7a5712 Binary files /dev/null and b/_directory/data/fietstouring/philipp_hofstaetter.jpg differ diff --git a/_directory/data/florian-walter/data.yml b/_directory/data/florian-walter/data.yml new file mode 100644 index 00000000..b1668bf6 --- /dev/null +++ b/_directory/data/florian-walter/data.yml @@ -0,0 +1,31 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Florian Walter (FW-Design) + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 47.720250 +longitude: 10.320280 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hi, i’m Florian. I am working as Freelance Art Director in Bavaria with over 80 customers in Germany. I am developing REDAXO websites for now 10 years. Feel free to contact with your REDAXO project." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: florian-walter.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://fw-kommunikation.de +- https://www.instagram.com/fw.branddesign/ +- https://www.xing.com/profile/Florian_Walter9 + +--- diff --git a/_directory/data/florian-walter/florian-walter.jpg b/_directory/data/florian-walter/florian-walter.jpg new file mode 100644 index 00000000..9c2d5ac7 Binary files /dev/null and b/_directory/data/florian-walter/florian-walter.jpg differ diff --git a/_directory/data/gege/data.yml b/_directory/data/gege/data.yml new file mode 100644 index 00000000..ff1517c6 --- /dev/null +++ b/_directory/data/gege/data.yml @@ -0,0 +1,31 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Gege Heusel + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 49.001900 +longitude: 9.104990 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Inhaber der Agentur digtive. Seit 20010 erstelle ich mit meiner Agentur Internetauftritte in REDAXO." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: digtive.png + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.digtive.de +- https://www.facebook.com/digtive +- https://www.instagram.com/digtive_social/ + +--- diff --git a/_directory/data/gege/digtive.png b/_directory/data/gege/digtive.png new file mode 100644 index 00000000..2f22db39 Binary files /dev/null and b/_directory/data/gege/digtive.png differ diff --git a/_directory/data/geri/data.yml b/_directory/data/geri/data.yml new file mode 100644 index 00000000..a4b517d3 --- /dev/null +++ b/_directory/data/geri/data.yml @@ -0,0 +1,27 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Geri + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 50.9961309 +longitude: 6.8076551 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hey, ich bin Geri und ich liebe REDAXO! Es ist einfach genial und genial einfach. Der modulare Aufbau, die strikte Trennung von System und Design, etc." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! + + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! + +--- diff --git a/_directory/data/gorkarod/data.yml b/_directory/data/gorkarod/data.yml new file mode 100644 index 00000000..a809374b --- /dev/null +++ b/_directory/data/gorkarod/data.yml @@ -0,0 +1,11 @@ +--- +name: Hartmut Junker +latitude: 53.57155 +longitude: 9.95993 +image: gorkarod.jpg +links: +- https://www.linkedin.com/in/hartmutjunker +- https://github.com/gorkarod +- https://twitter.com/hartmutjunker + +--- diff --git a/_directory/data/gorkarod/gorkarod.jpg b/_directory/data/gorkarod/gorkarod.jpg new file mode 100644 index 00000000..a2f3359b Binary files /dev/null and b/_directory/data/gorkarod/gorkarod.jpg differ diff --git a/_directory/data/greatif/profil.jpg b/_directory/data/greatif/profil.jpg index f85aeb66..5d2181cc 100644 Binary files a/_directory/data/greatif/profil.jpg and b/_directory/data/greatif/profil.jpg differ diff --git a/_directory/data/gseilheimer/gseilheimer.png b/_directory/data/gseilheimer/gseilheimer.png index 193c6f6e..9dc349b9 100644 Binary files a/_directory/data/gseilheimer/gseilheimer.png and b/_directory/data/gseilheimer/gseilheimer.png differ diff --git a/_directory/data/guentertrapp/guentertrapp.jpg b/_directory/data/guentertrapp/guentertrapp.jpg index 76419ac1..a65a528f 100644 Binary files a/_directory/data/guentertrapp/guentertrapp.jpg and b/_directory/data/guentertrapp/guentertrapp.jpg differ diff --git a/_directory/data/hasenmeister/hasenmeister.png b/_directory/data/hasenmeister/hasenmeister.png index e937a4b7..4075e273 100644 Binary files a/_directory/data/hasenmeister/hasenmeister.png and b/_directory/data/hasenmeister/hasenmeister.png differ diff --git a/_directory/data/heidecke/data.yml b/_directory/data/heidecke/data.yml new file mode 100644 index 00000000..a24c867c --- /dev/null +++ b/_directory/data/heidecke/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Felix Heidecke + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 49.443970 +longitude: 11.089761 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "SelbststĂ€ndiger Frontend-Entwickler/-Engineer. Nutze REDAXO schon seit ĂŒber 10 Jahren und bin und bleibe glĂŒcklich damit :-)" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: https://www.gravatar.com/avatar/0f77c416854a07b0987153aee90b5931 + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://github.com/felixheidecke/ + +--- diff --git a/_directory/data/heikeblum/heikeblum.jpg b/_directory/data/heikeblum/heikeblum.jpg index 65bd4b54..5d89c78c 100644 Binary files a/_directory/data/heikeblum/heikeblum.jpg and b/_directory/data/heikeblum/heikeblum.jpg differ diff --git a/_directory/data/hommel/hommel.jpg b/_directory/data/hommel/hommel.jpg index 3496c47c..f43b6a5a 100644 Binary files a/_directory/data/hommel/hommel.jpg and b/_directory/data/hommel/hommel.jpg differ diff --git a/_directory/data/hut/data.yml b/_directory/data/hut/data.yml index 7b8877e4..1938ab43 100644 --- a/_directory/data/hut/data.yml +++ b/_directory/data/hut/data.yml @@ -7,13 +7,13 @@ name: Michael Hut # geo location (required) # provide your favored level of detail by number of digits (like 50.107811 vs 50.11) # you may use services like openstreetmap.org to find out your geo location -latitude: 51.566 -longitude: 14.567 +latitude: -33.101804 +longitude: 151.875 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Hey, I’m Michael - Webdesigner and REDAXO Developer since 03/2016 - i hope to meet you @ redaxotag " +bio: "G‘day! I’m Michael - Webdesigner and REDAXO Developer since 03/2016 - i hope to meet you @ redaxotag " # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/ingowinter/johndoe.jpg b/_directory/data/ingowinter/johndoe.jpg index 1ef43197..07801923 100644 Binary files a/_directory/data/ingowinter/johndoe.jpg and b/_directory/data/ingowinter/johndoe.jpg differ diff --git a/_directory/data/internetmacher/internetmacher.jpg b/_directory/data/internetmacher/internetmacher.jpg index 35b3a346..285907f4 100644 Binary files a/_directory/data/internetmacher/internetmacher.jpg and b/_directory/data/internetmacher/internetmacher.jpg differ diff --git a/_directory/data/interweave-media/interweave-media.png b/_directory/data/interweave-media/interweave-media.png index 43503438..c5520995 100644 Binary files a/_directory/data/interweave-media/interweave-media.png and b/_directory/data/interweave-media/interweave-media.png differ diff --git a/_directory/data/jackomono/data.yml b/_directory/data/jackomono/data.yml index 4d475b2f..12e324b9 100644 --- a/_directory/data/jackomono/data.yml +++ b/_directory/data/jackomono/data.yml @@ -13,7 +13,7 @@ longitude: 10.02 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Moin, ich bin Jakob - Designer/Frontend-Entwickler bei wigital in Kiel. Mit Redaxo arbeite ich seit Version 3." +bio: "Moin, ich bin Jakob - Designer/Frontend-Entwickler bei wigital in Kiel. Mit REDAXO arbeite ich seit Version 3." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/jan-christoph-baerje/data.yml b/_directory/data/jan-christoph-baerje/data.yml new file mode 100644 index 00000000..19bd8825 --- /dev/null +++ b/_directory/data/jan-christoph-baerje/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Jan-Christoph BĂ€rje + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 53.19 +longitude: 8.76 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Moin, ich arbeite seit 2003 als selbststĂ€ndiger Webdesigner und realisiere seit 2007 Webseiten fĂŒr Unternehmen, Vereine und gelegentlich Einzelpersonen hauptsĂ€chlich mit dem CMS REDAXO." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: jan-christoph-baerje.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.wedosys.de + +--- diff --git a/_directory/data/jan-christoph-baerje/jan-christoph-baerje.jpg b/_directory/data/jan-christoph-baerje/jan-christoph-baerje.jpg new file mode 100644 index 00000000..708992fc Binary files /dev/null and b/_directory/data/jan-christoph-baerje/jan-christoph-baerje.jpg differ diff --git a/_directory/data/jankern/jk.jpg b/_directory/data/jankern/jk.jpg index 0da6fd07..646557f8 100644 Binary files a/_directory/data/jankern/jk.jpg and b/_directory/data/jankern/jk.jpg differ diff --git a/_directory/data/javanita/anita2.jpg b/_directory/data/javanita/anita2.jpg index 53c653a0..47582870 100644 Binary files a/_directory/data/javanita/anita2.jpg and b/_directory/data/javanita/anita2.jpg differ diff --git a/_directory/data/javanita/data.yml b/_directory/data/javanita/data.yml index d3fcc2a0..822d9e9d 100644 --- a/_directory/data/javanita/data.yml +++ b/_directory/data/javanita/data.yml @@ -13,7 +13,7 @@ longitude: 13.691052 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Hallo, ich bin Anita KrĂŒger, freiberufliche Webentwicklerin seit 2004. Am liebsten entwickle ich individuelle Webanwendungen auf der Basis von Redaxo." +bio: "Hallo, ich bin Anita KrĂŒger, freiberufliche Webentwicklerin seit 2004. Am liebsten entwickle ich individuelle Webanwendungen auf der Basis von REDAXO." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/jelleschutter/data.yml b/_directory/data/jelleschutter/data.yml new file mode 100644 index 00000000..8bc744c5 --- /dev/null +++ b/_directory/data/jelleschutter/data.yml @@ -0,0 +1,11 @@ +--- +name: Jelle Schutter +latitude: 47.47853 +longitude: 8.30852 +bio: "Hi! I've been working with REDAXO since 2019. I try to assist the FriendsOfREDAXO project whenever I can in the Slack Channel and on GitHub. I currently work at BlueMouse as a Web Developer." +image: https://www.gravatar.com/avatar/299c95b613a08476a654b9d379a30ae3?s=200 +links: +- https://github.com/jelleschutter +- https://jelle.schutter.xyz + +--- diff --git a/_directory/data/jensfuchs/fox.jpg b/_directory/data/jensfuchs/fox.jpg index 6f72b2f9..f71c1b58 100644 Binary files a/_directory/data/jensfuchs/fox.jpg and b/_directory/data/jensfuchs/fox.jpg differ diff --git a/_directory/data/joachimdoerr/data.yml b/_directory/data/joachimdoerr/data.yml index 4357456e..463e807f 100644 --- a/_directory/data/joachimdoerr/data.yml +++ b/_directory/data/joachimdoerr/data.yml @@ -24,6 +24,5 @@ image: https://www.gravatar.com/avatar/73fccf79dcd8e17688dc0a8ef02eb6ba?s=200 # 4 links, tops! links: - https://github.com/joachimdoerr -- https://doerr-softwaredevelopment.com --- diff --git a/_directory/data/jochenflaskamp/data.yml b/_directory/data/jochenflaskamp/data.yml index 419a89ae..e788b47f 100644 --- a/_directory/data/jochenflaskamp/data.yml +++ b/_directory/data/jochenflaskamp/data.yml @@ -13,7 +13,7 @@ longitude: 8.649730 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Ich arbeite seit 2008 mit Redaxo und nutze es inzwischen fĂŒr jedes Projekt, es ist Kundenfreundlich und flexibel im Einsatz." +bio: "Ich arbeite seit 2008 mit REDAXO und nutze es inzwischen fĂŒr jedes Projekt, es ist Kundenfreundlich und flexibel im Einsatz." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/jochenflaskamp/jochenflaskamp.jpg b/_directory/data/jochenflaskamp/jochenflaskamp.jpg index e0fd6dac..46e93e87 100644 Binary files a/_directory/data/jochenflaskamp/jochenflaskamp.jpg and b/_directory/data/jochenflaskamp/jochenflaskamp.jpg differ diff --git a/_directory/data/juergeneggers/data.yml b/_directory/data/juergeneggers/data.yml index 0439d0af..29331473 100644 --- a/_directory/data/juergeneggers/data.yml +++ b/_directory/data/juergeneggers/data.yml @@ -13,7 +13,7 @@ longitude: 10.083484 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Websites und Webanwendungen - Entwicklung von Addons und Modulen fĂŒr Redaxo seit 2010." +bio: "Websites und Webanwendungen - Entwicklung von Addons und Modulen fĂŒr REDAXO seit 2010." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) @@ -24,6 +24,5 @@ image: juergeneggers.jpg # one or more links to your website, your github profile, twitter, facebook et al. # 4 links, tops! links: -- https://www.innovative-internetloesungen.de/ - +- https://www.netzbau.net --- diff --git a/_directory/data/juergeneggers/juergeneggers.jpg b/_directory/data/juergeneggers/juergeneggers.jpg index c1a43603..4de0639e 100644 Binary files a/_directory/data/juergeneggers/juergeneggers.jpg and b/_directory/data/juergeneggers/juergeneggers.jpg differ diff --git a/_directory/data/justdun/data.yml b/_directory/data/justdun/data.yml new file mode 100644 index 00000000..1f0c4da7 --- /dev/null +++ b/_directory/data/justdun/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Just Dun + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 52 +longitude: 13 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "I'm a junior web developer with not much experience but I'm learning every day. I'm currently using REDAXO for my work and I'm quite happy with the community and the CMS itself." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: glasses-cat.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://github.com/dunnodun + +--- diff --git a/_directory/data/justdun/glasses-cat.jpg b/_directory/data/justdun/glasses-cat.jpg new file mode 100644 index 00000000..cd2c3de4 Binary files /dev/null and b/_directory/data/justdun/glasses-cat.jpg differ diff --git a/_directory/data/juttaschumann/data.yml b/_directory/data/juttaschumann/data.yml new file mode 100644 index 00000000..11f5c510 --- /dev/null +++ b/_directory/data/juttaschumann/data.yml @@ -0,0 +1,52 @@ +--- + +# name (required) + +# may be your real name or your nick; not your company name. + +# teams: feel free to add multiple entries for each of your members! + +name: Jutta Schumann + + + +# geo location (required) + +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) + +# you may use services like openstreetmap.org to find out your geo location + + +latitude: 53.637952 + +longitude: 10.204700 + + +# bio + +# describe yourself, your involvement in the project and the community or whatever is relevant for you. + +# should be 300 chars at maximum. no markup or line breaks! + +bio: "Hauptberuflich bin ich mit Java unterwegs. Dort, wo Ebbe und Flut gemacht werden ;) REDAXO kenne ich von Peter (Polarpixel) - super Sache. Ich betreue ein paar Webseiten, die sind alle mit REDAXO erstellt." + + +# image or gravatar + +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) + +# should be square and about 200-300 px size! + +image: js.jpg + + + +# links + +# one or more links to your website, your github profile, twitter, facebook et al. + +# 4 links, tops! + + + +--- diff --git a/_directory/data/juttaschumann/js.jpg b/_directory/data/juttaschumann/js.jpg new file mode 100644 index 00000000..92151337 Binary files /dev/null and b/_directory/data/juttaschumann/js.jpg differ diff --git a/_directory/data/kabelwelten/kabelwelten.jpg b/_directory/data/kabelwelten/kabelwelten.jpg index eca01d53..87081395 100644 Binary files a/_directory/data/kabelwelten/kabelwelten.jpg and b/_directory/data/kabelwelten/kabelwelten.jpg differ diff --git a/_directory/data/klar/data.yml b/_directory/data/klar/data.yml new file mode 100644 index 00000000..17fbd8eb --- /dev/null +++ b/_directory/data/klar/data.yml @@ -0,0 +1,30 @@ +--- +# name (required) +# may be your real name or your nick +# teams: feel free to add multiple entries for each of your members! +name: Christian Klar | MINDSTREAM + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 47.267034029000335 +longitude: 11.393987573353686 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hi, I'm Christian, founder and CEO of MINDSTREAM. We work with REDAXO since version 3 and use it for small and huge projects. Standalone or headless in combination with React, Vue or Nuxt.js." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +# image: + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.mindstream.at/ +- https://www.facebook.com/mindstream + +--- diff --git a/_directory/data/koala/data.yml b/_directory/data/koala/data.yml index 7acafdee..ed3cff69 100644 --- a/_directory/data/koala/data.yml +++ b/_directory/data/koala/data.yml @@ -13,7 +13,7 @@ longitude: 14.34058 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Seit Redaxo < 3.2 unheilbar mit dem Rex-Virus infiziert." +bio: "Seit REDAXO < 3.2 unheilbar mit dem Rex-Virus infiziert." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/kraft/andreas_kraft.jpg b/_directory/data/kraft/andreas_kraft.jpg index 3f6ebce6..3bbb12ba 100644 Binary files a/_directory/data/kraft/andreas_kraft.jpg and b/_directory/data/kraft/andreas_kraft.jpg differ diff --git a/_directory/data/krisse85/kristof.jpg b/_directory/data/krisse85/kristof.jpg index 412b859c..8fda50a6 100644 Binary files a/_directory/data/krisse85/kristof.jpg and b/_directory/data/krisse85/kristof.jpg differ diff --git a/_directory/data/larsen/data.yml b/_directory/data/larsen/data.yml index 572b7693..13c41be3 100644 --- a/_directory/data/larsen/data.yml +++ b/_directory/data/larsen/data.yml @@ -13,7 +13,7 @@ longitude: 9.4419 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Hi I'm Lars and been using Redaxo since version 3.2, I guess. I developed some websites with Wordpress and Drupal until I stumbled upon Redaxo and fell in love :)." +bio: "Hi I'm Lars and been using REDAXO since version 3.2, I guess. I developed some websites with Wordpress and Drupal until I stumbled upon REDAXO and fell in love :)." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/lenathiele/lenathiele.jpg b/_directory/data/lenathiele/lenathiele.jpg index 4be00d67..6033733b 100644 Binary files a/_directory/data/lenathiele/lenathiele.jpg and b/_directory/data/lenathiele/lenathiele.jpg differ diff --git a/_directory/data/lexplatt/data.yml b/_directory/data/lexplatt/data.yml index 57687c57..4a4ca8d7 100644 --- a/_directory/data/lexplatt/data.yml +++ b/_directory/data/lexplatt/data.yml @@ -13,7 +13,7 @@ longitude: 11.331909298896791 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Hi, I'm Alex, a freelance web developer and started with Redaxo 4 in 2015." +bio: "Hi, I'm Alex, a freelance web developer and started with REDAXO 4 in 2015." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/lux/data.yml b/_directory/data/lux/data.yml new file mode 100644 index 00000000..9b79bf8f --- /dev/null +++ b/_directory/data/lux/data.yml @@ -0,0 +1,28 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Felix Lux + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 63.812564 +longitude: 20.318395 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Ich bin begeisterter Redaxo-Nutzer und nitze das CMS fĂŒr fast alle meiner großen und kleinen Projekte. Meine erfahrung der letzten Jahre: es gibt kaum etwas, das Redaxo nicht kann!" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: lux.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://luxus-media.de +--- diff --git a/_directory/data/lux/lux.jpg b/_directory/data/lux/lux.jpg new file mode 100644 index 00000000..9dd8d6f0 Binary files /dev/null and b/_directory/data/lux/lux.jpg differ diff --git a/_directory/data/madiko/data.yml b/_directory/data/madiko/data.yml index 0af2265c..04475f1b 100644 --- a/_directory/data/madiko/data.yml +++ b/_directory/data/madiko/data.yml @@ -13,7 +13,7 @@ longitude: 9.174320 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "REDAXO rockt! Frisch gegrĂŒndet baute ich im Juli 2009 mein erstes Internet-Portal fĂŒr madiko - damals noch mit REX4. Ich schĂ€tze die Community und das, was wir gemeinsam aus dem System machen. NĂ€chster Schritt: Ein Multi-Domain-Portal fĂŒr meine Initiative EnjoyWork. Ich freue mich drauf! :-)" +bio: "REDAXO rockt! Frisch gegrĂŒndet baute ich im Juli 2009 mein 1. Web-Portal fĂŒr madiko - damals noch mit REX4. Ich schĂ€tze die Community und das, was wir gemeinsam aus dem System machen. Aktuelle Herausforderung: EnjoyWork (Online)Marktplatz inkl. Community. Ich freue mich auf das, was entsteht! :-)" # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/madiko/madiko_fk.jpg b/_directory/data/madiko/madiko_fk.jpg index d55e75b4..44b11209 100644 Binary files a/_directory/data/madiko/madiko_fk.jpg and b/_directory/data/madiko/madiko_fk.jpg differ diff --git a/_directory/data/madita/data.yml b/_directory/data/madita/data.yml new file mode 100644 index 00000000..867c4cf3 --- /dev/null +++ b/_directory/data/madita/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Madita Grassl + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 47.944035 +longitude: 10.245541 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Wenn man durch Corona plötzlich alle möglichen Projekte annimmt und so zu Redaxo kommt... Zum GlĂŒck gibt es die wirklich gute Slack Community :)" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! + + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.xing.com/profile/Madita_Grassl/cv + +--- diff --git a/_directory/data/mahribar/data.yml b/_directory/data/mahribar/data.yml new file mode 100644 index 00000000..c6ad47c9 --- /dev/null +++ b/_directory/data/mahribar/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Mahribar + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 50.48146009 +longitude: 12.1392864 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Mein Name ist Rico und ich nutze REDAXO fĂŒr meine Ultima Online Community \"Die Neue Welt\"." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +# image: + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.dieneuewelt.de + +--- diff --git a/_directory/data/maikwagner/maikwagner.jpg b/_directory/data/maikwagner/maikwagner.jpg index 3657c0c1..49cecd67 100644 Binary files a/_directory/data/maikwagner/maikwagner.jpg and b/_directory/data/maikwagner/maikwagner.jpg differ diff --git a/_directory/data/manuel/data.yml b/_directory/data/manuel/data.yml new file mode 100644 index 00000000..e271238b --- /dev/null +++ b/_directory/data/manuel/data.yml @@ -0,0 +1,32 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Manuel Seipel + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 50.252406 +longitude: 9.318756 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! + + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.mx-hessencup.de/ +- https://www.msc-aufenau.de.de/ +- https://www.eds-gastrostyle.de/ +- https://www.dorf-alm.eu/ + +--- diff --git a/_directory/data/maple-park/data.yml b/_directory/data/maple-park/data.yml new file mode 100644 index 00000000..e27c8cfd --- /dev/null +++ b/_directory/data/maple-park/data.yml @@ -0,0 +1,32 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Jan-Peter Wahlmann + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 47.807714 +longitude: 7.629665 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Moin Moin von Jan-Peter aus MĂŒllheim (Baden). Ich arbeite als Webdesigner und Fotograf und habe seit 2006 einige Hundert Websites mit REDAXO erstellt. Meine Kunden sind Unternehmen (Webdesign und dessen Umsetzung) und Webdesigner (Umsetzung eines gelieferten Designs) im Bundesgebiet und der Schweiz." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: jan-peter-wahlmann.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.maple-park.de +- https://www.breitbandbild.de +- https://www.facebook.com/maple.park +- https://github.com/maple-park + +--- diff --git a/_directory/data/maple-park/jan-peter-wahlmann.jpg b/_directory/data/maple-park/jan-peter-wahlmann.jpg new file mode 100644 index 00000000..216b36db Binary files /dev/null and b/_directory/data/maple-park/jan-peter-wahlmann.jpg differ diff --git a/_directory/data/marcelscherkamp/data.yml b/_directory/data/marcelscherkamp/data.yml index 8ade5bc9..4b75ff69 100755 --- a/_directory/data/marcelscherkamp/data.yml +++ b/_directory/data/marcelscherkamp/data.yml @@ -12,7 +12,7 @@ longitude: 11.5398110 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Hallo, ich bin ein Entwickler mit Schwerpunkt Redaxo aus MĂŒnchen." +bio: "Hallo, ich bin ein Entwickler mit Schwerpunkt REDAXO aus MĂŒnchen." # image or gravatar # provide image file from current folder (like ‘johndoe.jpg’) or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/marcohanke/data.yml b/_directory/data/marcohanke/data.yml index b3c78cd1..635801cf 100644 --- a/_directory/data/marcohanke/data.yml +++ b/_directory/data/marcohanke/data.yml @@ -12,7 +12,7 @@ longitude: 9.81033 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Mein Name ist Marco Hanke, ich arbeite seit 2009 ausschließlich mit Redaxo und freue mich auf jedes neue Projekt. Ganz ehrlich ohne Redaxo und die Community hĂ€tte ich wesentlich weniger Spaß ;-)" +bio: "Mein Name ist Marco Hanke, ich arbeite seit 2009 ausschließlich mit REDAXO und freue mich auf jedes neue Projekt. Ganz ehrlich ohne REDAXO und die Community hĂ€tte ich wesentlich weniger Spaß ;-)" # image or gravatar # provide image file from current folder (like ‘johndoe.jpg’) or gravatar url (generated via https://3v4l.org/OXG7H) # should be square and about 200-300 px size! diff --git a/_directory/data/marie/mariedostmann.jpg b/_directory/data/marie/mariedostmann.jpg index f1b4b906..9695f8eb 100644 Binary files a/_directory/data/marie/mariedostmann.jpg and b/_directory/data/marie/mariedostmann.jpg differ diff --git a/_directory/data/mawiwa/data.yml b/_directory/data/mawiwa/data.yml new file mode 100644 index 00000000..22c62ff1 --- /dev/null +++ b/_directory/data/mawiwa/data.yml @@ -0,0 +1,30 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Mario Wiesner + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 50.7932 +longitude: 6.9478 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Seit 2010 programmiere ich Webseiten fĂŒr Kunden. Mit REDAXO habe ich mein lieblings CMS gefunden und schon ĂŒber 100 Kundenwebseiten damit umgesetzt." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: mariowiesner.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.mawi-web.com +- https://www.dreisprung.net + +--- diff --git a/_directory/data/mawiwa/mariowiesner.jpg b/_directory/data/mawiwa/mariowiesner.jpg new file mode 100644 index 00000000..97824ff9 Binary files /dev/null and b/_directory/data/mawiwa/mariowiesner.jpg differ diff --git a/_directory/data/mbodon/mbodon.jpg b/_directory/data/mbodon/mbodon.jpg index 2b8a6774..ad82c4ee 100644 Binary files a/_directory/data/mbodon/mbodon.jpg and b/_directory/data/mbodon/mbodon.jpg differ diff --git a/_directory/data/mg-gundb/data.yml b/_directory/data/mg-gundb/data.yml new file mode 100644 index 00000000..fd9e2436 --- /dev/null +++ b/_directory/data/mg-gundb/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Matthieu Gerber + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 46.93832 +longitude: 7.78957 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hallo aus dem Emmental/Schweiz – bin Partner in der Agentur Gerber & BrechbĂŒhl – REDAXO begeistert seit Ende 2007. Genauso zurĂŒckhaltend wie die Agentur-Website 
 freue mich jedoch auf jede Kontaktanfrage." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +# image: johndoe.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.g-b.ch + +--- diff --git a/_directory/data/michaelziem/data.yml b/_directory/data/michaelziem/data.yml index 6799c5c5..3220e734 100644 --- a/_directory/data/michaelziem/data.yml +++ b/_directory/data/michaelziem/data.yml @@ -7,13 +7,13 @@ name: Michael Ziem # geo location (required) # provide your favored level of detail by number of digits (like 50.107811 vs 50.11) # you may use services like openstreetmap.org to find out your geo location -latitude: 52.530831 -longitude: 13.408313 +latitude: 52.53111 +longitude: 13.42211 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Guten Tag! Ich arbeite seit etwa 2009 mit Redaxo und habe schon schĂ€tzungsweise 100 kleinere und mittlere Internetauftritte damit umgesetzt." +bio: "I have been working with REDAXO since 2009 always appreciating its flexibility." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/michelle/data.yml b/_directory/data/michelle/data.yml new file mode 100644 index 00000000..d074ecc3 --- /dev/null +++ b/_directory/data/michelle/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Michelle Schmidt + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 49.3489150 +longitude: 9.1293830 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hi there, I’m Michelle, German graphic designer just discovering REDAXO. Already loving the community. :)" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: + + +--- diff --git a/_directory/data/mschnieder/data.yml b/_directory/data/mschnieder/data.yml new file mode 100644 index 00000000..43b1a99e --- /dev/null +++ b/_directory/data/mschnieder/data.yml @@ -0,0 +1,28 @@ +--- +# name (required) +# may be your real name or your nick +name: Markus Schnieder + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 51.83 +longitude: 7.28 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hi, I’m Markus and I'm using REDAXO since version 4.0." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: https://avatars0.githubusercontent.com/u/33157452?s=460&v=4 + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://github.com/mschnieder + +--- diff --git a/_directory/data/muentel/muentel.jpg b/_directory/data/muentel/muentel.jpg index 08fa117d..8f95489d 100644 Binary files a/_directory/data/muentel/muentel.jpg and b/_directory/data/muentel/muentel.jpg differ diff --git a/_directory/data/nassedesign/Daniel_Nasse_2018.png b/_directory/data/nassedesign/Daniel_Nasse_2018.png new file mode 100644 index 00000000..3393aa16 Binary files /dev/null and b/_directory/data/nassedesign/Daniel_Nasse_2018.png differ diff --git a/_directory/data/nassedesign/data.yml b/_directory/data/nassedesign/data.yml new file mode 100644 index 00000000..752fdcc9 --- /dev/null +++ b/_directory/data/nassedesign/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Daniel Nasse + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 49.1429580 +longitude: 9.2271730 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Gelernter Fotograf, leidenschaftlicher Programmierer, GeschĂ€ftsfĂŒhrer von Nasse-Design KG" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: Daniel_Nasse_2018.png + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- http://www.nasse-design.de + +--- diff --git a/_directory/data/ng-websolutions/data.yml b/_directory/data/ng-websolutions/data.yml new file mode 100644 index 00000000..32562f1c --- /dev/null +++ b/_directory/data/ng-websolutions/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Nico Geisler + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 52.19 +longitude: 8.72 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hi! Ich arbeite seit 2008 mit Redaxo und biete alle Services rund um dieses CMS an (Entwicklung von Addons, Modulen, Templates etc)." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +#image: johndoe.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://ng-websolutions.de + +--- diff --git a/_directory/data/nhaessig/data.yml b/_directory/data/nhaessig/data.yml new file mode 100644 index 00000000..b088f718 --- /dev/null +++ b/_directory/data/nhaessig/data.yml @@ -0,0 +1,30 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Nicolas HĂ€ssig + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 47.37 +longitude: 8.55 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hey, mein Name ist Nicolas und ich wohne in der schönen Schweiz, arbeite seit 2018 mit REDAXO bei walder, werber werbeagentur ag." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +#image: johndoe.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.walderwerber.ch/ +- https://github.com/nhaessig + +--- diff --git a/_directory/data/nicomulitze/nico-mulitze.jpg b/_directory/data/nicomulitze/nico-mulitze.jpg index 861ece10..a9928d92 100644 Binary files a/_directory/data/nicomulitze/nico-mulitze.jpg and b/_directory/data/nicomulitze/nico-mulitze.jpg differ diff --git a/_directory/data/novinet/danielsteffen.jpg b/_directory/data/novinet/danielsteffen.jpg new file mode 100644 index 00000000..104d190e Binary files /dev/null and b/_directory/data/novinet/danielsteffen.jpg differ diff --git a/_directory/data/novinet/data.yml b/_directory/data/novinet/data.yml new file mode 100644 index 00000000..5877c082 --- /dev/null +++ b/_directory/data/novinet/data.yml @@ -0,0 +1,30 @@ +--- +# name (required) +# may be your real name or your nick +name: Daniel Steffen + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 48.8114293 +longitude: 11.5032357 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hallo, ich bin Daniel, GrĂŒnder und GeschĂ€ftsfĂŒhrer der Digitalgentur novinet. Wir erstellen Webseiten seit 2003. Mit REDAXO sind unsere Kunden so leicht zu bedienen wie mit keinem anderen CMS zuvor." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (like 'https://www.gravatar.com/avatar/{HASH}') +# should be square and about 200-300 px size! +image: danielsteffen.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.novinet.de +- https://github.com/novinetde + + +--- diff --git a/_directory/data/nuess/T1BCPLXEE-U1FNQ1JQ4-3fad975af8df-1024.jpg b/_directory/data/nuess/T1BCPLXEE-U1FNQ1JQ4-3fad975af8df-1024.jpg new file mode 100644 index 00000000..1be06720 Binary files /dev/null and b/_directory/data/nuess/T1BCPLXEE-U1FNQ1JQ4-3fad975af8df-1024.jpg differ diff --git a/_directory/data/nuess/data.yaml b/_directory/data/nuess/data.yaml new file mode 100644 index 00000000..47bd7361 --- /dev/null +++ b/_directory/data/nuess/data.yaml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Dirk van NĂŒss + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 50.91 +longitude: 6.94 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "I love REDAXO!!! REDAXO developer Seit version 4. AddOns, Frontend, SEO, Speed..." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: T1BCPLXEE-U1FNQ1JQ4-3fad975af8df-1024.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://almoe.de + +--- diff --git a/_directory/data/olien/data.yml b/_directory/data/olien/data.yml index a8831f71..d7e5dc34 100644 --- a/_directory/data/olien/data.yml +++ b/_directory/data/olien/data.yml @@ -6,8 +6,8 @@ name: Oliver Kreischer # geo location (required) # provide your favored level of detail by number of digits (like 50.107811 vs 50.11) # you may use services like openstreetmap.org to find out your geo location -latitude: 51.399 -longitude: 7.190 +latitude: 51.36440105944344 +longitude: 7.13858446968292 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. @@ -25,5 +25,5 @@ image: https://avatars1.githubusercontent.com/u/330516?s=300&v=4 links: - https://github.com/olien - https://github.com/FriendsOfREDAXO -- https://redaxo.org -- https://concedra.de +- https://getaweb.de +- https://kreischer.de diff --git a/_directory/data/omoses/data.yml b/_directory/data/omoses/data.yml new file mode 100644 index 00000000..a137906a --- /dev/null +++ b/_directory/data/omoses/data.yml @@ -0,0 +1,31 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Oliver Moses + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 50.2921263 +longitude: 8.5032359 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Ich bin seit fast 20 Jahren selbstĂ€ndig tĂ€tig, ich programmiere PHP, Javascipt, HTML und CSS. In meiner Freizeit gehe ich gerne mit meinen Hunden wandern." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: omosesXS.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://moses-computerservice.de +- https://korsika.moses-anspach.de +- https://olis-hundeschule.de + +--- diff --git a/_directory/data/omoses/omosesXS.jpg b/_directory/data/omoses/omosesXS.jpg new file mode 100644 index 00000000..b340d3aa Binary files /dev/null and b/_directory/data/omoses/omosesXS.jpg differ diff --git a/_directory/data/omphteliba/data.yml b/_directory/data/omphteliba/data.yml index 0ebe81c4..9df0a4d4 100644 --- a/_directory/data/omphteliba/data.yml +++ b/_directory/data/omphteliba/data.yml @@ -7,13 +7,13 @@ name: Oliver Hörold # geo location (required) # provide your favored level of detail by number of digits (like 50.107811 vs 50.11) # you may use services like openstreetmap.org to find out your geo location -latitude: 49.34 -longitude: 8.68 +latitude: 49.63 +longitude: 8.28 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Hej, I programm PHP for money, so I can brew my own beer. Redaxo since 2009!" +bio: "Hej, I programm PHP for money, so I can brew my own beer. REDAXO since 2009!" # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) @@ -24,6 +24,7 @@ image: https://de.gravatar.com/userimage/434937/2f51e3eaeddb0170f249eecd4b95adb0 # one or more links to your website, your github profile, twitter, facebook et al. # 4 links, tops! links: +- https://www.youtube.com/c/OliverH%C3%B6rold - http://www.hoerold.de - https://github.com/omphteliba diff --git a/_directory/data/palber/data.yml b/_directory/data/palber/data.yml index 0df8e93b..844def45 100644 --- a/_directory/data/palber/data.yml +++ b/_directory/data/palber/data.yml @@ -12,7 +12,7 @@ longitude: 11.331909298896791 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Heyho, I'm working with Redaxo since 2011. With my agency kreatif.it we make small one-pagers till large company websites everything in Redaxo." +bio: "Heyho, I'm working with REDAXO since 2011. With my agency kreatif.it we make small one-pagers till large company websites everything in REDAXO." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (like 'https://www.gravatar.com/avatar/{HASH}') diff --git a/_directory/data/palber/palber.png b/_directory/data/palber/palber.png index 7c0510f3..69fc8286 100644 Binary files a/_directory/data/palber/palber.png and b/_directory/data/palber/palber.png differ diff --git a/_directory/data/muenzberg-me/data.yml b/_directory/data/paolo-reininghaus/data.yml similarity index 68% rename from _directory/data/muenzberg-me/data.yml rename to _directory/data/paolo-reininghaus/data.yml index 107156a8..d468f0fd 100644 --- a/_directory/data/muenzberg-me/data.yml +++ b/_directory/data/paolo-reininghaus/data.yml @@ -2,31 +2,28 @@ # name (required) # may be your real name or your nick; not your company name. # teams: feel free to add multiple entries for each of your members! -name: Tony MĂŒnzberg +name: Paolo Reininghaus # geo location (required) # provide your favored level of detail by number of digits (like 50.107811 vs 50.11) # you may use services like openstreetmap.org to find out your geo location -latitude: 51.072 -longitude: 13.744 +latitude: 47.1109 +longitude: 14.1775 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Hallo, ich bin selbstĂ€ndiger Fotograf und Webentwicker/-designer. Seit ca. einem Jahr bin ich nun bei Redaxo und absolut begeistert." +bio: "More designer & strategist than developer, but nevertheless fascinated and successful working with REDAXO since 2006." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) # should be square and about 200-300 px size! -image: https://avatars3.githubusercontent.com/u/4945962?s=200 +image: paolo.jpg # links # one or more links to your website, your github profile, twitter, facebook et al. # 4 links, tops! links: -- https://muenzberg.me -- https://github.com/muenzberg-me -- https://facebook.com/muenzberg.me -- https://xing.to/muenzberg_me +- http://www.pixelgold.com --- \ No newline at end of file diff --git a/_directory/data/paolo-reininghaus/paolo.jpg b/_directory/data/paolo-reininghaus/paolo.jpg new file mode 100644 index 00000000..d1db4a8c Binary files /dev/null and b/_directory/data/paolo-reininghaus/paolo.jpg differ diff --git a/_directory/data/paulgoetz/data.yml b/_directory/data/paulgoetz/data.yml new file mode 100644 index 00000000..3fbaea00 --- /dev/null +++ b/_directory/data/paulgoetz/data.yml @@ -0,0 +1,10 @@ +--- +name: Paul Götz +latitude: 49.162068 +longitude: 9.229243 +bio: "SelbstĂ€ndiger Webentwickler und Webentwickler bei Pixelfirma." +image: https://www.gravatar.com/avatar/442ef907f7bde39f8222493a93bba7c1?s=200 +links: +- https://www.paulgoetz.de + +--- diff --git a/_directory/data/phoebusryan/data.yml b/_directory/data/phoebusryan/data.yml index 9267c97f..97498914 100644 --- a/_directory/data/phoebusryan/data.yml +++ b/_directory/data/phoebusryan/data.yml @@ -6,8 +6,8 @@ name: phoebusryan # geo location (required) # provide your favored level of detail by number of digits (like 50.107811 vs 50.11) # you may use services like openstreetmap.org to find out your geo location -latitude: 47.3696 -longitude: 8.86935 +latitude: 47.389648 +longitude: 8.891735 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. @@ -24,4 +24,4 @@ bio: "Hey guys! I'm the developer of many r5-addons (e.g. redactor2, markitup an # 4 links, tops! #links: ---- \ No newline at end of file +--- diff --git a/_directory/data/pmoeller/data.yml b/_directory/data/pmoeller/data.yml new file mode 100644 index 00000000..03c127cf --- /dev/null +++ b/_directory/data/pmoeller/data.yml @@ -0,0 +1,9 @@ +--- +name: Phillip Möller +latitude: 53.623420 +longitude: 11.410480 +bio: "Moin! Ich bin Webentwickler und Gesellschafter bei einer kleinen Agentur in Schwerin, in erster Linie aber REDAXO-Nutzer aus tiefster Überzeugung weil eben Einfach - Flexibel & Sinnvoll!" +links: +- https://www.phillip-moeller.de/ +- https://mediaconstructor.de/ +--- diff --git a/_directory/data/pschuchmann/data.yml b/_directory/data/pschuchmann/data.yml index 58b450cc..e04611c0 100644 --- a/_directory/data/pschuchmann/data.yml +++ b/_directory/data/pschuchmann/data.yml @@ -18,7 +18,7 @@ bio: "Developing with REDAXO since 2017." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) # should be square and about 200-300 px size! -image: https://avatars2.githubusercontent.com/u/35096518?s=40&v=4 +image: https://avatars1.githubusercontent.com/u/35096518?s=300&v=4 # links # one or more links to your website, your github profile, twitter, facebook et al. diff --git a/_directory/data/pschulze/pschulze.jpg b/_directory/data/pschulze/pschulze.jpg index f5dd033a..b6684844 100644 Binary files a/_directory/data/pschulze/pschulze.jpg and b/_directory/data/pschulze/pschulze.jpg differ diff --git a/_directory/data/ritzfritz/data.yml b/_directory/data/ritzfritz/data.yml new file mode 100644 index 00000000..3d1d2ec9 --- /dev/null +++ b/_directory/data/ritzfritz/data.yml @@ -0,0 +1,30 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Fritz Ritzinger + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 48.435931 +longitude: 12.949224 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Ich liebe REDAXO" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: ritzfritz.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.ritzfritz.de + + +--- diff --git a/_directory/data/ritzfritz/ritzfritz.jpg b/_directory/data/ritzfritz/ritzfritz.jpg new file mode 100644 index 00000000..772d8f2d Binary files /dev/null and b/_directory/data/ritzfritz/ritzfritz.jpg differ diff --git a/_directory/data/rkemmere/data.yml b/_directory/data/rkemmere/data.yml index e09f03f3..457613d4 100644 --- a/_directory/data/rkemmere/data.yml +++ b/_directory/data/rkemmere/data.yml @@ -13,7 +13,7 @@ longitude: 8.7504448 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Holder of ManĂ©tage. Working with Redaxo since 2007 and I have implemented hundreds of projects with Redaxo. Core industries are the real estate, travel and tourism sectors." +bio: "Holder of ManĂ©tage. Working with REDAXO since 2007 and I have implemented hundreds of projects with REDAXO. Core industries are the real estate, travel and tourism sectors." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/rlisac/data.yml b/_directory/data/rlisac/data.yml new file mode 100644 index 00000000..d188e6a8 --- /dev/null +++ b/_directory/data/rlisac/data.yml @@ -0,0 +1,31 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Robert Lisac + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 47.384200 +longitude: 8.493640 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Head of Digital Solutions bei der Geyst AG, einem Kreativ-Studio fĂŒr Design. Mein Team entwickelt ausschliesslich mit REDAXO als CMS – und das mit grosser Begeisterung seit Version 4.0.1." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: rlisac.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.geyst.ch +- https://www.facebook.com/geyst.ch +- https://www.instagram.com/geyst_agency/ + +--- diff --git a/_directory/data/rlisac/rlisac.jpg b/_directory/data/rlisac/rlisac.jpg new file mode 100644 index 00000000..ea77307a Binary files /dev/null and b/_directory/data/rlisac/rlisac.jpg differ diff --git a/_directory/data/royalemotions/data.yml b/_directory/data/royalemotions/data.yml index 792ab3b4..9743424f 100644 --- a/_directory/data/royalemotions/data.yml +++ b/_directory/data/royalemotions/data.yml @@ -17,12 +17,12 @@ bio: "Passionated female webdesigner, successful self-employed since 2006 and lo # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) # should be square and about 200-300 px size! -image: http://www.royalemotions.de/regina3_profil.jpg +image: regina3_profil.jpg # links # one or more links to your website, your github profile, twitter, facebook et al. # 4 links, tops! links: -- http://www.royalemotions.de +- http://www.royalemotions.com --- diff --git a/_directory/data/royalemotions/regina3_profil.jpg b/_directory/data/royalemotions/regina3_profil.jpg new file mode 100644 index 00000000..4a29a9f5 Binary files /dev/null and b/_directory/data/royalemotions/regina3_profil.jpg differ diff --git a/_directory/data/rsee/data.yml b/_directory/data/rsee/data.yml index f0f6f243..de330439 100644 --- a/_directory/data/rsee/data.yml +++ b/_directory/data/rsee/data.yml @@ -13,7 +13,7 @@ longitude: 11.377970 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Hi, I am web developer for more than twenty years. I am working with Redaxo since version 4.2." +bio: "Hi, I am web developer for more than twenty years. I am working with REDAXO since version 4.2." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/rsee/rsee.jpg b/_directory/data/rsee/rsee.jpg index 45e65940..60739280 100644 Binary files a/_directory/data/rsee/rsee.jpg and b/_directory/data/rsee/rsee.jpg differ diff --git a/_directory/data/ruerob/data.yaml b/_directory/data/ruerob/data.yaml new file mode 100644 index 00000000..1c1870bc --- /dev/null +++ b/_directory/data/ruerob/data.yaml @@ -0,0 +1,31 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Robert RĂŒdiger + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 53.31 +longitude: 13.85 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hey, I’m Robert, and I just finished my first project in REDAXO! I really learned to like it!" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +#image: johndoe.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +#links: +#- https://johndoe.me +#- https://github.com/johndoe +#- https://twitter.com/johndoe + +--- diff --git a/_directory/data/sandra/sandra.jpg b/_directory/data/sandra/sandra.jpg index 58f3c53e..fe285c1c 100644 Binary files a/_directory/data/sandra/sandra.jpg and b/_directory/data/sandra/sandra.jpg differ diff --git a/_directory/data/serhansidan/data.yml b/_directory/data/serhansidan/data.yml new file mode 100644 index 00000000..dd5a2fcf --- /dev/null +++ b/_directory/data/serhansidan/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Serhan Sidan + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 48.0469948 +longitude: 8.462816699999962 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "GeschĂ€ftsfĂŒhrer der .mattomedia KG in Villingen-Schwenningen. Wir sind gerne und viel mit REDAXO unterwegs :-)" + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: serhan-sidan.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.mattomedia.de + +--- diff --git a/_directory/data/serhansidan/serhan-sidan.jpg b/_directory/data/serhansidan/serhan-sidan.jpg new file mode 100644 index 00000000..7925be8d Binary files /dev/null and b/_directory/data/serhansidan/serhan-sidan.jpg differ diff --git a/_directory/data/shauste/data.yml b/_directory/data/shauste/data.yml new file mode 100644 index 00000000..9567dc25 --- /dev/null +++ b/_directory/data/shauste/data.yml @@ -0,0 +1,9 @@ +--- +name: Sven Haustein +latitude: 50.582010 +longitude: 8.679606 +bio: "Frontend designer & developer – verortet in der Rhein-Main-Region, Gießen. Realisierung von Webseiten mit REDAXO seit mehr als 10 Jahren in zahlreichen Projekten." +image: shauste.jpg +links: +- https://svenhaustein.de +--- diff --git a/_directory/data/shauste/shauste.jpg b/_directory/data/shauste/shauste.jpg new file mode 100644 index 00000000..a551d71e Binary files /dev/null and b/_directory/data/shauste/shauste.jpg differ diff --git a/_directory/data/silkehachmann/logo_hachmann.png b/_directory/data/silkehachmann/logo_hachmann.png index d20d4fd1..ab6e5cbb 100644 Binary files a/_directory/data/silkehachmann/logo_hachmann.png and b/_directory/data/silkehachmann/logo_hachmann.png differ diff --git a/_directory/data/simon/data.yml b/_directory/data/simon/data.yml new file mode 100644 index 00000000..2bae9c9f --- /dev/null +++ b/_directory/data/simon/data.yml @@ -0,0 +1,30 @@ +--- +# name (required) +# may be your real name or your nick +name: Simon Pitsch + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 48.420690 +longitude: 9.039870 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Medien- und Kommunikationsinformatiker – begeisterter REDAXO-User " + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: https://avatars3.githubusercontent.com/u/33377866?s=400&u=6ad05ae342a52f0e9ee32d099fbafce4258eb338&v=4 + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: + +- https://github.com/mad1988 + + +--- diff --git a/_directory/data/slartibartfass/data.yml b/_directory/data/slartibartfass/data.yml new file mode 100644 index 00000000..0b4f221c --- /dev/null +++ b/_directory/data/slartibartfass/data.yml @@ -0,0 +1,27 @@ +--- +# name (required) +# may be your real name or your nick +name: Axel Kriewel + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 51.4020856 +longitude: 7.0672392 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hallo, ich bin Axel. Neben Wordpress und Drupal habe ich Dank 'Olien' auch immer wieder mit REDAXO zu tun. :-) " + +# image or gravatar +# provide image file from current folder (like ‘johndoe.jpg’) or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: https://avatars1.githubusercontent.com/u/1481796?s=300&v=4 + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://github.com/slartibartfass +- https://concedra.de diff --git a/_directory/data/stefanf/data.yml b/_directory/data/stefanf/data.yml new file mode 100644 index 00000000..26358c0c --- /dev/null +++ b/_directory/data/stefanf/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Stefan Frank + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 52.53 +longitude: 13.39 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hello everybody! I am a developer and i've been working with REDAXO since 2008." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +# image: johndoe.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://github.com/ichbeigit + +--- diff --git a/_directory/data/svenkaemper/data.yml b/_directory/data/svenkaemper/data.yml new file mode 100644 index 00000000..465e113d --- /dev/null +++ b/_directory/data/svenkaemper/data.yml @@ -0,0 +1,30 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Sven Kaemper + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 49.188949 +longitude: 8.094435 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Freiberuflicher UX Designer und Informationsarchitekt. Seit 2007 ist REDAXO das CMS meiner Wahl fĂŒr kleinere (und grĂ¶ĂŸere) Projekte." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: https://www.gravatar.com/avatar/27efc8111cd54f557c764cabb45daf71?s=200 + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://svenkaemper.de +- https://twitter.com/svenkaemper +- https://bagelkaemper.de +--- diff --git a/_directory/data/tgoellner/data.yml b/_directory/data/tgoellner/data.yml index 705fab88..6343fe82 100644 --- a/_directory/data/tgoellner/data.yml +++ b/_directory/data/tgoellner/data.yml @@ -13,7 +13,7 @@ longitude: 8.805399999999963 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Supporting Redaxo since 2006 - writing plugins, helpers, modules for small, medium and large sites." +bio: "Supporting REDAXO since 2006 - writing plugins, helpers, modules for small, medium and large sites." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/thomas-engelbrecht/data.yml b/_directory/data/thomas-engelbrecht/data.yml new file mode 100644 index 00000000..0e1788b0 --- /dev/null +++ b/_directory/data/thomas-engelbrecht/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Thomas Engelbrecht + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 49.5280453 +longitude: 10.9039196 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Frontend und Backend-Designer und Programmierer aus Leidenschaft - und das seit 20 Jahren. REDAXO seit 3.2." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: thomas-engelbrecht.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- http://www.square-concept.de + +--- diff --git a/_directory/data/thomas-engelbrecht/thomas-engelbrecht.jpg b/_directory/data/thomas-engelbrecht/thomas-engelbrecht.jpg new file mode 100644 index 00000000..ebda7b41 Binary files /dev/null and b/_directory/data/thomas-engelbrecht/thomas-engelbrecht.jpg differ diff --git a/_directory/data/thorol/data.yml b/_directory/data/thorol/data.yml new file mode 100644 index 00000000..80ad04ba --- /dev/null +++ b/_directory/data/thorol/data.yml @@ -0,0 +1,30 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Thomas Rolinger + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 50.14970 +longitude: 7.70305 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Mein Name ist Thomas Rolinger, ich arbeite seit 2005 mit REDAXO! " + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +# image: johndoe.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://www.muero-gbr.de +- https://www.arttec-grafik.de + +--- diff --git a/_directory/data/thpet/data.yml b/_directory/data/thpet/data.yml index 7d640316..69bfcc5b 100644 --- a/_directory/data/thpet/data.yml +++ b/_directory/data/thpet/data.yml @@ -6,13 +6,13 @@ name: Peter Thiel # geo location (required) # provide your favored level of detail by number of digits (like 50.107811 vs 50.11) # you may use services like openstreetmap.org to find out your geo location -latitude: 50.10897 -longitude: 8.70310 +latitude: 52.515919 +longitude: 13.454574 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Hey, Im Peter, working with Redaxo since 2012 realising various projects and always loving it :)" +bio: "Hey, Im Peter, working with REDAXO since 2012 :)" # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (like 'https://www.gravatar.com/avatar/{HASH}') @@ -23,9 +23,8 @@ image: https://thielpeter.com/img/uploads/thielpeter_sm.jpg # one or more links to your website, your github profile, twitter, facebook et al. # 4 links, tops! links: -- https://github.com/thielpeter - https://thielpeter.com -- https://twitter.com/alsahh +- https://github.com/thielpeter - https://www.linkedin.com/in/peter-thiel-1b8347133 --- diff --git a/_directory/data/chrfickinger/data.yml b/_directory/data/thuermer/data.yml similarity index 88% rename from _directory/data/chrfickinger/data.yml rename to _directory/data/thuermer/data.yml index 87f49207..78676305 100644 --- a/_directory/data/chrfickinger/data.yml +++ b/_directory/data/thuermer/data.yml @@ -2,13 +2,13 @@ # name (required) # may be your real name or your nick; not your company name. # teams: feel free to add multiple entries for each of your members! -name: Christian Fickinger +name: Thomas ThĂŒrmer # geo location (required) # provide your favored level of detail by number of digits (like 50.107811 vs 50.11) # you may use services like openstreetmap.org to find out your geo location -latitude: 49.27 -longitude: 7.11 +latitude: 48.5441917 +longitude: 12.1468532 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. @@ -18,12 +18,12 @@ bio: "" # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) # should be square and about 200-300 px size! -#image: johndoe.jpg +image: me.jpg # links # one or more links to your website, your github profile, twitter, facebook et al. # 4 links, tops! links: -- https://github.com/chrfickinger + --- diff --git a/_directory/data/thuermer/me.jpg b/_directory/data/thuermer/me.jpg new file mode 100644 index 00000000..f9ee4ed0 Binary files /dev/null and b/_directory/data/thuermer/me.jpg differ diff --git a/_directory/data/tkrahmer/data.yml b/_directory/data/tkrahmer/data.yml new file mode 100644 index 00000000..40094e28 --- /dev/null +++ b/_directory/data/tkrahmer/data.yml @@ -0,0 +1,34 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Thomas Krahmer + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 52.13 +longitude: 11.63 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "My name is Thomas and i am working in Magdeburg at a software company. We create most of our websites using REDAXO." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: tk201.jpg + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- https://github.com/tkrahmer +- https://twitter.com/tomcojones +- https://www.studio201.de +- https://twitter.com/studio201 + + + +--- diff --git a/_directory/data/tkrahmer/tk201.jpg b/_directory/data/tkrahmer/tk201.jpg new file mode 100644 index 00000000..776f5677 Binary files /dev/null and b/_directory/data/tkrahmer/tk201.jpg differ diff --git a/_directory/data/tomrotzek/data.yml b/_directory/data/tomrotzek/data.yml index cd2de308..607fe67b 100644 --- a/_directory/data/tomrotzek/data.yml +++ b/_directory/data/tomrotzek/data.yml @@ -6,13 +6,13 @@ name: Thomas Rotzek # geo location (required) # provide your favored level of detail by number of digits (like 50.107811 vs 50.11) # you may use services like openstreetmap.org to find out your geo location -latitude: 49.104510 -longitude: 9.489522 +latitude: 49.124097524786194 +longitude: 9.652413402574572 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Hi, I'm Thomas and redaxo is my only cms since 2006." +bio: "Seit 2006 mein einziges CMS fĂŒr weit ĂŒber 300 Internetseiten und Projekte." # image or gravatar # provide image file from current folder (like ‘johndoe.jpg’) or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/tyrant88/1277494.jpg b/_directory/data/tyrant88/1277494.jpg index a77fc11c..4d01e85c 100644 Binary files a/_directory/data/tyrant88/1277494.jpg and b/_directory/data/tyrant88/1277494.jpg differ diff --git a/_directory/data/tyrant88/data.yml b/_directory/data/tyrant88/data.yml index 0b830b21..5b3549f8 100644 --- a/_directory/data/tyrant88/data.yml +++ b/_directory/data/tyrant88/data.yml @@ -6,13 +6,13 @@ name: Norbert Micheel # geo location (required) # provide your favored level of detail by number of digits (like 50.107811 vs 50.11) # you may use services like openstreetmap.org to find out your geo location -latitude: 50.10782 -longitude: 8.66717 +latitude: 50.112493 +longitude: 8.7011172 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "Hi, after 10 years in a marketing agency, I joined YAKAMARA to make a living and to have some fellow developers. In my spare time I braught the former search addOn to REDAXO Version 5 as a FOR addOn named 'search it'. I am REDAXO user since version 3.3 and still got a hang for email marketing." +bio: "I develop websites, applications and online shops. My second interest is marketing. I maintain the FOR search addOn 'search it'. I am REDAXO user since version 3.3." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (like 'https://www.gravatar.com/avatar/{HASH}') @@ -24,6 +24,5 @@ image: 1277494.jpg # 4 links, tops! links: - https://github.com/tyrant88 -- https://plus.google.com/u/0/+NorbertMicheel --- diff --git a/_directory/data/vedatoezdemir/data.yml b/_directory/data/vedatoezdemir/data.yml new file mode 100644 index 00000000..3ff42ae2 --- /dev/null +++ b/_directory/data/vedatoezdemir/data.yml @@ -0,0 +1,31 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Vedat Özdemir + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 51.3765096 +longitude: 7.6960842 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Hi, I am Vedat, live in Iserlohn and work for terres'agentur GmbH in MĂŒnster. I have been using REDAXO for more than 10 years since version 4.1 and have been involved in several REDAXO projects (websites). I have realized some projects on my own and also programmed many different modules." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: https://s.gravatar.com/avatar/bd86a7f1d847f21d857bf1366f55b91a?s=300 + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- http://www.terresagentur.de +- http://www.aidem.de/ +- https://github.com/vedatoezdemir + +--- diff --git a/_directory/data/wende60/data.yml b/_directory/data/wende60/data.yml index 62c5cfd8..a86b0ef1 100644 --- a/_directory/data/wende60/data.yml +++ b/_directory/data/wende60/data.yml @@ -13,7 +13,7 @@ longitude: 11.50 # bio # describe yourself, your involvement in the project and the community or whatever is relevant for you. # should be 300 chars at maximum. no markup or line breaks! -bio: "My Name is Joachim Wendenburg, I am living in Munich and I created some webpages with Redaxo. I also wrote the addon myEvents to display schedules." +bio: "My Name is Joachim Wendenburg, I am living in Munich and I created some webpages with REDAXO. I also wrote the addon myEvents to display schedules." # image or gravatar # provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) diff --git a/_directory/data/wende60/wende60.jpg b/_directory/data/wende60/wende60.jpg index ac2bc392..1a099be3 100644 Binary files a/_directory/data/wende60/wende60.jpg and b/_directory/data/wende60/wende60.jpg differ diff --git a/_directory/data/xbluex/iriswerner.jpg b/_directory/data/xbluex/iriswerner.jpg index eccdb603..cac6ca9a 100644 Binary files a/_directory/data/xbluex/iriswerner.jpg and b/_directory/data/xbluex/iriswerner.jpg differ diff --git a/_directory/data/xong/data.yml b/_directory/data/xong/data.yml new file mode 100644 index 00000000..8a2ed2a8 --- /dev/null +++ b/_directory/data/xong/data.yml @@ -0,0 +1,29 @@ +--- +# name (required) +# may be your real name or your nick; not your company name. +# teams: feel free to add multiple entries for each of your members! +name: Robert Rupf + +# geo location (required) +# provide your favored level of detail by number of digits (like 50.107811 vs 50.11) +# you may use services like openstreetmap.org to find out your geo location +latitude: 51.48 +longitude: 11.97 + +# bio +# describe yourself, your involvement in the project and the community or whatever is relevant for you. +# should be 300 chars at maximum. no markup or line breaks! +bio: "Web developer. Founder and developer of RexSearch (R4)." + +# image or gravatar +# provide image file from current folder (like 'johndoe.jpg') or gravatar url (generated via https://3v4l.org/OXG7H) +# should be square and about 200-300 px size! +image: https://www.gravatar.com/avatar/5cb960cbbc202a822904c3d2aeb40955?s=200 + +# links +# one or more links to your website, your github profile, twitter, facebook et al. +# 4 links, tops! +links: +- http://redaxo.maumha.de/ + +--- diff --git a/_directory/data/xyzettgraphix/zeljko.jpg b/_directory/data/xyzettgraphix/zeljko.jpg index 46d68ef6..9e592773 100644 Binary files a/_directory/data/xyzettgraphix/zeljko.jpg and b/_directory/data/xyzettgraphix/zeljko.jpg differ diff --git a/_directory/data/ynamite/yner.jpg b/_directory/data/ynamite/yner.jpg index adafb38f..60f00ef7 100644 Binary files a/_directory/data/ynamite/yner.jpg and b/_directory/data/ynamite/yner.jpg differ diff --git a/assets/images/redaxo-cms.svg b/assets/images/redaxo-cms.svg index 19ac832d..ec4c62e6 100644 --- a/assets/images/redaxo-cms.svg +++ b/assets/images/redaxo-cms.svg @@ -1,28 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/assets/images/redaxo.svg b/assets/images/redaxo.svg index 7b7b7b4c..d19dbe92 100644 --- a/assets/images/redaxo.svg +++ b/assets/images/redaxo.svg @@ -1,20 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/assets/js/script.js b/assets/js/script.js index c088c58e..8a57f0c4 100755 --- a/assets/js/script.js +++ b/assets/js/script.js @@ -47,8 +47,7 @@ document.addEventListener("DOMContentLoaded", function () { if (directory[i]['links'][j]) { var link = directory[i]['links'][j]; var linkText = link.replace(/(http:\/\/|https:\/\/)/i, ''); - content += '' + - ''; + content += "" + '"; } } diff --git a/assets/vendor/leaflet.markercluster/CHANGELOG.md b/assets/vendor/leaflet.markercluster/CHANGELOG.md index 8a43e53f..db5948ec 100755 --- a/assets/vendor/leaflet.markercluster/CHANGELOG.md +++ b/assets/vendor/leaflet.markercluster/CHANGELOG.md @@ -3,6 +3,37 @@ Leaflet.markercluster (all changes without author notice are by [@danzel](https://github.com/danzel)) +## 1.4.1 (2018-09-14) + +### Bugfixes + + * Better support stopping dragged markers from being clustered (by [@DerGuteWolf](https://github.com/DerGuteWolf)) [#909](https://github.com/Leaflet/Leaflet.markercluster/pull/909) + +## 1.4.0 (2018-08-22) + +Required leaflet version bumped to 1.3.1 + +### Improvements + + * Tests run against leaflet 1.1.0+ [#863](https://github.com/Leaflet/Leaflet.markercluster/issues/863) + +### Bugfixes + + * Fix clearLayers not removing removed markers [#860](https://github.com/Leaflet/Leaflet.markercluster/issues/860) + * Remember opacity 0 correctly (by [@r-yanyo](https://github.com/r-yanyo)) [#890](https://github.com/Leaflet/Leaflet.markercluster/pull/890) + * Fix chunkedLoading LatLngBounds.intersects() (by [@boldtrn](https://github.com/boldtrn)) [#743](https://github.com/Leaflet/Leaflet.markercluster/issues/743) [#891](https://github.com/Leaflet/Leaflet.markercluster/pull/891) + +## 1.3.0 (2018-01-19) + +### Improvements + + * Use Rollup for builds (by [@IvanSanchez](https://github.com/IvanSanchez)) [#769](https://github.com/Leaflet/Leaflet.markercluster/pull/769) + +### Bugfixes + + * Fix Spiderfier positioning for small markers (by [@ghybs](https://github.com/ghybs)) [#846](https://github.com/Leaflet/Leaflet.markercluster/pull/846) + * Fix anchor usage with latest leaflet version [#861](https://github.com/Leaflet/Leaflet.markercluster/issues/861) + ## 1.2.0 (2017-11-06) ### Improvements diff --git a/assets/vendor/leaflet.markercluster/README.md b/assets/vendor/leaflet.markercluster/README.md index 5c9c9afe..f0429448 100755 --- a/assets/vendor/leaflet.markercluster/README.md +++ b/assets/vendor/leaflet.markercluster/README.md @@ -48,8 +48,8 @@ removed link to h1 and indented back 2 spaces all links. ## Using the plugin Include the plugin CSS and JS files on your page after Leaflet files, using your method of choice: -* [Download the `v1.2.0` release](https://github.com/Leaflet/Leaflet.markercluster/archive/v1.2.0.zip) -* Use unpkg CDN: `https://unpkg.com/leaflet.markercluster@1.2.0/dist/` +* [Download the `v1.4.1` release](https://github.com/Leaflet/Leaflet.markercluster/archive/v1.4.1.zip) +* Use unpkg CDN: `https://unpkg.com/leaflet.markercluster@1.4.1/dist/` * Install with npm: `npm install leaflet.markercluster` In each case, use files in the `dist` folder: @@ -256,7 +256,7 @@ markers.on('clusterclick', function (a) { #### Other clusters methods * **getChildCount**: Returns the total number of markers contained within that cluster. -* **getAllChildMarkers**: Returns the array of total markers contained within that cluster. +* **getAllChildMarkers(storage: array | undefined, ignoreDraggedMarker: boolean | undefined)**: Returns an array of all markers contained within this cluster (storage will be used if provided). If ignoreDraggedMarker is true and there is currently a marker dragged, the dragged marker will not be included in the array. * **spiderfy**: Spiderfies the child markers of this cluster * **unspiderfy**: Unspiderfies a cluster (opposite of spiderfy) diff --git a/assets/vendor/leaflet.markercluster/dist/leaflet.markercluster-src.js b/assets/vendor/leaflet.markercluster/dist/leaflet.markercluster-src.js index c725854a..6b1e3b88 100755 --- a/assets/vendor/leaflet.markercluster/dist/leaflet.markercluster-src.js +++ b/assets/vendor/leaflet.markercluster/dist/leaflet.markercluster-src.js @@ -1,13 +1,20 @@ /* - Leaflet.markercluster, Provides Beautiful Animated Marker Clustering functionality for Leaflet, a JS library for interactive maps. - https://github.com/Leaflet/Leaflet.markercluster - (c) 2012-2017, Dave Leaver -*/ -(function (window, document, undefined) {/* + * Leaflet.markercluster 1.4.1+master.37ab9a2, + * Provides Beautiful Animated Marker Clustering functionality for Leaflet, a JS library for interactive maps. + * https://github.com/Leaflet/Leaflet.markercluster + * (c) 2012-2017, Dave Leaver, smartrak + */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.Leaflet = global.Leaflet || {}, global.Leaflet.markercluster = global.Leaflet.markercluster || {}))); +}(this, (function (exports) { 'use strict'; + +/* * L.MarkerClusterGroup extends L.FeatureGroup by clustering the markers contained within */ -L.MarkerClusterGroup = L.FeatureGroup.extend({ +var MarkerClusterGroup = L.MarkerClusterGroup = L.FeatureGroup.extend({ options: { maxClusterRadius: 80, //A cluster will cover at most this many pixels from its center @@ -421,6 +428,7 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({ //If we aren't on the map (yet), blow away the markers we know of if (!this._map) { this._needsClustering = []; + this._needsRemoving = []; delete this._gridClusters; delete this._gridUnclustered; } @@ -503,7 +511,7 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({ //Overrides LayerGroup.getLayer, WARNING: Really bad performance getLayer: function (id) { var result = null; - + id = parseInt(id, 10); this.eachLayer(function (l) { @@ -712,12 +720,13 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({ }, _childMarkerDragEnd: function (e) { - if (e.target.__dragStart) { - this._moveChild(e.target, e.target.__dragStart, e.target._latlng); - } + var dragStart = e.target.__dragStart; delete e.target.__dragStart; + if (dragStart) { + this._moveChild(e.target, dragStart, e.target._latlng); + } }, - + //Internal function for removing a marker from everything. //dontUpdateMap: set to true if you will handle updating the map manually (for bulk functions) @@ -931,7 +940,7 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({ minZoom = Math.floor(this._map.getMinZoom()), radius = this.options.maxClusterRadius, radiusFn = radius; - + //If we just set maxClusterRadius to a single number, we need to create //a simple function to return that number. Otherwise, we just have to //use the function we've passed in. @@ -945,7 +954,7 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({ this._maxZoom = maxZoom; this._gridClusters = {}; this._gridUnclustered = {}; - + //Set up DistanceGrids for each zoom for (var zoom = maxZoom; zoom >= minZoom; zoom--) { this._gridClusters[zoom] = new L.DistanceGrid(radiusFn(zoom)); @@ -1376,8 +1385,9 @@ L.markerClusterGroup = function (options) { return new L.MarkerClusterGroup(options); }; +var MarkerCluster = L.MarkerCluster = L.Marker.extend({ + options: L.Icon.prototype.options, -L.MarkerCluster = L.Marker.extend({ initialize: function (group, zoom, a, b) { L.Marker.prototype.initialize.call(this, a ? (a._cLatLng || a.getLatLng()) : new L.LatLng(0, 0), @@ -1403,7 +1413,7 @@ L.MarkerCluster = L.Marker.extend({ }, //Recursively retrieve all child markers of this cluster - getAllChildMarkers: function (storageArray) { + getAllChildMarkers: function (storageArray, ignoreDraggedMarker) { storageArray = storageArray || []; for (var i = this._childClusters.length - 1; i >= 0; i--) { @@ -1411,6 +1421,9 @@ L.MarkerCluster = L.Marker.extend({ } for (var j = this._markers.length - 1; j >= 0; j--) { + if (ignoreDraggedMarker && this._markers[j].__dragStart) { + continue; + } storageArray.push(this._markers[j]); } @@ -1761,6 +1774,9 @@ L.MarkerCluster = L.Marker.extend({ if (zoom < zoomLevelToStart || zoom < zoomLevelToStop) { for (i = childClusters.length - 1; i >= 0; i--) { c = childClusters[i]; + if (c._boundsNeedUpdate) { + c._recalculateBounds(); + } if (boundsToApplyTo.intersects(c._bounds)) { c._recursively(boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel); } @@ -1775,36 +1791,27 @@ L.MarkerCluster = L.Marker.extend({ } }); - - /* * Extends L.Marker to include two extra methods: clusterHide and clusterShow. * * They work as setOpacity(0) and setOpacity(1) respectively, but -* they will remember the marker's opacity when hiding and showing it again. +* don't overwrite the options.opacity * */ - L.Marker.include({ - clusterHide: function () { - this.options.opacityWhenUnclustered = this.options.opacity || 1; - return this.setOpacity(0); + var backup = this.options.opacity; + this.setOpacity(0); + this.options.opacity = backup; + return this; }, clusterShow: function () { - var ret = this.setOpacity(this.options.opacity || this.options.opacityWhenUnclustered); - delete this.options.opacityWhenUnclustered; - return ret; + return this.setOpacity(this.options.opacity); } - }); - - - - L.DistanceGrid = function (cellSize) { this._cellSize = cellSize; this._sqCellSize = cellSize * cellSize; @@ -1923,7 +1930,6 @@ L.DistanceGrid.prototype = { } }; - /* Copyright (c) 2012 the authors listed at the following URL, and/or the authors of referenced articles or incorporated external code: http://en.literateprograms.org/Quickhull_(Javascript)?action=history&offset=20120410175256 @@ -2090,7 +2096,6 @@ L.MarkerCluster.include({ } }); - //This code is 100% based on https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet //Huge thanks to jawj for implementing it first to make my job easy :-) @@ -2098,7 +2103,7 @@ L.MarkerCluster.include({ _2PI: Math.PI * 2, _circleFootSeparation: 25, //related to circumference of circle - _circleStartAngle: Math.PI / 6, + _circleStartAngle: 0, _spiralFootSeparation: 28, //related to size of spiral (experiment!) _spiralLengthStart: 11, @@ -2112,7 +2117,7 @@ L.MarkerCluster.include({ return; } - var childMarkers = this.getAllChildMarkers(), + var childMarkers = this.getAllChildMarkers(null, true), group = this._group, map = group._map, center = map.latLngToLayerPoint(this._latlng), @@ -2150,9 +2155,11 @@ L.MarkerCluster.include({ res = [], i, angle; + legLength = Math.max(legLength, 35); // Minimum distance to get outside the cluster icon. + res.length = count; - for (i = count - 1; i >= 0; i--) { + for (i = 0; i < count; i++) { // Clockwise, like spiral. angle = this._circleStartAngle + i * angleStep; res[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round(); } @@ -2172,9 +2179,13 @@ L.MarkerCluster.include({ res.length = count; // Higher index, closer position to cluster center. - for (i = count - 1; i >= 0; i--) { + for (i = count; i >= 0; i--) { + // Skip the first position, so that we are already farther from center and we avoid + // being under the default cluster icon (especially important for Circle Markers). + if (i < count) { + res[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round(); + } angle += separation / legLength + i * 0.0005; - res[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round(); legLength += lengthFactor / angle; } return res; @@ -2184,7 +2195,7 @@ L.MarkerCluster.include({ var group = this._group, map = group._map, fg = group._featureGroup, - childMarkers = this.getAllChildMarkers(), + childMarkers = this.getAllChildMarkers(null, true), m, i; group._ignoreMove = true; @@ -2377,7 +2388,7 @@ L.MarkerCluster.include({ map = group._map, fg = group._featureGroup, thisLayerPos = zoomDetails ? map._latLngToNewLayerPoint(this._latlng, zoomDetails.zoom, zoomDetails.center) : map.latLngToLayerPoint(this._latlng), - childMarkers = this.getAllChildMarkers(), + childMarkers = this.getAllChildMarkers(null, true), svg = L.Path.SVG, m, i, leg, legPath, legLength, nonAnimatable; @@ -2561,7 +2572,6 @@ L.MarkerClusterGroup.include({ } }); - /** * Adds 1 public method to MCG and 1 to L.Marker to facilitate changing * markers' icon options and refreshing their icon and their parent clusters @@ -2673,5 +2683,8 @@ L.Marker.include({ } }); +exports.MarkerClusterGroup = MarkerClusterGroup; +exports.MarkerCluster = MarkerCluster; -}(window, document)); \ No newline at end of file +}))); +//# sourceMappingURL=leaflet.markercluster-src.js.map diff --git a/assets/vendor/leaflet.markercluster/dist/leaflet.markercluster-src.js.map b/assets/vendor/leaflet.markercluster/dist/leaflet.markercluster-src.js.map new file mode 100644 index 00000000..30220ae7 --- /dev/null +++ b/assets/vendor/leaflet.markercluster/dist/leaflet.markercluster-src.js.map @@ -0,0 +1 @@ +{"version":3,"file":"leaflet.markercluster-src.js","sources":["../src/MarkerClusterGroup.js","../src/MarkerCluster.js","../src/MarkerOpacity.js","../src/DistanceGrid.js","../src/MarkerCluster.QuickHull.js","../src/MarkerCluster.Spiderfier.js","../src/MarkerClusterGroup.Refresh.js"],"sourcesContent":["/*\r\n * L.MarkerClusterGroup extends L.FeatureGroup by clustering the markers contained within\r\n */\r\n\r\nexport var MarkerClusterGroup = L.MarkerClusterGroup = L.FeatureGroup.extend({\r\n\r\n\toptions: {\r\n\t\tmaxClusterRadius: 80, //A cluster will cover at most this many pixels from its center\r\n\t\ticonCreateFunction: null,\r\n\t\tclusterPane: L.Marker.prototype.options.pane,\r\n\r\n\t\tspiderfyOnMaxZoom: true,\r\n\t\tshowCoverageOnHover: true,\r\n\t\tzoomToBoundsOnClick: true,\r\n\t\tsingleMarkerMode: false,\r\n\r\n\t\tdisableClusteringAtZoom: null,\r\n\r\n\t\t// Setting this to false prevents the removal of any clusters outside of the viewpoint, which\r\n\t\t// is the default behaviour for performance reasons.\r\n\t\tremoveOutsideVisibleBounds: true,\r\n\r\n\t\t// Set to false to disable all animations (zoom and spiderfy).\r\n\t\t// If false, option animateAddingMarkers below has no effect.\r\n\t\t// If L.DomUtil.TRANSITION is falsy, this option has no effect.\r\n\t\tanimate: true,\r\n\r\n\t\t//Whether to animate adding markers after adding the MarkerClusterGroup to the map\r\n\t\t// If you are adding individual markers set to true, if adding bulk markers leave false for massive performance gains.\r\n\t\tanimateAddingMarkers: false,\r\n\r\n\t\t//Increase to increase the distance away that spiderfied markers appear from the center\r\n\t\tspiderfyDistanceMultiplier: 1,\r\n\r\n\t\t// Make it possible to specify a polyline options on a spider leg\r\n\t\tspiderLegPolylineOptions: { weight: 1.5, color: '#222', opacity: 0.5 },\r\n\r\n\t\t// When bulk adding layers, adds markers in chunks. Means addLayers may not add all the layers in the call, others will be loaded during setTimeouts\r\n\t\tchunkedLoading: false,\r\n\t\tchunkInterval: 200, // process markers for a maximum of ~ n milliseconds (then trigger the chunkProgress callback)\r\n\t\tchunkDelay: 50, // at the end of each interval, give n milliseconds back to system/browser\r\n\t\tchunkProgress: null, // progress callback: function(processed, total, elapsed) (e.g. for a progress indicator)\r\n\r\n\t\t//Options to pass to the L.Polygon constructor\r\n\t\tpolygonOptions: {}\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tL.Util.setOptions(this, options);\r\n\t\tif (!this.options.iconCreateFunction) {\r\n\t\t\tthis.options.iconCreateFunction = this._defaultIconCreateFunction;\r\n\t\t}\r\n\r\n\t\tthis._featureGroup = L.featureGroup();\r\n\t\tthis._featureGroup.addEventParent(this);\r\n\r\n\t\tthis._nonPointGroup = L.featureGroup();\r\n\t\tthis._nonPointGroup.addEventParent(this);\r\n\r\n\t\tthis._inZoomAnimation = 0;\r\n\t\tthis._needsClustering = [];\r\n\t\tthis._needsRemoving = []; //Markers removed while we aren't on the map need to be kept track of\r\n\t\t//The bounds of the currently shown area (from _getExpandedVisibleBounds) Updated on zoom/move\r\n\t\tthis._currentShownBounds = null;\r\n\r\n\t\tthis._queue = [];\r\n\r\n\t\tthis._childMarkerEventHandlers = {\r\n\t\t\t'dragstart': this._childMarkerDragStart,\r\n\t\t\t'move': this._childMarkerMoved,\r\n\t\t\t'dragend': this._childMarkerDragEnd,\r\n\t\t};\r\n\r\n\t\t// Hook the appropriate animation methods.\r\n\t\tvar animate = L.DomUtil.TRANSITION && this.options.animate;\r\n\t\tL.extend(this, animate ? this._withAnimation : this._noAnimation);\r\n\t\t// Remember which MarkerCluster class to instantiate (animated or not).\r\n\t\tthis._markerCluster = animate ? L.MarkerCluster : L.MarkerClusterNonAnimated;\r\n\t},\r\n\r\n\taddLayer: function (layer) {\r\n\r\n\t\tif (layer instanceof L.LayerGroup) {\r\n\t\t\treturn this.addLayers([layer]);\r\n\t\t}\r\n\r\n\t\t//Don't cluster non point data\r\n\t\tif (!layer.getLatLng) {\r\n\t\t\tthis._nonPointGroup.addLayer(layer);\r\n\t\t\tthis.fire('layeradd', { layer: layer });\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (!this._map) {\r\n\t\t\tthis._needsClustering.push(layer);\r\n\t\t\tthis.fire('layeradd', { layer: layer });\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\r\n\t\t//If we have already clustered we'll need to add this one to a cluster\r\n\r\n\t\tif (this._unspiderfy) {\r\n\t\t\tthis._unspiderfy();\r\n\t\t}\r\n\r\n\t\tthis._addLayer(layer, this._maxZoom);\r\n\t\tthis.fire('layeradd', { layer: layer });\r\n\r\n\t\t// Refresh bounds and weighted positions.\r\n\t\tthis._topClusterLevel._recalculateBounds();\r\n\r\n\t\tthis._refreshClustersIcons();\r\n\r\n\t\t//Work out what is visible\r\n\t\tvar visibleLayer = layer,\r\n\t\t currentZoom = this._zoom;\r\n\t\tif (layer.__parent) {\r\n\t\t\twhile (visibleLayer.__parent._zoom >= currentZoom) {\r\n\t\t\t\tvisibleLayer = visibleLayer.__parent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this._currentShownBounds.contains(visibleLayer.getLatLng())) {\r\n\t\t\tif (this.options.animateAddingMarkers) {\r\n\t\t\t\tthis._animationAddLayer(layer, visibleLayer);\r\n\t\t\t} else {\r\n\t\t\t\tthis._animationAddLayerNonAnimated(layer, visibleLayer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tremoveLayer: function (layer) {\r\n\r\n\t\tif (layer instanceof L.LayerGroup) {\r\n\t\t\treturn this.removeLayers([layer]);\r\n\t\t}\r\n\r\n\t\t//Non point layers\r\n\t\tif (!layer.getLatLng) {\r\n\t\t\tthis._nonPointGroup.removeLayer(layer);\r\n\t\t\tthis.fire('layerremove', { layer: layer });\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (!this._map) {\r\n\t\t\tif (!this._arraySplice(this._needsClustering, layer) && this.hasLayer(layer)) {\r\n\t\t\t\tthis._needsRemoving.push({ layer: layer, latlng: layer._latlng });\r\n\t\t\t}\r\n\t\t\tthis.fire('layerremove', { layer: layer });\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (!layer.__parent) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (this._unspiderfy) {\r\n\t\t\tthis._unspiderfy();\r\n\t\t\tthis._unspiderfyLayer(layer);\r\n\t\t}\r\n\r\n\t\t//Remove the marker from clusters\r\n\t\tthis._removeLayer(layer, true);\r\n\t\tthis.fire('layerremove', { layer: layer });\r\n\r\n\t\t// Refresh bounds and weighted positions.\r\n\t\tthis._topClusterLevel._recalculateBounds();\r\n\r\n\t\tthis._refreshClustersIcons();\r\n\r\n\t\tlayer.off(this._childMarkerEventHandlers, this);\r\n\r\n\t\tif (this._featureGroup.hasLayer(layer)) {\r\n\t\t\tthis._featureGroup.removeLayer(layer);\r\n\t\t\tif (layer.clusterShow) {\r\n\t\t\t\tlayer.clusterShow();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t//Takes an array of markers and adds them in bulk\r\n\taddLayers: function (layersArray, skipLayerAddEvent) {\r\n\t\tif (!L.Util.isArray(layersArray)) {\r\n\t\t\treturn this.addLayer(layersArray);\r\n\t\t}\r\n\r\n\t\tvar fg = this._featureGroup,\r\n\t\t npg = this._nonPointGroup,\r\n\t\t chunked = this.options.chunkedLoading,\r\n\t\t chunkInterval = this.options.chunkInterval,\r\n\t\t chunkProgress = this.options.chunkProgress,\r\n\t\t l = layersArray.length,\r\n\t\t offset = 0,\r\n\t\t originalArray = true,\r\n\t\t m;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tvar started = (new Date()).getTime();\r\n\t\t\tvar process = L.bind(function () {\r\n\t\t\t\tvar start = (new Date()).getTime();\r\n\t\t\t\tfor (; offset < l; offset++) {\r\n\t\t\t\t\tif (chunked && offset % 200 === 0) {\r\n\t\t\t\t\t\t// every couple hundred markers, instrument the time elapsed since processing started:\r\n\t\t\t\t\t\tvar elapsed = (new Date()).getTime() - start;\r\n\t\t\t\t\t\tif (elapsed > chunkInterval) {\r\n\t\t\t\t\t\t\tbreak; // been working too hard, time to take a break :-)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tm = layersArray[offset];\r\n\r\n\t\t\t\t\t// Group of layers, append children to layersArray and skip.\r\n\t\t\t\t\t// Side effects:\r\n\t\t\t\t\t// - Total increases, so chunkProgress ratio jumps backward.\r\n\t\t\t\t\t// - Groups are not included in this group, only their non-group child layers (hasLayer).\r\n\t\t\t\t\t// Changing array length while looping does not affect performance in current browsers:\r\n\t\t\t\t\t// http://jsperf.com/for-loop-changing-length/6\r\n\t\t\t\t\tif (m instanceof L.LayerGroup) {\r\n\t\t\t\t\t\tif (originalArray) {\r\n\t\t\t\t\t\t\tlayersArray = layersArray.slice();\r\n\t\t\t\t\t\t\toriginalArray = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\r\n\t\t\t\t\t\tl = layersArray.length;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//Not point data, can't be clustered\r\n\t\t\t\t\tif (!m.getLatLng) {\r\n\t\t\t\t\t\tnpg.addLayer(m);\r\n\t\t\t\t\t\tif (!skipLayerAddEvent) {\r\n\t\t\t\t\t\t\tthis.fire('layeradd', { layer: m });\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (this.hasLayer(m)) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis._addLayer(m, this._maxZoom);\r\n\t\t\t\t\tif (!skipLayerAddEvent) {\r\n\t\t\t\t\t\tthis.fire('layeradd', { layer: m });\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//If we just made a cluster of size 2 then we need to remove the other marker from the map (if it is) or we never will\r\n\t\t\t\t\tif (m.__parent) {\r\n\t\t\t\t\t\tif (m.__parent.getChildCount() === 2) {\r\n\t\t\t\t\t\t\tvar markers = m.__parent.getAllChildMarkers(),\r\n\t\t\t\t\t\t\t otherMarker = markers[0] === m ? markers[1] : markers[0];\r\n\t\t\t\t\t\t\tfg.removeLayer(otherMarker);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (chunkProgress) {\r\n\t\t\t\t\t// report progress and time elapsed:\r\n\t\t\t\t\tchunkProgress(offset, l, (new Date()).getTime() - started);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Completed processing all markers.\r\n\t\t\t\tif (offset === l) {\r\n\r\n\t\t\t\t\t// Refresh bounds and weighted positions.\r\n\t\t\t\t\tthis._topClusterLevel._recalculateBounds();\r\n\r\n\t\t\t\t\tthis._refreshClustersIcons();\r\n\r\n\t\t\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsetTimeout(process, this.options.chunkDelay);\r\n\t\t\t\t}\r\n\t\t\t}, this);\r\n\r\n\t\t\tprocess();\r\n\t\t} else {\r\n\t\t\tvar needsClustering = this._needsClustering;\r\n\r\n\t\t\tfor (; offset < l; offset++) {\r\n\t\t\t\tm = layersArray[offset];\r\n\r\n\t\t\t\t// Group of layers, append children to layersArray and skip.\r\n\t\t\t\tif (m instanceof L.LayerGroup) {\r\n\t\t\t\t\tif (originalArray) {\r\n\t\t\t\t\t\tlayersArray = layersArray.slice();\r\n\t\t\t\t\t\toriginalArray = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\r\n\t\t\t\t\tl = layersArray.length;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Not point data, can't be clustered\r\n\t\t\t\tif (!m.getLatLng) {\r\n\t\t\t\t\tnpg.addLayer(m);\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.hasLayer(m)) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tneedsClustering.push(m);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t//Takes an array of markers and removes them in bulk\r\n\tremoveLayers: function (layersArray) {\r\n\t\tvar i, m,\r\n\t\t l = layersArray.length,\r\n\t\t fg = this._featureGroup,\r\n\t\t npg = this._nonPointGroup,\r\n\t\t originalArray = true;\r\n\r\n\t\tif (!this._map) {\r\n\t\t\tfor (i = 0; i < l; i++) {\r\n\t\t\t\tm = layersArray[i];\r\n\r\n\t\t\t\t// Group of layers, append children to layersArray and skip.\r\n\t\t\t\tif (m instanceof L.LayerGroup) {\r\n\t\t\t\t\tif (originalArray) {\r\n\t\t\t\t\t\tlayersArray = layersArray.slice();\r\n\t\t\t\t\t\toriginalArray = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\r\n\t\t\t\t\tl = layersArray.length;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._arraySplice(this._needsClustering, m);\r\n\t\t\t\tnpg.removeLayer(m);\r\n\t\t\t\tif (this.hasLayer(m)) {\r\n\t\t\t\t\tthis._needsRemoving.push({ layer: m, latlng: m._latlng });\r\n\t\t\t\t}\r\n\t\t\t\tthis.fire('layerremove', { layer: m });\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (this._unspiderfy) {\r\n\t\t\tthis._unspiderfy();\r\n\r\n\t\t\t// Work on a copy of the array, so that next loop is not affected.\r\n\t\t\tvar layersArray2 = layersArray.slice(),\r\n\t\t\t l2 = l;\r\n\t\t\tfor (i = 0; i < l2; i++) {\r\n\t\t\t\tm = layersArray2[i];\r\n\r\n\t\t\t\t// Group of layers, append children to layersArray and skip.\r\n\t\t\t\tif (m instanceof L.LayerGroup) {\r\n\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray2);\r\n\t\t\t\t\tl2 = layersArray2.length;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._unspiderfyLayer(m);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < l; i++) {\r\n\t\t\tm = layersArray[i];\r\n\r\n\t\t\t// Group of layers, append children to layersArray and skip.\r\n\t\t\tif (m instanceof L.LayerGroup) {\r\n\t\t\t\tif (originalArray) {\r\n\t\t\t\t\tlayersArray = layersArray.slice();\r\n\t\t\t\t\toriginalArray = false;\r\n\t\t\t\t}\r\n\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\r\n\t\t\t\tl = layersArray.length;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (!m.__parent) {\r\n\t\t\t\tnpg.removeLayer(m);\r\n\t\t\t\tthis.fire('layerremove', { layer: m });\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tthis._removeLayer(m, true, true);\r\n\t\t\tthis.fire('layerremove', { layer: m });\r\n\r\n\t\t\tif (fg.hasLayer(m)) {\r\n\t\t\t\tfg.removeLayer(m);\r\n\t\t\t\tif (m.clusterShow) {\r\n\t\t\t\t\tm.clusterShow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Refresh bounds and weighted positions.\r\n\t\tthis._topClusterLevel._recalculateBounds();\r\n\r\n\t\tthis._refreshClustersIcons();\r\n\r\n\t\t//Fix up the clusters and markers on the map\r\n\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t//Removes all layers from the MarkerClusterGroup\r\n\tclearLayers: function () {\r\n\t\t//Need our own special implementation as the LayerGroup one doesn't work for us\r\n\r\n\t\t//If we aren't on the map (yet), blow away the markers we know of\r\n\t\tif (!this._map) {\r\n\t\t\tthis._needsClustering = [];\r\n\t\t\tthis._needsRemoving = [];\r\n\t\t\tdelete this._gridClusters;\r\n\t\t\tdelete this._gridUnclustered;\r\n\t\t}\r\n\r\n\t\tif (this._noanimationUnspiderfy) {\r\n\t\t\tthis._noanimationUnspiderfy();\r\n\t\t}\r\n\r\n\t\t//Remove all the visible layers\r\n\t\tthis._featureGroup.clearLayers();\r\n\t\tthis._nonPointGroup.clearLayers();\r\n\r\n\t\tthis.eachLayer(function (marker) {\r\n\t\t\tmarker.off(this._childMarkerEventHandlers, this);\r\n\t\t\tdelete marker.__parent;\r\n\t\t}, this);\r\n\r\n\t\tif (this._map) {\r\n\t\t\t//Reset _topClusterLevel and the DistanceGrids\r\n\t\t\tthis._generateInitialClusters();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t//Override FeatureGroup.getBounds as it doesn't work\r\n\tgetBounds: function () {\r\n\t\tvar bounds = new L.LatLngBounds();\r\n\r\n\t\tif (this._topClusterLevel) {\r\n\t\t\tbounds.extend(this._topClusterLevel._bounds);\r\n\t\t}\r\n\r\n\t\tfor (var i = this._needsClustering.length - 1; i >= 0; i--) {\r\n\t\t\tbounds.extend(this._needsClustering[i].getLatLng());\r\n\t\t}\r\n\r\n\t\tbounds.extend(this._nonPointGroup.getBounds());\r\n\r\n\t\treturn bounds;\r\n\t},\r\n\r\n\t//Overrides LayerGroup.eachLayer\r\n\teachLayer: function (method, context) {\r\n\t\tvar markers = this._needsClustering.slice(),\r\n\t\t\tneedsRemoving = this._needsRemoving,\r\n\t\t\tthisNeedsRemoving, i, j;\r\n\r\n\t\tif (this._topClusterLevel) {\r\n\t\t\tthis._topClusterLevel.getAllChildMarkers(markers);\r\n\t\t}\r\n\r\n\t\tfor (i = markers.length - 1; i >= 0; i--) {\r\n\t\t\tthisNeedsRemoving = true;\r\n\r\n\t\t\tfor (j = needsRemoving.length - 1; j >= 0; j--) {\r\n\t\t\t\tif (needsRemoving[j].layer === markers[i]) {\r\n\t\t\t\t\tthisNeedsRemoving = false;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (thisNeedsRemoving) {\r\n\t\t\t\tmethod.call(context, markers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._nonPointGroup.eachLayer(method, context);\r\n\t},\r\n\r\n\t//Overrides LayerGroup.getLayers\r\n\tgetLayers: function () {\r\n\t\tvar layers = [];\r\n\t\tthis.eachLayer(function (l) {\r\n\t\t\tlayers.push(l);\r\n\t\t});\r\n\t\treturn layers;\r\n\t},\r\n\r\n\t//Overrides LayerGroup.getLayer, WARNING: Really bad performance\r\n\tgetLayer: function (id) {\r\n\t\tvar result = null;\r\n\r\n\t\tid = parseInt(id, 10);\r\n\r\n\t\tthis.eachLayer(function (l) {\r\n\t\t\tif (L.stamp(l) === id) {\r\n\t\t\t\tresult = l;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t},\r\n\r\n\t//Returns true if the given layer is in this MarkerClusterGroup\r\n\thasLayer: function (layer) {\r\n\t\tif (!layer) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar i, anArray = this._needsClustering;\r\n\r\n\t\tfor (i = anArray.length - 1; i >= 0; i--) {\r\n\t\t\tif (anArray[i] === layer) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tanArray = this._needsRemoving;\r\n\t\tfor (i = anArray.length - 1; i >= 0; i--) {\r\n\t\t\tif (anArray[i].layer === layer) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn !!(layer.__parent && layer.__parent._group === this) || this._nonPointGroup.hasLayer(layer);\r\n\t},\r\n\r\n\t//Zoom down to show the given layer (spiderfying if necessary) then calls the callback\r\n\tzoomToShowLayer: function (layer, callback) {\r\n\r\n\t\tif (typeof callback !== 'function') {\r\n\t\t\tcallback = function () {};\r\n\t\t}\r\n\r\n\t\tvar showMarker = function () {\r\n\t\t\tif ((layer._icon || layer.__parent._icon) && !this._inZoomAnimation) {\r\n\t\t\t\tthis._map.off('moveend', showMarker, this);\r\n\t\t\t\tthis.off('animationend', showMarker, this);\r\n\r\n\t\t\t\tif (layer._icon) {\r\n\t\t\t\t\tcallback();\r\n\t\t\t\t} else if (layer.__parent._icon) {\r\n\t\t\t\t\tthis.once('spiderfied', callback, this);\r\n\t\t\t\t\tlayer.__parent.spiderfy();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tif (layer._icon && this._map.getBounds().contains(layer.getLatLng())) {\r\n\t\t\t//Layer is visible ond on screen, immediate return\r\n\t\t\tcallback();\r\n\t\t} else if (layer.__parent._zoom < Math.round(this._map._zoom)) {\r\n\t\t\t//Layer should be visible at this zoom level. It must not be on screen so just pan over to it\r\n\t\t\tthis._map.on('moveend', showMarker, this);\r\n\t\t\tthis._map.panTo(layer.getLatLng());\r\n\t\t} else {\r\n\t\t\tthis._map.on('moveend', showMarker, this);\r\n\t\t\tthis.on('animationend', showMarker, this);\r\n\t\t\tlayer.__parent.zoomToBounds();\r\n\t\t}\r\n\t},\r\n\r\n\t//Overrides FeatureGroup.onAdd\r\n\tonAdd: function (map) {\r\n\t\tthis._map = map;\r\n\t\tvar i, l, layer;\r\n\r\n\t\tif (!isFinite(this._map.getMaxZoom())) {\r\n\t\t\tthrow \"Map has no maxZoom specified\";\r\n\t\t}\r\n\r\n\t\tthis._featureGroup.addTo(map);\r\n\t\tthis._nonPointGroup.addTo(map);\r\n\r\n\t\tif (!this._gridClusters) {\r\n\t\t\tthis._generateInitialClusters();\r\n\t\t}\r\n\r\n\t\tthis._maxLat = map.options.crs.projection.MAX_LATITUDE;\r\n\r\n\t\t//Restore all the positions as they are in the MCG before removing them\r\n\t\tfor (i = 0, l = this._needsRemoving.length; i < l; i++) {\r\n\t\t\tlayer = this._needsRemoving[i];\r\n\t\t\tlayer.newlatlng = layer.layer._latlng;\r\n\t\t\tlayer.layer._latlng = layer.latlng;\r\n\t\t}\r\n\t\t//Remove them, then restore their new positions\r\n\t\tfor (i = 0, l = this._needsRemoving.length; i < l; i++) {\r\n\t\t\tlayer = this._needsRemoving[i];\r\n\t\t\tthis._removeLayer(layer.layer, true);\r\n\t\t\tlayer.layer._latlng = layer.newlatlng;\r\n\t\t}\r\n\t\tthis._needsRemoving = [];\r\n\r\n\t\t//Remember the current zoom level and bounds\r\n\t\tthis._zoom = Math.round(this._map._zoom);\r\n\t\tthis._currentShownBounds = this._getExpandedVisibleBounds();\r\n\r\n\t\tthis._map.on('zoomend', this._zoomEnd, this);\r\n\t\tthis._map.on('moveend', this._moveEnd, this);\r\n\r\n\t\tif (this._spiderfierOnAdd) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely\r\n\t\t\tthis._spiderfierOnAdd();\r\n\t\t}\r\n\r\n\t\tthis._bindEvents();\r\n\r\n\t\t//Actually add our markers to the map:\r\n\t\tl = this._needsClustering;\r\n\t\tthis._needsClustering = [];\r\n\t\tthis.addLayers(l, true);\r\n\t},\r\n\r\n\t//Overrides FeatureGroup.onRemove\r\n\tonRemove: function (map) {\r\n\t\tmap.off('zoomend', this._zoomEnd, this);\r\n\t\tmap.off('moveend', this._moveEnd, this);\r\n\r\n\t\tthis._unbindEvents();\r\n\r\n\t\t//In case we are in a cluster animation\r\n\t\tthis._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', '');\r\n\r\n\t\tif (this._spiderfierOnRemove) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely\r\n\t\t\tthis._spiderfierOnRemove();\r\n\t\t}\r\n\r\n\t\tdelete this._maxLat;\r\n\r\n\t\t//Clean up all the layers we added to the map\r\n\t\tthis._hideCoverage();\r\n\t\tthis._featureGroup.remove();\r\n\t\tthis._nonPointGroup.remove();\r\n\r\n\t\tthis._featureGroup.clearLayers();\r\n\r\n\t\tthis._map = null;\r\n\t},\r\n\r\n\tgetVisibleParent: function (marker) {\r\n\t\tvar vMarker = marker;\r\n\t\twhile (vMarker && !vMarker._icon) {\r\n\t\t\tvMarker = vMarker.__parent;\r\n\t\t}\r\n\t\treturn vMarker || null;\r\n\t},\r\n\r\n\t//Remove the given object from the given array\r\n\t_arraySplice: function (anArray, obj) {\r\n\t\tfor (var i = anArray.length - 1; i >= 0; i--) {\r\n\t\t\tif (anArray[i] === obj) {\r\n\t\t\t\tanArray.splice(i, 1);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Removes a marker from all _gridUnclustered zoom levels, starting at the supplied zoom.\r\n\t * @param marker to be removed from _gridUnclustered.\r\n\t * @param z integer bottom start zoom level (included)\r\n\t * @private\r\n\t */\r\n\t_removeFromGridUnclustered: function (marker, z) {\r\n\t\tvar map = this._map,\r\n\t\t gridUnclustered = this._gridUnclustered,\r\n\t\t\tminZoom = Math.floor(this._map.getMinZoom());\r\n\r\n\t\tfor (; z >= minZoom; z--) {\r\n\t\t\tif (!gridUnclustered[z].removeObject(marker, map.project(marker.getLatLng(), z))) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_childMarkerDragStart: function (e) {\r\n\t\te.target.__dragStart = e.target._latlng;\r\n\t},\r\n\r\n\t_childMarkerMoved: function (e) {\r\n\t\tif (!this._ignoreMove && !e.target.__dragStart) {\r\n\t\t\tvar isPopupOpen = e.target._popup && e.target._popup.isOpen();\r\n\r\n\t\t\tthis._moveChild(e.target, e.oldLatLng, e.latlng);\r\n\r\n\t\t\tif (isPopupOpen) {\r\n\t\t\t\te.target.openPopup();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_moveChild: function (layer, from, to) {\r\n\t\tlayer._latlng = from;\r\n\t\tthis.removeLayer(layer);\r\n\r\n\t\tlayer._latlng = to;\r\n\t\tthis.addLayer(layer);\r\n\t},\r\n\r\n\t_childMarkerDragEnd: function (e) {\r\n\t\tvar dragStart = e.target.__dragStart;\r\n\t\tdelete e.target.__dragStart;\r\n\t\tif (dragStart) {\r\n\t\t\tthis._moveChild(e.target, dragStart, e.target._latlng);\r\n\t\t}\t\t\r\n\t},\r\n\r\n\r\n\t//Internal function for removing a marker from everything.\r\n\t//dontUpdateMap: set to true if you will handle updating the map manually (for bulk functions)\r\n\t_removeLayer: function (marker, removeFromDistanceGrid, dontUpdateMap) {\r\n\t\tvar gridClusters = this._gridClusters,\r\n\t\t\tgridUnclustered = this._gridUnclustered,\r\n\t\t\tfg = this._featureGroup,\r\n\t\t\tmap = this._map,\r\n\t\t\tminZoom = Math.floor(this._map.getMinZoom());\r\n\r\n\t\t//Remove the marker from distance clusters it might be in\r\n\t\tif (removeFromDistanceGrid) {\r\n\t\t\tthis._removeFromGridUnclustered(marker, this._maxZoom);\r\n\t\t}\r\n\r\n\t\t//Work our way up the clusters removing them as we go if required\r\n\t\tvar cluster = marker.__parent,\r\n\t\t\tmarkers = cluster._markers,\r\n\t\t\totherMarker;\r\n\r\n\t\t//Remove the marker from the immediate parents marker list\r\n\t\tthis._arraySplice(markers, marker);\r\n\r\n\t\twhile (cluster) {\r\n\t\t\tcluster._childCount--;\r\n\t\t\tcluster._boundsNeedUpdate = true;\r\n\r\n\t\t\tif (cluster._zoom < minZoom) {\r\n\t\t\t\t//Top level, do nothing\r\n\t\t\t\tbreak;\r\n\t\t\t} else if (removeFromDistanceGrid && cluster._childCount <= 1) { //Cluster no longer required\r\n\t\t\t\t//We need to push the other marker up to the parent\r\n\t\t\t\totherMarker = cluster._markers[0] === marker ? cluster._markers[1] : cluster._markers[0];\r\n\r\n\t\t\t\t//Update distance grid\r\n\t\t\t\tgridClusters[cluster._zoom].removeObject(cluster, map.project(cluster._cLatLng, cluster._zoom));\r\n\t\t\t\tgridUnclustered[cluster._zoom].addObject(otherMarker, map.project(otherMarker.getLatLng(), cluster._zoom));\r\n\r\n\t\t\t\t//Move otherMarker up to parent\r\n\t\t\t\tthis._arraySplice(cluster.__parent._childClusters, cluster);\r\n\t\t\t\tcluster.__parent._markers.push(otherMarker);\r\n\t\t\t\totherMarker.__parent = cluster.__parent;\r\n\r\n\t\t\t\tif (cluster._icon) {\r\n\t\t\t\t\t//Cluster is currently on the map, need to put the marker on the map instead\r\n\t\t\t\t\tfg.removeLayer(cluster);\r\n\t\t\t\t\tif (!dontUpdateMap) {\r\n\t\t\t\t\t\tfg.addLayer(otherMarker);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tcluster._iconNeedsUpdate = true;\r\n\t\t\t}\r\n\r\n\t\t\tcluster = cluster.__parent;\r\n\t\t}\r\n\r\n\t\tdelete marker.__parent;\r\n\t},\r\n\r\n\t_isOrIsParent: function (el, oel) {\r\n\t\twhile (oel) {\r\n\t\t\tif (el === oel) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\toel = oel.parentNode;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t//Override L.Evented.fire\r\n\tfire: function (type, data, propagate) {\r\n\t\tif (data && data.layer instanceof L.MarkerCluster) {\r\n\t\t\t//Prevent multiple clustermouseover/off events if the icon is made up of stacked divs (Doesn't work in ie <= 8, no relatedTarget)\r\n\t\t\tif (data.originalEvent && this._isOrIsParent(data.layer._icon, data.originalEvent.relatedTarget)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\ttype = 'cluster' + type;\r\n\t\t}\r\n\r\n\t\tL.FeatureGroup.prototype.fire.call(this, type, data, propagate);\r\n\t},\r\n\r\n\t//Override L.Evented.listens\r\n\tlistens: function (type, propagate) {\r\n\t\treturn L.FeatureGroup.prototype.listens.call(this, type, propagate) || L.FeatureGroup.prototype.listens.call(this, 'cluster' + type, propagate);\r\n\t},\r\n\r\n\t//Default functionality\r\n\t_defaultIconCreateFunction: function (cluster) {\r\n\t\tvar childCount = cluster.getChildCount();\r\n\r\n\t\tvar c = ' marker-cluster-';\r\n\t\tif (childCount < 10) {\r\n\t\t\tc += 'small';\r\n\t\t} else if (childCount < 100) {\r\n\t\t\tc += 'medium';\r\n\t\t} else {\r\n\t\t\tc += 'large';\r\n\t\t}\r\n\r\n\t\treturn new L.DivIcon({ html: '
' + childCount + '
', className: 'marker-cluster' + c, iconSize: new L.Point(40, 40) });\r\n\t},\r\n\r\n\t_bindEvents: function () {\r\n\t\tvar map = this._map,\r\n\t\t spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom,\r\n\t\t showCoverageOnHover = this.options.showCoverageOnHover,\r\n\t\t zoomToBoundsOnClick = this.options.zoomToBoundsOnClick;\r\n\r\n\t\t//Zoom on cluster click or spiderfy if we are at the lowest level\r\n\t\tif (spiderfyOnMaxZoom || zoomToBoundsOnClick) {\r\n\t\t\tthis.on('clusterclick', this._zoomOrSpiderfy, this);\r\n\t\t}\r\n\r\n\t\t//Show convex hull (boundary) polygon on mouse over\r\n\t\tif (showCoverageOnHover) {\r\n\t\t\tthis.on('clustermouseover', this._showCoverage, this);\r\n\t\t\tthis.on('clustermouseout', this._hideCoverage, this);\r\n\t\t\tmap.on('zoomend', this._hideCoverage, this);\r\n\t\t}\r\n\t},\r\n\r\n\t_zoomOrSpiderfy: function (e) {\r\n\t\tvar cluster = e.layer,\r\n\t\t bottomCluster = cluster;\r\n\r\n\t\twhile (bottomCluster._childClusters.length === 1) {\r\n\t\t\tbottomCluster = bottomCluster._childClusters[0];\r\n\t\t}\r\n\r\n\t\tif (bottomCluster._zoom === this._maxZoom &&\r\n\t\t\tbottomCluster._childCount === cluster._childCount &&\r\n\t\t\tthis.options.spiderfyOnMaxZoom) {\r\n\r\n\t\t\t// All child markers are contained in a single cluster from this._maxZoom to this cluster.\r\n\t\t\tcluster.spiderfy();\r\n\t\t} else if (this.options.zoomToBoundsOnClick) {\r\n\t\t\tcluster.zoomToBounds();\r\n\t\t}\r\n\r\n\t\t// Focus the map again for keyboard users.\r\n\t\tif (e.originalEvent && e.originalEvent.keyCode === 13) {\r\n\t\t\tthis._map._container.focus();\r\n\t\t}\r\n\t},\r\n\r\n\t_showCoverage: function (e) {\r\n\t\tvar map = this._map;\r\n\t\tif (this._inZoomAnimation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (this._shownPolygon) {\r\n\t\t\tmap.removeLayer(this._shownPolygon);\r\n\t\t}\r\n\t\tif (e.layer.getChildCount() > 2 && e.layer !== this._spiderfied) {\r\n\t\t\tthis._shownPolygon = new L.Polygon(e.layer.getConvexHull(), this.options.polygonOptions);\r\n\t\t\tmap.addLayer(this._shownPolygon);\r\n\t\t}\r\n\t},\r\n\r\n\t_hideCoverage: function () {\r\n\t\tif (this._shownPolygon) {\r\n\t\t\tthis._map.removeLayer(this._shownPolygon);\r\n\t\t\tthis._shownPolygon = null;\r\n\t\t}\r\n\t},\r\n\r\n\t_unbindEvents: function () {\r\n\t\tvar spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom,\r\n\t\t\tshowCoverageOnHover = this.options.showCoverageOnHover,\r\n\t\t\tzoomToBoundsOnClick = this.options.zoomToBoundsOnClick,\r\n\t\t\tmap = this._map;\r\n\r\n\t\tif (spiderfyOnMaxZoom || zoomToBoundsOnClick) {\r\n\t\t\tthis.off('clusterclick', this._zoomOrSpiderfy, this);\r\n\t\t}\r\n\t\tif (showCoverageOnHover) {\r\n\t\t\tthis.off('clustermouseover', this._showCoverage, this);\r\n\t\t\tthis.off('clustermouseout', this._hideCoverage, this);\r\n\t\t\tmap.off('zoomend', this._hideCoverage, this);\r\n\t\t}\r\n\t},\r\n\r\n\t_zoomEnd: function () {\r\n\t\tif (!this._map) { //May have been removed from the map by a zoomEnd handler\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._mergeSplitClusters();\r\n\r\n\t\tthis._zoom = Math.round(this._map._zoom);\r\n\t\tthis._currentShownBounds = this._getExpandedVisibleBounds();\r\n\t},\r\n\r\n\t_moveEnd: function () {\r\n\t\tif (this._inZoomAnimation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar newBounds = this._getExpandedVisibleBounds();\r\n\r\n\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, newBounds);\r\n\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, Math.round(this._map._zoom), newBounds);\r\n\r\n\t\tthis._currentShownBounds = newBounds;\r\n\t\treturn;\r\n\t},\r\n\r\n\t_generateInitialClusters: function () {\r\n\t\tvar maxZoom = Math.ceil(this._map.getMaxZoom()),\r\n\t\t\tminZoom = Math.floor(this._map.getMinZoom()),\r\n\t\t\tradius = this.options.maxClusterRadius,\r\n\t\t\tradiusFn = radius;\r\n\r\n\t\t//If we just set maxClusterRadius to a single number, we need to create\r\n\t\t//a simple function to return that number. Otherwise, we just have to\r\n\t\t//use the function we've passed in.\r\n\t\tif (typeof radius !== \"function\") {\r\n\t\t\tradiusFn = function () { return radius; };\r\n\t\t}\r\n\r\n\t\tif (this.options.disableClusteringAtZoom !== null) {\r\n\t\t\tmaxZoom = this.options.disableClusteringAtZoom - 1;\r\n\t\t}\r\n\t\tthis._maxZoom = maxZoom;\r\n\t\tthis._gridClusters = {};\r\n\t\tthis._gridUnclustered = {};\r\n\r\n\t\t//Set up DistanceGrids for each zoom\r\n\t\tfor (var zoom = maxZoom; zoom >= minZoom; zoom--) {\r\n\t\t\tthis._gridClusters[zoom] = new L.DistanceGrid(radiusFn(zoom));\r\n\t\t\tthis._gridUnclustered[zoom] = new L.DistanceGrid(radiusFn(zoom));\r\n\t\t}\r\n\r\n\t\t// Instantiate the appropriate L.MarkerCluster class (animated or not).\r\n\t\tthis._topClusterLevel = new this._markerCluster(this, minZoom - 1);\r\n\t},\r\n\r\n\t//Zoom: Zoom to start adding at (Pass this._maxZoom to start at the bottom)\r\n\t_addLayer: function (layer, zoom) {\r\n\t\tvar gridClusters = this._gridClusters,\r\n\t\t gridUnclustered = this._gridUnclustered,\r\n\t\t\tminZoom = Math.floor(this._map.getMinZoom()),\r\n\t\t markerPoint, z;\r\n\r\n\t\tif (this.options.singleMarkerMode) {\r\n\t\t\tthis._overrideMarkerIcon(layer);\r\n\t\t}\r\n\r\n\t\tlayer.on(this._childMarkerEventHandlers, this);\r\n\r\n\t\t//Find the lowest zoom level to slot this one in\r\n\t\tfor (; zoom >= minZoom; zoom--) {\r\n\t\t\tmarkerPoint = this._map.project(layer.getLatLng(), zoom); // calculate pixel position\r\n\r\n\t\t\t//Try find a cluster close by\r\n\t\t\tvar closest = gridClusters[zoom].getNearObject(markerPoint);\r\n\t\t\tif (closest) {\r\n\t\t\t\tclosest._addChild(layer);\r\n\t\t\t\tlayer.__parent = closest;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t//Try find a marker close by to form a new cluster with\r\n\t\t\tclosest = gridUnclustered[zoom].getNearObject(markerPoint);\r\n\t\t\tif (closest) {\r\n\t\t\t\tvar parent = closest.__parent;\r\n\t\t\t\tif (parent) {\r\n\t\t\t\t\tthis._removeLayer(closest, false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Create new cluster with these 2 in it\r\n\r\n\t\t\t\tvar newCluster = new this._markerCluster(this, zoom, closest, layer);\r\n\t\t\t\tgridClusters[zoom].addObject(newCluster, this._map.project(newCluster._cLatLng, zoom));\r\n\t\t\t\tclosest.__parent = newCluster;\r\n\t\t\t\tlayer.__parent = newCluster;\r\n\r\n\t\t\t\t//First create any new intermediate parent clusters that don't exist\r\n\t\t\t\tvar lastParent = newCluster;\r\n\t\t\t\tfor (z = zoom - 1; z > parent._zoom; z--) {\r\n\t\t\t\t\tlastParent = new this._markerCluster(this, z, lastParent);\r\n\t\t\t\t\tgridClusters[z].addObject(lastParent, this._map.project(closest.getLatLng(), z));\r\n\t\t\t\t}\r\n\t\t\t\tparent._addChild(lastParent);\r\n\r\n\t\t\t\t//Remove closest from this zoom level and any above that it is in, replace with newCluster\r\n\t\t\t\tthis._removeFromGridUnclustered(closest, zoom);\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t//Didn't manage to cluster in at this zoom, record us as a marker here and continue upwards\r\n\t\t\tgridUnclustered[zoom].addObject(layer, markerPoint);\r\n\t\t}\r\n\r\n\t\t//Didn't get in anything, add us to the top\r\n\t\tthis._topClusterLevel._addChild(layer);\r\n\t\tlayer.__parent = this._topClusterLevel;\r\n\t\treturn;\r\n\t},\r\n\r\n\t/**\r\n\t * Refreshes the icon of all \"dirty\" visible clusters.\r\n\t * Non-visible \"dirty\" clusters will be updated when they are added to the map.\r\n\t * @private\r\n\t */\r\n\t_refreshClustersIcons: function () {\r\n\t\tthis._featureGroup.eachLayer(function (c) {\r\n\t\t\tif (c instanceof L.MarkerCluster && c._iconNeedsUpdate) {\r\n\t\t\t\tc._updateIcon();\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t//Enqueue code to fire after the marker expand/contract has happened\r\n\t_enqueue: function (fn) {\r\n\t\tthis._queue.push(fn);\r\n\t\tif (!this._queueTimeout) {\r\n\t\t\tthis._queueTimeout = setTimeout(L.bind(this._processQueue, this), 300);\r\n\t\t}\r\n\t},\r\n\t_processQueue: function () {\r\n\t\tfor (var i = 0; i < this._queue.length; i++) {\r\n\t\t\tthis._queue[i].call(this);\r\n\t\t}\r\n\t\tthis._queue.length = 0;\r\n\t\tclearTimeout(this._queueTimeout);\r\n\t\tthis._queueTimeout = null;\r\n\t},\r\n\r\n\t//Merge and split any existing clusters that are too big or small\r\n\t_mergeSplitClusters: function () {\r\n\t\tvar mapZoom = Math.round(this._map._zoom);\r\n\r\n\t\t//In case we are starting to split before the animation finished\r\n\t\tthis._processQueue();\r\n\r\n\t\tif (this._zoom < mapZoom && this._currentShownBounds.intersects(this._getExpandedVisibleBounds())) { //Zoom in, split\r\n\t\t\tthis._animationStart();\r\n\t\t\t//Remove clusters now off screen\r\n\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, this._getExpandedVisibleBounds());\r\n\r\n\t\t\tthis._animationZoomIn(this._zoom, mapZoom);\r\n\r\n\t\t} else if (this._zoom > mapZoom) { //Zoom out, merge\r\n\t\t\tthis._animationStart();\r\n\r\n\t\t\tthis._animationZoomOut(this._zoom, mapZoom);\r\n\t\t} else {\r\n\t\t\tthis._moveEnd();\r\n\t\t}\r\n\t},\r\n\r\n\t//Gets the maps visible bounds expanded in each direction by the size of the screen (so the user cannot see an area we do not cover in one pan)\r\n\t_getExpandedVisibleBounds: function () {\r\n\t\tif (!this.options.removeOutsideVisibleBounds) {\r\n\t\t\treturn this._mapBoundsInfinite;\r\n\t\t} else if (L.Browser.mobile) {\r\n\t\t\treturn this._checkBoundsMaxLat(this._map.getBounds());\r\n\t\t}\r\n\r\n\t\treturn this._checkBoundsMaxLat(this._map.getBounds().pad(1)); // Padding expands the bounds by its own dimensions but scaled with the given factor.\r\n\t},\r\n\r\n\t/**\r\n\t * Expands the latitude to Infinity (or -Infinity) if the input bounds reach the map projection maximum defined latitude\r\n\t * (in the case of Web/Spherical Mercator, it is 85.0511287798 / see https://en.wikipedia.org/wiki/Web_Mercator#Formulas).\r\n\t * Otherwise, the removeOutsideVisibleBounds option will remove markers beyond that limit, whereas the same markers without\r\n\t * this option (or outside MCG) will have their position floored (ceiled) by the projection and rendered at that limit,\r\n\t * making the user think that MCG \"eats\" them and never displays them again.\r\n\t * @param bounds L.LatLngBounds\r\n\t * @returns {L.LatLngBounds}\r\n\t * @private\r\n\t */\r\n\t_checkBoundsMaxLat: function (bounds) {\r\n\t\tvar maxLat = this._maxLat;\r\n\r\n\t\tif (maxLat !== undefined) {\r\n\t\t\tif (bounds.getNorth() >= maxLat) {\r\n\t\t\t\tbounds._northEast.lat = Infinity;\r\n\t\t\t}\r\n\t\t\tif (bounds.getSouth() <= -maxLat) {\r\n\t\t\t\tbounds._southWest.lat = -Infinity;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn bounds;\r\n\t},\r\n\r\n\t//Shared animation code\r\n\t_animationAddLayerNonAnimated: function (layer, newCluster) {\r\n\t\tif (newCluster === layer) {\r\n\t\t\tthis._featureGroup.addLayer(layer);\r\n\t\t} else if (newCluster._childCount === 2) {\r\n\t\t\tnewCluster._addToMap();\r\n\r\n\t\t\tvar markers = newCluster.getAllChildMarkers();\r\n\t\t\tthis._featureGroup.removeLayer(markers[0]);\r\n\t\t\tthis._featureGroup.removeLayer(markers[1]);\r\n\t\t} else {\r\n\t\t\tnewCluster._updateIcon();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Extracts individual (i.e. non-group) layers from a Layer Group.\r\n\t * @param group to extract layers from.\r\n\t * @param output {Array} in which to store the extracted layers.\r\n\t * @returns {*|Array}\r\n\t * @private\r\n\t */\r\n\t_extractNonGroupLayers: function (group, output) {\r\n\t\tvar layers = group.getLayers(),\r\n\t\t i = 0,\r\n\t\t layer;\r\n\r\n\t\toutput = output || [];\r\n\r\n\t\tfor (; i < layers.length; i++) {\r\n\t\t\tlayer = layers[i];\r\n\r\n\t\t\tif (layer instanceof L.LayerGroup) {\r\n\t\t\t\tthis._extractNonGroupLayers(layer, output);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\toutput.push(layer);\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n\r\n\t/**\r\n\t * Implements the singleMarkerMode option.\r\n\t * @param layer Marker to re-style using the Clusters iconCreateFunction.\r\n\t * @returns {L.Icon} The newly created icon.\r\n\t * @private\r\n\t */\r\n\t_overrideMarkerIcon: function (layer) {\r\n\t\tvar icon = layer.options.icon = this.options.iconCreateFunction({\r\n\t\t\tgetChildCount: function () {\r\n\t\t\t\treturn 1;\r\n\t\t\t},\r\n\t\t\tgetAllChildMarkers: function () {\r\n\t\t\t\treturn [layer];\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn icon;\r\n\t}\r\n});\r\n\r\n// Constant bounds used in case option \"removeOutsideVisibleBounds\" is set to false.\r\nL.MarkerClusterGroup.include({\r\n\t_mapBoundsInfinite: new L.LatLngBounds(new L.LatLng(-Infinity, -Infinity), new L.LatLng(Infinity, Infinity))\r\n});\r\n\r\nL.MarkerClusterGroup.include({\r\n\t_noAnimation: {\r\n\t\t//Non Animated versions of everything\r\n\t\t_animationStart: function () {\r\n\t\t\t//Do nothing...\r\n\t\t},\r\n\t\t_animationZoomIn: function (previousZoomLevel, newZoomLevel) {\r\n\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel);\r\n\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());\r\n\r\n\t\t\t//We didn't actually animate, but we use this event to mean \"clustering animations have finished\"\r\n\t\t\tthis.fire('animationend');\r\n\t\t},\r\n\t\t_animationZoomOut: function (previousZoomLevel, newZoomLevel) {\r\n\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel);\r\n\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());\r\n\r\n\t\t\t//We didn't actually animate, but we use this event to mean \"clustering animations have finished\"\r\n\t\t\tthis.fire('animationend');\r\n\t\t},\r\n\t\t_animationAddLayer: function (layer, newCluster) {\r\n\t\t\tthis._animationAddLayerNonAnimated(layer, newCluster);\r\n\t\t}\r\n\t},\r\n\r\n\t_withAnimation: {\r\n\t\t//Animated versions here\r\n\t\t_animationStart: function () {\r\n\t\t\tthis._map._mapPane.className += ' leaflet-cluster-anim';\r\n\t\t\tthis._inZoomAnimation++;\r\n\t\t},\r\n\r\n\t\t_animationZoomIn: function (previousZoomLevel, newZoomLevel) {\r\n\t\t\tvar bounds = this._getExpandedVisibleBounds(),\r\n\t\t\t fg = this._featureGroup,\r\n\t\t\t\tminZoom = Math.floor(this._map.getMinZoom()),\r\n\t\t\t i;\r\n\r\n\t\t\tthis._ignoreMove = true;\r\n\r\n\t\t\t//Add all children of current clusters to map and remove those clusters from map\r\n\t\t\tthis._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) {\r\n\t\t\t\tvar startPos = c._latlng,\r\n\t\t\t\t markers = c._markers,\r\n\t\t\t\t m;\r\n\r\n\t\t\t\tif (!bounds.contains(startPos)) {\r\n\t\t\t\t\tstartPos = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (c._isSingleParent() && previousZoomLevel + 1 === newZoomLevel) { //Immediately add the new child and remove us\r\n\t\t\t\t\tfg.removeLayer(c);\r\n\t\t\t\t\tc._recursivelyAddChildrenToMap(null, newZoomLevel, bounds);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t//Fade out old cluster\r\n\t\t\t\t\tc.clusterHide();\r\n\t\t\t\t\tc._recursivelyAddChildrenToMap(startPos, newZoomLevel, bounds);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Remove all markers that aren't visible any more\r\n\t\t\t\t//TODO: Do we actually need to do this on the higher levels too?\r\n\t\t\t\tfor (i = markers.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tm = markers[i];\r\n\t\t\t\t\tif (!bounds.contains(m._latlng)) {\r\n\t\t\t\t\t\tfg.removeLayer(m);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\r\n\t\t\tthis._forceLayout();\r\n\r\n\t\t\t//Update opacities\r\n\t\t\tthis._topClusterLevel._recursivelyBecomeVisible(bounds, newZoomLevel);\r\n\t\t\t//TODO Maybe? Update markers in _recursivelyBecomeVisible\r\n\t\t\tfg.eachLayer(function (n) {\r\n\t\t\t\tif (!(n instanceof L.MarkerCluster) && n._icon) {\r\n\t\t\t\t\tn.clusterShow();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//update the positions of the just added clusters/markers\r\n\t\t\tthis._topClusterLevel._recursively(bounds, previousZoomLevel, newZoomLevel, function (c) {\r\n\t\t\t\tc._recursivelyRestoreChildPositions(newZoomLevel);\r\n\t\t\t});\r\n\r\n\t\t\tthis._ignoreMove = false;\r\n\r\n\t\t\t//Remove the old clusters and close the zoom animation\r\n\t\t\tthis._enqueue(function () {\r\n\t\t\t\t//update the positions of the just added clusters/markers\r\n\t\t\t\tthis._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) {\r\n\t\t\t\t\tfg.removeLayer(c);\r\n\t\t\t\t\tc.clusterShow();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis._animationEnd();\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\t_animationZoomOut: function (previousZoomLevel, newZoomLevel) {\r\n\t\t\tthis._animationZoomOutSingle(this._topClusterLevel, previousZoomLevel - 1, newZoomLevel);\r\n\r\n\t\t\t//Need to add markers for those that weren't on the map before but are now\r\n\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());\r\n\t\t\t//Remove markers that were on the map before but won't be now\r\n\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel, this._getExpandedVisibleBounds());\r\n\t\t},\r\n\r\n\t\t_animationAddLayer: function (layer, newCluster) {\r\n\t\t\tvar me = this,\r\n\t\t\t fg = this._featureGroup;\r\n\r\n\t\t\tfg.addLayer(layer);\r\n\t\t\tif (newCluster !== layer) {\r\n\t\t\t\tif (newCluster._childCount > 2) { //Was already a cluster\r\n\r\n\t\t\t\t\tnewCluster._updateIcon();\r\n\t\t\t\t\tthis._forceLayout();\r\n\t\t\t\t\tthis._animationStart();\r\n\r\n\t\t\t\t\tlayer._setPos(this._map.latLngToLayerPoint(newCluster.getLatLng()));\r\n\t\t\t\t\tlayer.clusterHide();\r\n\r\n\t\t\t\t\tthis._enqueue(function () {\r\n\t\t\t\t\t\tfg.removeLayer(layer);\r\n\t\t\t\t\t\tlayer.clusterShow();\r\n\r\n\t\t\t\t\t\tme._animationEnd();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t} else { //Just became a cluster\r\n\t\t\t\t\tthis._forceLayout();\r\n\r\n\t\t\t\t\tme._animationStart();\r\n\t\t\t\t\tme._animationZoomOutSingle(newCluster, this._map.getMaxZoom(), this._zoom);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// Private methods for animated versions.\r\n\t_animationZoomOutSingle: function (cluster, previousZoomLevel, newZoomLevel) {\r\n\t\tvar bounds = this._getExpandedVisibleBounds(),\r\n\t\t\tminZoom = Math.floor(this._map.getMinZoom());\r\n\r\n\t\t//Animate all of the markers in the clusters to move to their cluster center point\r\n\t\tcluster._recursivelyAnimateChildrenInAndAddSelfToMap(bounds, minZoom, previousZoomLevel + 1, newZoomLevel);\r\n\r\n\t\tvar me = this;\r\n\r\n\t\t//Update the opacity (If we immediately set it they won't animate)\r\n\t\tthis._forceLayout();\r\n\t\tcluster._recursivelyBecomeVisible(bounds, newZoomLevel);\r\n\r\n\t\t//TODO: Maybe use the transition timing stuff to make this more reliable\r\n\t\t//When the animations are done, tidy up\r\n\t\tthis._enqueue(function () {\r\n\r\n\t\t\t//This cluster stopped being a cluster before the timeout fired\r\n\t\t\tif (cluster._childCount === 1) {\r\n\t\t\t\tvar m = cluster._markers[0];\r\n\t\t\t\t//If we were in a cluster animation at the time then the opacity and position of our child could be wrong now, so fix it\r\n\t\t\t\tthis._ignoreMove = true;\r\n\t\t\t\tm.setLatLng(m.getLatLng());\r\n\t\t\t\tthis._ignoreMove = false;\r\n\t\t\t\tif (m.clusterShow) {\r\n\t\t\t\t\tm.clusterShow();\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tcluster._recursively(bounds, newZoomLevel, minZoom, function (c) {\r\n\t\t\t\t\tc._recursivelyRemoveChildrenFromMap(bounds, minZoom, previousZoomLevel + 1);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tme._animationEnd();\r\n\t\t});\r\n\t},\r\n\r\n\t_animationEnd: function () {\r\n\t\tif (this._map) {\r\n\t\t\tthis._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', '');\r\n\t\t}\r\n\t\tthis._inZoomAnimation--;\r\n\t\tthis.fire('animationend');\r\n\t},\r\n\r\n\t//Force a browser layout of stuff in the map\r\n\t// Should apply the current opacity and location to all elements so we can update them again for an animation\r\n\t_forceLayout: function () {\r\n\t\t//In my testing this works, infact offsetWidth of any element seems to work.\r\n\t\t//Could loop all this._layers and do this for each _icon if it stops working\r\n\r\n\t\tL.Util.falseFn(document.body.offsetWidth);\r\n\t}\r\n});\r\n\r\nL.markerClusterGroup = function (options) {\r\n\treturn new L.MarkerClusterGroup(options);\r\n};\r\n","export var MarkerCluster = L.MarkerCluster = L.Marker.extend({\r\n\toptions: L.Icon.prototype.options,\r\n\r\n\tinitialize: function (group, zoom, a, b) {\r\n\r\n\t\tL.Marker.prototype.initialize.call(this, a ? (a._cLatLng || a.getLatLng()) : new L.LatLng(0, 0),\r\n { icon: this, pane: group.options.clusterPane });\r\n\r\n\t\tthis._group = group;\r\n\t\tthis._zoom = zoom;\r\n\r\n\t\tthis._markers = [];\r\n\t\tthis._childClusters = [];\r\n\t\tthis._childCount = 0;\r\n\t\tthis._iconNeedsUpdate = true;\r\n\t\tthis._boundsNeedUpdate = true;\r\n\r\n\t\tthis._bounds = new L.LatLngBounds();\r\n\r\n\t\tif (a) {\r\n\t\t\tthis._addChild(a);\r\n\t\t}\r\n\t\tif (b) {\r\n\t\t\tthis._addChild(b);\r\n\t\t}\r\n\t},\r\n\r\n\t//Recursively retrieve all child markers of this cluster\r\n\tgetAllChildMarkers: function (storageArray, ignoreDraggedMarker) {\r\n\t\tstorageArray = storageArray || [];\r\n\r\n\t\tfor (var i = this._childClusters.length - 1; i >= 0; i--) {\r\n\t\t\tthis._childClusters[i].getAllChildMarkers(storageArray);\r\n\t\t}\r\n\r\n\t\tfor (var j = this._markers.length - 1; j >= 0; j--) {\r\n\t\t\tif (ignoreDraggedMarker && this._markers[j].__dragStart) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tstorageArray.push(this._markers[j]);\r\n\t\t}\r\n\r\n\t\treturn storageArray;\r\n\t},\r\n\r\n\t//Returns the count of how many child markers we have\r\n\tgetChildCount: function () {\r\n\t\treturn this._childCount;\r\n\t},\r\n\r\n\t//Zoom to the minimum of showing all of the child markers, or the extents of this cluster\r\n\tzoomToBounds: function (fitBoundsOptions) {\r\n\t\tvar childClusters = this._childClusters.slice(),\r\n\t\t\tmap = this._group._map,\r\n\t\t\tboundsZoom = map.getBoundsZoom(this._bounds),\r\n\t\t\tzoom = this._zoom + 1,\r\n\t\t\tmapZoom = map.getZoom(),\r\n\t\t\ti;\r\n\r\n\t\t//calculate how far we need to zoom down to see all of the markers\r\n\t\twhile (childClusters.length > 0 && boundsZoom > zoom) {\r\n\t\t\tzoom++;\r\n\t\t\tvar newClusters = [];\r\n\t\t\tfor (i = 0; i < childClusters.length; i++) {\r\n\t\t\t\tnewClusters = newClusters.concat(childClusters[i]._childClusters);\r\n\t\t\t}\r\n\t\t\tchildClusters = newClusters;\r\n\t\t}\r\n\r\n\t\tif (boundsZoom > zoom) {\r\n\t\t\tthis._group._map.setView(this._latlng, zoom);\r\n\t\t} else if (boundsZoom <= mapZoom) { //If fitBounds wouldn't zoom us down, zoom us down instead\r\n\t\t\tthis._group._map.setView(this._latlng, mapZoom + 1);\r\n\t\t} else {\r\n\t\t\tthis._group._map.fitBounds(this._bounds, fitBoundsOptions);\r\n\t\t}\r\n\t},\r\n\r\n\tgetBounds: function () {\r\n\t\tvar bounds = new L.LatLngBounds();\r\n\t\tbounds.extend(this._bounds);\r\n\t\treturn bounds;\r\n\t},\r\n\r\n\t_updateIcon: function () {\r\n\t\tthis._iconNeedsUpdate = true;\r\n\t\tif (this._icon) {\r\n\t\t\tthis.setIcon(this);\r\n\t\t}\r\n\t},\r\n\r\n\t//Cludge for Icon, we pretend to be an icon for performance\r\n\tcreateIcon: function () {\r\n\t\tif (this._iconNeedsUpdate) {\r\n\t\t\tthis._iconObj = this._group.options.iconCreateFunction(this);\r\n\t\t\tthis._iconNeedsUpdate = false;\r\n\t\t}\r\n\t\treturn this._iconObj.createIcon();\r\n\t},\r\n\tcreateShadow: function () {\r\n\t\treturn this._iconObj.createShadow();\r\n\t},\r\n\r\n\r\n\t_addChild: function (new1, isNotificationFromChild) {\r\n\r\n\t\tthis._iconNeedsUpdate = true;\r\n\r\n\t\tthis._boundsNeedUpdate = true;\r\n\t\tthis._setClusterCenter(new1);\r\n\r\n\t\tif (new1 instanceof L.MarkerCluster) {\r\n\t\t\tif (!isNotificationFromChild) {\r\n\t\t\t\tthis._childClusters.push(new1);\r\n\t\t\t\tnew1.__parent = this;\r\n\t\t\t}\r\n\t\t\tthis._childCount += new1._childCount;\r\n\t\t} else {\r\n\t\t\tif (!isNotificationFromChild) {\r\n\t\t\t\tthis._markers.push(new1);\r\n\t\t\t}\r\n\t\t\tthis._childCount++;\r\n\t\t}\r\n\r\n\t\tif (this.__parent) {\r\n\t\t\tthis.__parent._addChild(new1, true);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Makes sure the cluster center is set. If not, uses the child center if it is a cluster, or the marker position.\r\n\t * @param child L.MarkerCluster|L.Marker that will be used as cluster center if not defined yet.\r\n\t * @private\r\n\t */\r\n\t_setClusterCenter: function (child) {\r\n\t\tif (!this._cLatLng) {\r\n\t\t\t// when clustering, take position of the first point as the cluster center\r\n\t\t\tthis._cLatLng = child._cLatLng || child._latlng;\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Assigns impossible bounding values so that the next extend entirely determines the new bounds.\r\n\t * This method avoids having to trash the previous L.LatLngBounds object and to create a new one, which is much slower for this class.\r\n\t * As long as the bounds are not extended, most other methods would probably fail, as they would with bounds initialized but not extended.\r\n\t * @private\r\n\t */\r\n\t_resetBounds: function () {\r\n\t\tvar bounds = this._bounds;\r\n\r\n\t\tif (bounds._southWest) {\r\n\t\t\tbounds._southWest.lat = Infinity;\r\n\t\t\tbounds._southWest.lng = Infinity;\r\n\t\t}\r\n\t\tif (bounds._northEast) {\r\n\t\t\tbounds._northEast.lat = -Infinity;\r\n\t\t\tbounds._northEast.lng = -Infinity;\r\n\t\t}\r\n\t},\r\n\r\n\t_recalculateBounds: function () {\r\n\t\tvar markers = this._markers,\r\n\t\t childClusters = this._childClusters,\r\n\t\t latSum = 0,\r\n\t\t lngSum = 0,\r\n\t\t totalCount = this._childCount,\r\n\t\t i, child, childLatLng, childCount;\r\n\r\n\t\t// Case where all markers are removed from the map and we are left with just an empty _topClusterLevel.\r\n\t\tif (totalCount === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Reset rather than creating a new object, for performance.\r\n\t\tthis._resetBounds();\r\n\r\n\t\t// Child markers.\r\n\t\tfor (i = 0; i < markers.length; i++) {\r\n\t\t\tchildLatLng = markers[i]._latlng;\r\n\r\n\t\t\tthis._bounds.extend(childLatLng);\r\n\r\n\t\t\tlatSum += childLatLng.lat;\r\n\t\t\tlngSum += childLatLng.lng;\r\n\t\t}\r\n\r\n\t\t// Child clusters.\r\n\t\tfor (i = 0; i < childClusters.length; i++) {\r\n\t\t\tchild = childClusters[i];\r\n\r\n\t\t\t// Re-compute child bounds and weighted position first if necessary.\r\n\t\t\tif (child._boundsNeedUpdate) {\r\n\t\t\t\tchild._recalculateBounds();\r\n\t\t\t}\r\n\r\n\t\t\tthis._bounds.extend(child._bounds);\r\n\r\n\t\t\tchildLatLng = child._wLatLng;\r\n\t\t\tchildCount = child._childCount;\r\n\r\n\t\t\tlatSum += childLatLng.lat * childCount;\r\n\t\t\tlngSum += childLatLng.lng * childCount;\r\n\t\t}\r\n\r\n\t\tthis._latlng = this._wLatLng = new L.LatLng(latSum / totalCount, lngSum / totalCount);\r\n\r\n\t\t// Reset dirty flag.\r\n\t\tthis._boundsNeedUpdate = false;\r\n\t},\r\n\r\n\t//Set our markers position as given and add it to the map\r\n\t_addToMap: function (startPos) {\r\n\t\tif (startPos) {\r\n\t\t\tthis._backupLatlng = this._latlng;\r\n\t\t\tthis.setLatLng(startPos);\r\n\t\t}\r\n\t\tthis._group._featureGroup.addLayer(this);\r\n\t},\r\n\r\n\t_recursivelyAnimateChildrenIn: function (bounds, center, maxZoom) {\r\n\t\tthis._recursively(bounds, this._group._map.getMinZoom(), maxZoom - 1,\r\n\t\t\tfunction (c) {\r\n\t\t\t\tvar markers = c._markers,\r\n\t\t\t\t\ti, m;\r\n\t\t\t\tfor (i = markers.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tm = markers[i];\r\n\r\n\t\t\t\t\t//Only do it if the icon is still on the map\r\n\t\t\t\t\tif (m._icon) {\r\n\t\t\t\t\t\tm._setPos(center);\r\n\t\t\t\t\t\tm.clusterHide();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfunction (c) {\r\n\t\t\t\tvar childClusters = c._childClusters,\r\n\t\t\t\t\tj, cm;\r\n\t\t\t\tfor (j = childClusters.length - 1; j >= 0; j--) {\r\n\t\t\t\t\tcm = childClusters[j];\r\n\t\t\t\t\tif (cm._icon) {\r\n\t\t\t\t\t\tcm._setPos(center);\r\n\t\t\t\t\t\tcm.clusterHide();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t},\r\n\r\n\t_recursivelyAnimateChildrenInAndAddSelfToMap: function (bounds, mapMinZoom, previousZoomLevel, newZoomLevel) {\r\n\t\tthis._recursively(bounds, newZoomLevel, mapMinZoom,\r\n\t\t\tfunction (c) {\r\n\t\t\t\tc._recursivelyAnimateChildrenIn(bounds, c._group._map.latLngToLayerPoint(c.getLatLng()).round(), previousZoomLevel);\r\n\r\n\t\t\t\t//TODO: depthToAnimateIn affects _isSingleParent, if there is a multizoom we may/may not be.\r\n\t\t\t\t//As a hack we only do a animation free zoom on a single level zoom, if someone does multiple levels then we always animate\r\n\t\t\t\tif (c._isSingleParent() && previousZoomLevel - 1 === newZoomLevel) {\r\n\t\t\t\t\tc.clusterShow();\r\n\t\t\t\t\tc._recursivelyRemoveChildrenFromMap(bounds, mapMinZoom, previousZoomLevel); //Immediately remove our children as we are replacing them. TODO previousBounds not bounds\r\n\t\t\t\t} else {\r\n\t\t\t\t\tc.clusterHide();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tc._addToMap();\r\n\t\t\t}\r\n\t\t);\r\n\t},\r\n\r\n\t_recursivelyBecomeVisible: function (bounds, zoomLevel) {\r\n\t\tthis._recursively(bounds, this._group._map.getMinZoom(), zoomLevel, null, function (c) {\r\n\t\t\tc.clusterShow();\r\n\t\t});\r\n\t},\r\n\r\n\t_recursivelyAddChildrenToMap: function (startPos, zoomLevel, bounds) {\r\n\t\tthis._recursively(bounds, this._group._map.getMinZoom() - 1, zoomLevel,\r\n\t\t\tfunction (c) {\r\n\t\t\t\tif (zoomLevel === c._zoom) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Add our child markers at startPos (so they can be animated out)\r\n\t\t\t\tfor (var i = c._markers.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tvar nm = c._markers[i];\r\n\r\n\t\t\t\t\tif (!bounds.contains(nm._latlng)) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (startPos) {\r\n\t\t\t\t\t\tnm._backupLatlng = nm.getLatLng();\r\n\r\n\t\t\t\t\t\tnm.setLatLng(startPos);\r\n\t\t\t\t\t\tif (nm.clusterHide) {\r\n\t\t\t\t\t\t\tnm.clusterHide();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tc._group._featureGroup.addLayer(nm);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfunction (c) {\r\n\t\t\t\tc._addToMap(startPos);\r\n\t\t\t}\r\n\t\t);\r\n\t},\r\n\r\n\t_recursivelyRestoreChildPositions: function (zoomLevel) {\r\n\t\t//Fix positions of child markers\r\n\t\tfor (var i = this._markers.length - 1; i >= 0; i--) {\r\n\t\t\tvar nm = this._markers[i];\r\n\t\t\tif (nm._backupLatlng) {\r\n\t\t\t\tnm.setLatLng(nm._backupLatlng);\r\n\t\t\t\tdelete nm._backupLatlng;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (zoomLevel - 1 === this._zoom) {\r\n\t\t\t//Reposition child clusters\r\n\t\t\tfor (var j = this._childClusters.length - 1; j >= 0; j--) {\r\n\t\t\t\tthis._childClusters[j]._restorePosition();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfor (var k = this._childClusters.length - 1; k >= 0; k--) {\r\n\t\t\t\tthis._childClusters[k]._recursivelyRestoreChildPositions(zoomLevel);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_restorePosition: function () {\r\n\t\tif (this._backupLatlng) {\r\n\t\t\tthis.setLatLng(this._backupLatlng);\r\n\t\t\tdelete this._backupLatlng;\r\n\t\t}\r\n\t},\r\n\r\n\t//exceptBounds: If set, don't remove any markers/clusters in it\r\n\t_recursivelyRemoveChildrenFromMap: function (previousBounds, mapMinZoom, zoomLevel, exceptBounds) {\r\n\t\tvar m, i;\r\n\t\tthis._recursively(previousBounds, mapMinZoom - 1, zoomLevel - 1,\r\n\t\t\tfunction (c) {\r\n\t\t\t\t//Remove markers at every level\r\n\t\t\t\tfor (i = c._markers.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tm = c._markers[i];\r\n\t\t\t\t\tif (!exceptBounds || !exceptBounds.contains(m._latlng)) {\r\n\t\t\t\t\t\tc._group._featureGroup.removeLayer(m);\r\n\t\t\t\t\t\tif (m.clusterShow) {\r\n\t\t\t\t\t\t\tm.clusterShow();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfunction (c) {\r\n\t\t\t\t//Remove child clusters at just the bottom level\r\n\t\t\t\tfor (i = c._childClusters.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tm = c._childClusters[i];\r\n\t\t\t\t\tif (!exceptBounds || !exceptBounds.contains(m._latlng)) {\r\n\t\t\t\t\t\tc._group._featureGroup.removeLayer(m);\r\n\t\t\t\t\t\tif (m.clusterShow) {\r\n\t\t\t\t\t\t\tm.clusterShow();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t},\r\n\r\n\t//Run the given functions recursively to this and child clusters\r\n\t// boundsToApplyTo: a L.LatLngBounds representing the bounds of what clusters to recurse in to\r\n\t// zoomLevelToStart: zoom level to start running functions (inclusive)\r\n\t// zoomLevelToStop: zoom level to stop running functions (inclusive)\r\n\t// runAtEveryLevel: function that takes an L.MarkerCluster as an argument that should be applied on every level\r\n\t// runAtBottomLevel: function that takes an L.MarkerCluster as an argument that should be applied at only the bottom level\r\n\t_recursively: function (boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel) {\r\n\t\tvar childClusters = this._childClusters,\r\n\t\t zoom = this._zoom,\r\n\t\t i, c;\r\n\r\n\t\tif (zoomLevelToStart <= zoom) {\r\n\t\t\tif (runAtEveryLevel) {\r\n\t\t\t\trunAtEveryLevel(this);\r\n\t\t\t}\r\n\t\t\tif (runAtBottomLevel && zoom === zoomLevelToStop) {\r\n\t\t\t\trunAtBottomLevel(this);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (zoom < zoomLevelToStart || zoom < zoomLevelToStop) {\r\n\t\t\tfor (i = childClusters.length - 1; i >= 0; i--) {\r\n\t\t\t\tc = childClusters[i];\r\n\t\t\t\tif (c._boundsNeedUpdate) {\r\n\t\t\t\t\tc._recalculateBounds();\r\n\t\t\t\t}\r\n\t\t\t\tif (boundsToApplyTo.intersects(c._bounds)) {\r\n\t\t\t\t\tc._recursively(boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//Returns true if we are the parent of only one cluster and that cluster is the same as us\r\n\t_isSingleParent: function () {\r\n\t\t//Don't need to check this._markers as the rest won't work if there are any\r\n\t\treturn this._childClusters.length > 0 && this._childClusters[0]._childCount === this._childCount;\r\n\t}\r\n});\r\n\r\n","/*\r\n* Extends L.Marker to include two extra methods: clusterHide and clusterShow.\r\n* \r\n* They work as setOpacity(0) and setOpacity(1) respectively, but\r\n* don't overwrite the options.opacity\r\n* \r\n*/\r\n\r\nL.Marker.include({\r\n\tclusterHide: function () {\r\n\t\tvar backup = this.options.opacity;\r\n\t\tthis.setOpacity(0);\r\n\t\tthis.options.opacity = backup;\r\n\t\treturn this;\r\n\t},\r\n\t\r\n\tclusterShow: function () {\r\n\t\treturn this.setOpacity(this.options.opacity);\r\n\t}\r\n});\r\n\r\n\r\n","\r\nL.DistanceGrid = function (cellSize) {\r\n\tthis._cellSize = cellSize;\r\n\tthis._sqCellSize = cellSize * cellSize;\r\n\tthis._grid = {};\r\n\tthis._objectPoint = { };\r\n};\r\n\r\nL.DistanceGrid.prototype = {\r\n\r\n\taddObject: function (obj, point) {\r\n\t\tvar x = this._getCoord(point.x),\r\n\t\t y = this._getCoord(point.y),\r\n\t\t grid = this._grid,\r\n\t\t row = grid[y] = grid[y] || {},\r\n\t\t cell = row[x] = row[x] || [],\r\n\t\t stamp = L.Util.stamp(obj);\r\n\r\n\t\tthis._objectPoint[stamp] = point;\r\n\r\n\t\tcell.push(obj);\r\n\t},\r\n\r\n\tupdateObject: function (obj, point) {\r\n\t\tthis.removeObject(obj);\r\n\t\tthis.addObject(obj, point);\r\n\t},\r\n\r\n\t//Returns true if the object was found\r\n\tremoveObject: function (obj, point) {\r\n\t\tvar x = this._getCoord(point.x),\r\n\t\t y = this._getCoord(point.y),\r\n\t\t grid = this._grid,\r\n\t\t row = grid[y] = grid[y] || {},\r\n\t\t cell = row[x] = row[x] || [],\r\n\t\t i, len;\r\n\r\n\t\tdelete this._objectPoint[L.Util.stamp(obj)];\r\n\r\n\t\tfor (i = 0, len = cell.length; i < len; i++) {\r\n\t\t\tif (cell[i] === obj) {\r\n\r\n\t\t\t\tcell.splice(i, 1);\r\n\r\n\t\t\t\tif (len === 1) {\r\n\t\t\t\t\tdelete row[x];\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t},\r\n\r\n\teachObject: function (fn, context) {\r\n\t\tvar i, j, k, len, row, cell, removed,\r\n\t\t grid = this._grid;\r\n\r\n\t\tfor (i in grid) {\r\n\t\t\trow = grid[i];\r\n\r\n\t\t\tfor (j in row) {\r\n\t\t\t\tcell = row[j];\r\n\r\n\t\t\t\tfor (k = 0, len = cell.length; k < len; k++) {\r\n\t\t\t\t\tremoved = fn.call(context, cell[k]);\r\n\t\t\t\t\tif (removed) {\r\n\t\t\t\t\t\tk--;\r\n\t\t\t\t\t\tlen--;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tgetNearObject: function (point) {\r\n\t\tvar x = this._getCoord(point.x),\r\n\t\t y = this._getCoord(point.y),\r\n\t\t i, j, k, row, cell, len, obj, dist,\r\n\t\t objectPoint = this._objectPoint,\r\n\t\t closestDistSq = this._sqCellSize,\r\n\t\t closest = null;\r\n\r\n\t\tfor (i = y - 1; i <= y + 1; i++) {\r\n\t\t\trow = this._grid[i];\r\n\t\t\tif (row) {\r\n\r\n\t\t\t\tfor (j = x - 1; j <= x + 1; j++) {\r\n\t\t\t\t\tcell = row[j];\r\n\t\t\t\t\tif (cell) {\r\n\r\n\t\t\t\t\t\tfor (k = 0, len = cell.length; k < len; k++) {\r\n\t\t\t\t\t\t\tobj = cell[k];\r\n\t\t\t\t\t\t\tdist = this._sqDist(objectPoint[L.Util.stamp(obj)], point);\r\n\t\t\t\t\t\t\tif (dist < closestDistSq ||\r\n\t\t\t\t\t\t\t\tdist <= closestDistSq && closest === null) {\r\n\t\t\t\t\t\t\t\tclosestDistSq = dist;\r\n\t\t\t\t\t\t\t\tclosest = obj;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn closest;\r\n\t},\r\n\r\n\t_getCoord: function (x) {\r\n\t\tvar coord = Math.floor(x / this._cellSize);\r\n\t\treturn isFinite(coord) ? coord : x;\r\n\t},\r\n\r\n\t_sqDist: function (p, p2) {\r\n\t\tvar dx = p2.x - p.x,\r\n\t\t dy = p2.y - p.y;\r\n\t\treturn dx * dx + dy * dy;\r\n\t}\r\n};\r\n","/* Copyright (c) 2012 the authors listed at the following URL, and/or\r\nthe authors of referenced articles or incorporated external code:\r\nhttp://en.literateprograms.org/Quickhull_(Javascript)?action=history&offset=20120410175256\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\r\n\"Software\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\nRetrieved from: http://en.literateprograms.org/Quickhull_(Javascript)?oldid=18434\r\n*/\r\n\r\n(function () {\r\n\tL.QuickHull = {\r\n\r\n\t\t/*\r\n\t\t * @param {Object} cpt a point to be measured from the baseline\r\n\t\t * @param {Array} bl the baseline, as represented by a two-element\r\n\t\t * array of latlng objects.\r\n\t\t * @returns {Number} an approximate distance measure\r\n\t\t */\r\n\t\tgetDistant: function (cpt, bl) {\r\n\t\t\tvar vY = bl[1].lat - bl[0].lat,\r\n\t\t\t\tvX = bl[0].lng - bl[1].lng;\r\n\t\t\treturn (vX * (cpt.lat - bl[0].lat) + vY * (cpt.lng - bl[0].lng));\r\n\t\t},\r\n\r\n\t\t/*\r\n\t\t * @param {Array} baseLine a two-element array of latlng objects\r\n\t\t * representing the baseline to project from\r\n\t\t * @param {Array} latLngs an array of latlng objects\r\n\t\t * @returns {Object} the maximum point and all new points to stay\r\n\t\t * in consideration for the hull.\r\n\t\t */\r\n\t\tfindMostDistantPointFromBaseLine: function (baseLine, latLngs) {\r\n\t\t\tvar maxD = 0,\r\n\t\t\t\tmaxPt = null,\r\n\t\t\t\tnewPoints = [],\r\n\t\t\t\ti, pt, d;\r\n\r\n\t\t\tfor (i = latLngs.length - 1; i >= 0; i--) {\r\n\t\t\t\tpt = latLngs[i];\r\n\t\t\t\td = this.getDistant(pt, baseLine);\r\n\r\n\t\t\t\tif (d > 0) {\r\n\t\t\t\t\tnewPoints.push(pt);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (d > maxD) {\r\n\t\t\t\t\tmaxD = d;\r\n\t\t\t\t\tmaxPt = pt;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn { maxPoint: maxPt, newPoints: newPoints };\r\n\t\t},\r\n\r\n\r\n\t\t/*\r\n\t\t * Given a baseline, compute the convex hull of latLngs as an array\r\n\t\t * of latLngs.\r\n\t\t *\r\n\t\t * @param {Array} latLngs\r\n\t\t * @returns {Array}\r\n\t\t */\r\n\t\tbuildConvexHull: function (baseLine, latLngs) {\r\n\t\t\tvar convexHullBaseLines = [],\r\n\t\t\t\tt = this.findMostDistantPointFromBaseLine(baseLine, latLngs);\r\n\r\n\t\t\tif (t.maxPoint) { // if there is still a point \"outside\" the base line\r\n\t\t\t\tconvexHullBaseLines =\r\n\t\t\t\t\tconvexHullBaseLines.concat(\r\n\t\t\t\t\t\tthis.buildConvexHull([baseLine[0], t.maxPoint], t.newPoints)\r\n\t\t\t\t\t);\r\n\t\t\t\tconvexHullBaseLines =\r\n\t\t\t\t\tconvexHullBaseLines.concat(\r\n\t\t\t\t\t\tthis.buildConvexHull([t.maxPoint, baseLine[1]], t.newPoints)\r\n\t\t\t\t\t);\r\n\t\t\t\treturn convexHullBaseLines;\r\n\t\t\t} else { // if there is no more point \"outside\" the base line, the current base line is part of the convex hull\r\n\t\t\t\treturn [baseLine[0]];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/*\r\n\t\t * Given an array of latlngs, compute a convex hull as an array\r\n\t\t * of latlngs\r\n\t\t *\r\n\t\t * @param {Array} latLngs\r\n\t\t * @returns {Array}\r\n\t\t */\r\n\t\tgetConvexHull: function (latLngs) {\r\n\t\t\t// find first baseline\r\n\t\t\tvar maxLat = false, minLat = false,\r\n\t\t\t\tmaxLng = false, minLng = false,\r\n\t\t\t\tmaxLatPt = null, minLatPt = null,\r\n\t\t\t\tmaxLngPt = null, minLngPt = null,\r\n\t\t\t\tmaxPt = null, minPt = null,\r\n\t\t\t\ti;\r\n\r\n\t\t\tfor (i = latLngs.length - 1; i >= 0; i--) {\r\n\t\t\t\tvar pt = latLngs[i];\r\n\t\t\t\tif (maxLat === false || pt.lat > maxLat) {\r\n\t\t\t\t\tmaxLatPt = pt;\r\n\t\t\t\t\tmaxLat = pt.lat;\r\n\t\t\t\t}\r\n\t\t\t\tif (minLat === false || pt.lat < minLat) {\r\n\t\t\t\t\tminLatPt = pt;\r\n\t\t\t\t\tminLat = pt.lat;\r\n\t\t\t\t}\r\n\t\t\t\tif (maxLng === false || pt.lng > maxLng) {\r\n\t\t\t\t\tmaxLngPt = pt;\r\n\t\t\t\t\tmaxLng = pt.lng;\r\n\t\t\t\t}\r\n\t\t\t\tif (minLng === false || pt.lng < minLng) {\r\n\t\t\t\t\tminLngPt = pt;\r\n\t\t\t\t\tminLng = pt.lng;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (minLat !== maxLat) {\r\n\t\t\t\tminPt = minLatPt;\r\n\t\t\t\tmaxPt = maxLatPt;\r\n\t\t\t} else {\r\n\t\t\t\tminPt = minLngPt;\r\n\t\t\t\tmaxPt = maxLngPt;\r\n\t\t\t}\r\n\r\n\t\t\tvar ch = [].concat(this.buildConvexHull([minPt, maxPt], latLngs),\r\n\t\t\t\t\t\t\t\tthis.buildConvexHull([maxPt, minPt], latLngs));\r\n\t\t\treturn ch;\r\n\t\t}\r\n\t};\r\n}());\r\n\r\nL.MarkerCluster.include({\r\n\tgetConvexHull: function () {\r\n\t\tvar childMarkers = this.getAllChildMarkers(),\r\n\t\t\tpoints = [],\r\n\t\t\tp, i;\r\n\r\n\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\r\n\t\t\tp = childMarkers[i].getLatLng();\r\n\t\t\tpoints.push(p);\r\n\t\t}\r\n\r\n\t\treturn L.QuickHull.getConvexHull(points);\r\n\t}\r\n});\r\n","//This code is 100% based on https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet\r\n//Huge thanks to jawj for implementing it first to make my job easy :-)\r\n\r\nL.MarkerCluster.include({\r\n\r\n\t_2PI: Math.PI * 2,\r\n\t_circleFootSeparation: 25, //related to circumference of circle\r\n\t_circleStartAngle: 0,\r\n\r\n\t_spiralFootSeparation: 28, //related to size of spiral (experiment!)\r\n\t_spiralLengthStart: 11,\r\n\t_spiralLengthFactor: 5,\r\n\r\n\t_circleSpiralSwitchover: 9, //show spiral instead of circle from this marker count upwards.\r\n\t\t\t\t\t\t\t\t// 0 -> always spiral; Infinity -> always circle\r\n\r\n\tspiderfy: function () {\r\n\t\tif (this._group._spiderfied === this || this._group._inZoomAnimation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar childMarkers = this.getAllChildMarkers(null, true),\r\n\t\t\tgroup = this._group,\r\n\t\t\tmap = group._map,\r\n\t\t\tcenter = map.latLngToLayerPoint(this._latlng),\r\n\t\t\tpositions;\r\n\r\n\t\tthis._group._unspiderfy();\r\n\t\tthis._group._spiderfied = this;\r\n\r\n\t\t//TODO Maybe: childMarkers order by distance to center\r\n\r\n\t\tif (childMarkers.length >= this._circleSpiralSwitchover) {\r\n\t\t\tpositions = this._generatePointsSpiral(childMarkers.length, center);\r\n\t\t} else {\r\n\t\t\tcenter.y += 10; // Otherwise circles look wrong => hack for standard blue icon, renders differently for other icons.\r\n\t\t\tpositions = this._generatePointsCircle(childMarkers.length, center);\r\n\t\t}\r\n\r\n\t\tthis._animationSpiderfy(childMarkers, positions);\r\n\t},\r\n\r\n\tunspiderfy: function (zoomDetails) {\r\n\t\t/// Argument from zoomanim if being called in a zoom animation or null otherwise\r\n\t\tif (this._group._inZoomAnimation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._animationUnspiderfy(zoomDetails);\r\n\r\n\t\tthis._group._spiderfied = null;\r\n\t},\r\n\r\n\t_generatePointsCircle: function (count, centerPt) {\r\n\t\tvar circumference = this._group.options.spiderfyDistanceMultiplier * this._circleFootSeparation * (2 + count),\r\n\t\t\tlegLength = circumference / this._2PI, //radius from circumference\r\n\t\t\tangleStep = this._2PI / count,\r\n\t\t\tres = [],\r\n\t\t\ti, angle;\r\n\r\n\t\tlegLength = Math.max(legLength, 35); // Minimum distance to get outside the cluster icon.\r\n\r\n\t\tres.length = count;\r\n\r\n\t\tfor (i = 0; i < count; i++) { // Clockwise, like spiral.\r\n\t\t\tangle = this._circleStartAngle + i * angleStep;\r\n\t\t\tres[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round();\r\n\t\t}\r\n\r\n\t\treturn res;\r\n\t},\r\n\r\n\t_generatePointsSpiral: function (count, centerPt) {\r\n\t\tvar spiderfyDistanceMultiplier = this._group.options.spiderfyDistanceMultiplier,\r\n\t\t\tlegLength = spiderfyDistanceMultiplier * this._spiralLengthStart,\r\n\t\t\tseparation = spiderfyDistanceMultiplier * this._spiralFootSeparation,\r\n\t\t\tlengthFactor = spiderfyDistanceMultiplier * this._spiralLengthFactor * this._2PI,\r\n\t\t\tangle = 0,\r\n\t\t\tres = [],\r\n\t\t\ti;\r\n\r\n\t\tres.length = count;\r\n\r\n\t\t// Higher index, closer position to cluster center.\r\n\t\tfor (i = count; i >= 0; i--) {\r\n\t\t\t// Skip the first position, so that we are already farther from center and we avoid\r\n\t\t\t// being under the default cluster icon (especially important for Circle Markers).\r\n\t\t\tif (i < count) {\r\n\t\t\t\tres[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round();\r\n\t\t\t}\r\n\t\t\tangle += separation / legLength + i * 0.0005;\r\n\t\t\tlegLength += lengthFactor / angle;\r\n\t\t}\r\n\t\treturn res;\r\n\t},\r\n\r\n\t_noanimationUnspiderfy: function () {\r\n\t\tvar group = this._group,\r\n\t\t\tmap = group._map,\r\n\t\t\tfg = group._featureGroup,\r\n\t\t\tchildMarkers = this.getAllChildMarkers(null, true),\r\n\t\t\tm, i;\r\n\r\n\t\tgroup._ignoreMove = true;\r\n\r\n\t\tthis.setOpacity(1);\r\n\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\r\n\t\t\tm = childMarkers[i];\r\n\r\n\t\t\tfg.removeLayer(m);\r\n\r\n\t\t\tif (m._preSpiderfyLatlng) {\r\n\t\t\t\tm.setLatLng(m._preSpiderfyLatlng);\r\n\t\t\t\tdelete m._preSpiderfyLatlng;\r\n\t\t\t}\r\n\t\t\tif (m.setZIndexOffset) {\r\n\t\t\t\tm.setZIndexOffset(0);\r\n\t\t\t}\r\n\r\n\t\t\tif (m._spiderLeg) {\r\n\t\t\t\tmap.removeLayer(m._spiderLeg);\r\n\t\t\t\tdelete m._spiderLeg;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tgroup.fire('unspiderfied', {\r\n\t\t\tcluster: this,\r\n\t\t\tmarkers: childMarkers\r\n\t\t});\r\n\t\tgroup._ignoreMove = false;\r\n\t\tgroup._spiderfied = null;\r\n\t}\r\n});\r\n\r\n//Non Animated versions of everything\r\nL.MarkerClusterNonAnimated = L.MarkerCluster.extend({\r\n\t_animationSpiderfy: function (childMarkers, positions) {\r\n\t\tvar group = this._group,\r\n\t\t\tmap = group._map,\r\n\t\t\tfg = group._featureGroup,\r\n\t\t\tlegOptions = this._group.options.spiderLegPolylineOptions,\r\n\t\t\ti, m, leg, newPos;\r\n\r\n\t\tgroup._ignoreMove = true;\r\n\r\n\t\t// Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition.\r\n\t\t// The reverse order trick no longer improves performance on modern browsers.\r\n\t\tfor (i = 0; i < childMarkers.length; i++) {\r\n\t\t\tnewPos = map.layerPointToLatLng(positions[i]);\r\n\t\t\tm = childMarkers[i];\r\n\r\n\t\t\t// Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it.\r\n\t\t\tleg = new L.Polyline([this._latlng, newPos], legOptions);\r\n\t\t\tmap.addLayer(leg);\r\n\t\t\tm._spiderLeg = leg;\r\n\r\n\t\t\t// Now add the marker.\r\n\t\t\tm._preSpiderfyLatlng = m._latlng;\r\n\t\t\tm.setLatLng(newPos);\r\n\t\t\tif (m.setZIndexOffset) {\r\n\t\t\t\tm.setZIndexOffset(1000000); //Make these appear on top of EVERYTHING\r\n\t\t\t}\r\n\r\n\t\t\tfg.addLayer(m);\r\n\t\t}\r\n\t\tthis.setOpacity(0.3);\r\n\r\n\t\tgroup._ignoreMove = false;\r\n\t\tgroup.fire('spiderfied', {\r\n\t\t\tcluster: this,\r\n\t\t\tmarkers: childMarkers\r\n\t\t});\r\n\t},\r\n\r\n\t_animationUnspiderfy: function () {\r\n\t\tthis._noanimationUnspiderfy();\r\n\t}\r\n});\r\n\r\n//Animated versions here\r\nL.MarkerCluster.include({\r\n\r\n\t_animationSpiderfy: function (childMarkers, positions) {\r\n\t\tvar me = this,\r\n\t\t\tgroup = this._group,\r\n\t\t\tmap = group._map,\r\n\t\t\tfg = group._featureGroup,\r\n\t\t\tthisLayerLatLng = this._latlng,\r\n\t\t\tthisLayerPos = map.latLngToLayerPoint(thisLayerLatLng),\r\n\t\t\tsvg = L.Path.SVG,\r\n\t\t\tlegOptions = L.extend({}, this._group.options.spiderLegPolylineOptions), // Copy the options so that we can modify them for animation.\r\n\t\t\tfinalLegOpacity = legOptions.opacity,\r\n\t\t\ti, m, leg, legPath, legLength, newPos;\r\n\r\n\t\tif (finalLegOpacity === undefined) {\r\n\t\t\tfinalLegOpacity = L.MarkerClusterGroup.prototype.options.spiderLegPolylineOptions.opacity;\r\n\t\t}\r\n\r\n\t\tif (svg) {\r\n\t\t\t// If the initial opacity of the spider leg is not 0 then it appears before the animation starts.\r\n\t\t\tlegOptions.opacity = 0;\r\n\r\n\t\t\t// Add the class for CSS transitions.\r\n\t\t\tlegOptions.className = (legOptions.className || '') + ' leaflet-cluster-spider-leg';\r\n\t\t} else {\r\n\t\t\t// Make sure we have a defined opacity.\r\n\t\t\tlegOptions.opacity = finalLegOpacity;\r\n\t\t}\r\n\r\n\t\tgroup._ignoreMove = true;\r\n\r\n\t\t// Add markers and spider legs to map, hidden at our center point.\r\n\t\t// Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition.\r\n\t\t// The reverse order trick no longer improves performance on modern browsers.\r\n\t\tfor (i = 0; i < childMarkers.length; i++) {\r\n\t\t\tm = childMarkers[i];\r\n\r\n\t\t\tnewPos = map.layerPointToLatLng(positions[i]);\r\n\r\n\t\t\t// Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it.\r\n\t\t\tleg = new L.Polyline([thisLayerLatLng, newPos], legOptions);\r\n\t\t\tmap.addLayer(leg);\r\n\t\t\tm._spiderLeg = leg;\r\n\r\n\t\t\t// Explanations: https://jakearchibald.com/2013/animated-line-drawing-svg/\r\n\t\t\t// In our case the transition property is declared in the CSS file.\r\n\t\t\tif (svg) {\r\n\t\t\t\tlegPath = leg._path;\r\n\t\t\t\tlegLength = legPath.getTotalLength() + 0.1; // Need a small extra length to avoid remaining dot in Firefox.\r\n\t\t\t\tlegPath.style.strokeDasharray = legLength; // Just 1 length is enough, it will be duplicated.\r\n\t\t\t\tlegPath.style.strokeDashoffset = legLength;\r\n\t\t\t}\r\n\r\n\t\t\t// If it is a marker, add it now and we'll animate it out\r\n\t\t\tif (m.setZIndexOffset) {\r\n\t\t\t\tm.setZIndexOffset(1000000); // Make normal markers appear on top of EVERYTHING\r\n\t\t\t}\r\n\t\t\tif (m.clusterHide) {\r\n\t\t\t\tm.clusterHide();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// Vectors just get immediately added\r\n\t\t\tfg.addLayer(m);\r\n\r\n\t\t\tif (m._setPos) {\r\n\t\t\t\tm._setPos(thisLayerPos);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tgroup._forceLayout();\r\n\t\tgroup._animationStart();\r\n\r\n\t\t// Reveal markers and spider legs.\r\n\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\r\n\t\t\tnewPos = map.layerPointToLatLng(positions[i]);\r\n\t\t\tm = childMarkers[i];\r\n\r\n\t\t\t//Move marker to new position\r\n\t\t\tm._preSpiderfyLatlng = m._latlng;\r\n\t\t\tm.setLatLng(newPos);\r\n\t\t\t\r\n\t\t\tif (m.clusterShow) {\r\n\t\t\t\tm.clusterShow();\r\n\t\t\t}\r\n\r\n\t\t\t// Animate leg (animation is actually delegated to CSS transition).\r\n\t\t\tif (svg) {\r\n\t\t\t\tleg = m._spiderLeg;\r\n\t\t\t\tlegPath = leg._path;\r\n\t\t\t\tlegPath.style.strokeDashoffset = 0;\r\n\t\t\t\t//legPath.style.strokeOpacity = finalLegOpacity;\r\n\t\t\t\tleg.setStyle({opacity: finalLegOpacity});\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.setOpacity(0.3);\r\n\r\n\t\tgroup._ignoreMove = false;\r\n\r\n\t\tsetTimeout(function () {\r\n\t\t\tgroup._animationEnd();\r\n\t\t\tgroup.fire('spiderfied', {\r\n\t\t\t\tcluster: me,\r\n\t\t\t\tmarkers: childMarkers\r\n\t\t\t});\r\n\t\t}, 200);\r\n\t},\r\n\r\n\t_animationUnspiderfy: function (zoomDetails) {\r\n\t\tvar me = this,\r\n\t\t\tgroup = this._group,\r\n\t\t\tmap = group._map,\r\n\t\t\tfg = group._featureGroup,\r\n\t\t\tthisLayerPos = zoomDetails ? map._latLngToNewLayerPoint(this._latlng, zoomDetails.zoom, zoomDetails.center) : map.latLngToLayerPoint(this._latlng),\r\n\t\t\tchildMarkers = this.getAllChildMarkers(null, true),\r\n\t\t\tsvg = L.Path.SVG,\r\n\t\t\tm, i, leg, legPath, legLength, nonAnimatable;\r\n\r\n\t\tgroup._ignoreMove = true;\r\n\t\tgroup._animationStart();\r\n\r\n\t\t//Make us visible and bring the child markers back in\r\n\t\tthis.setOpacity(1);\r\n\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\r\n\t\t\tm = childMarkers[i];\r\n\r\n\t\t\t//Marker was added to us after we were spiderfied\r\n\t\t\tif (!m._preSpiderfyLatlng) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\t//Close any popup on the marker first, otherwise setting the location of the marker will make the map scroll\r\n\t\t\tm.closePopup();\r\n\r\n\t\t\t//Fix up the location to the real one\r\n\t\t\tm.setLatLng(m._preSpiderfyLatlng);\r\n\t\t\tdelete m._preSpiderfyLatlng;\r\n\r\n\t\t\t//Hack override the location to be our center\r\n\t\t\tnonAnimatable = true;\r\n\t\t\tif (m._setPos) {\r\n\t\t\t\tm._setPos(thisLayerPos);\r\n\t\t\t\tnonAnimatable = false;\r\n\t\t\t}\r\n\t\t\tif (m.clusterHide) {\r\n\t\t\t\tm.clusterHide();\r\n\t\t\t\tnonAnimatable = false;\r\n\t\t\t}\r\n\t\t\tif (nonAnimatable) {\r\n\t\t\t\tfg.removeLayer(m);\r\n\t\t\t}\r\n\r\n\t\t\t// Animate the spider leg back in (animation is actually delegated to CSS transition).\r\n\t\t\tif (svg) {\r\n\t\t\t\tleg = m._spiderLeg;\r\n\t\t\t\tlegPath = leg._path;\r\n\t\t\t\tlegLength = legPath.getTotalLength() + 0.1;\r\n\t\t\t\tlegPath.style.strokeDashoffset = legLength;\r\n\t\t\t\tleg.setStyle({opacity: 0});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tgroup._ignoreMove = false;\r\n\r\n\t\tsetTimeout(function () {\r\n\t\t\t//If we have only <= one child left then that marker will be shown on the map so don't remove it!\r\n\t\t\tvar stillThereChildCount = 0;\r\n\t\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\r\n\t\t\t\tm = childMarkers[i];\r\n\t\t\t\tif (m._spiderLeg) {\r\n\t\t\t\t\tstillThereChildCount++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\r\n\t\t\t\tm = childMarkers[i];\r\n\r\n\t\t\t\tif (!m._spiderLeg) { //Has already been unspiderfied\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (m.clusterShow) {\r\n\t\t\t\t\tm.clusterShow();\r\n\t\t\t\t}\r\n\t\t\t\tif (m.setZIndexOffset) {\r\n\t\t\t\t\tm.setZIndexOffset(0);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (stillThereChildCount > 1) {\r\n\t\t\t\t\tfg.removeLayer(m);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmap.removeLayer(m._spiderLeg);\r\n\t\t\t\tdelete m._spiderLeg;\r\n\t\t\t}\r\n\t\t\tgroup._animationEnd();\r\n\t\t\tgroup.fire('unspiderfied', {\r\n\t\t\t\tcluster: me,\r\n\t\t\t\tmarkers: childMarkers\r\n\t\t\t});\r\n\t\t}, 200);\r\n\t}\r\n});\r\n\r\n\r\nL.MarkerClusterGroup.include({\r\n\t//The MarkerCluster currently spiderfied (if any)\r\n\t_spiderfied: null,\r\n\r\n\tunspiderfy: function () {\r\n\t\tthis._unspiderfy.apply(this, arguments);\r\n\t},\r\n\r\n\t_spiderfierOnAdd: function () {\r\n\t\tthis._map.on('click', this._unspiderfyWrapper, this);\r\n\r\n\t\tif (this._map.options.zoomAnimation) {\r\n\t\t\tthis._map.on('zoomstart', this._unspiderfyZoomStart, this);\r\n\t\t}\r\n\t\t//Browsers without zoomAnimation or a big zoom don't fire zoomstart\r\n\t\tthis._map.on('zoomend', this._noanimationUnspiderfy, this);\r\n\r\n\t\tif (!L.Browser.touch) {\r\n\t\t\tthis._map.getRenderer(this);\r\n\t\t\t//Needs to happen in the pageload, not after, or animations don't work in webkit\r\n\t\t\t// http://stackoverflow.com/questions/8455200/svg-animate-with-dynamically-added-elements\r\n\t\t\t//Disable on touch browsers as the animation messes up on a touch zoom and isn't very noticable\r\n\t\t}\r\n\t},\r\n\r\n\t_spiderfierOnRemove: function () {\r\n\t\tthis._map.off('click', this._unspiderfyWrapper, this);\r\n\t\tthis._map.off('zoomstart', this._unspiderfyZoomStart, this);\r\n\t\tthis._map.off('zoomanim', this._unspiderfyZoomAnim, this);\r\n\t\tthis._map.off('zoomend', this._noanimationUnspiderfy, this);\r\n\r\n\t\t//Ensure that markers are back where they should be\r\n\t\t// Use no animation to avoid a sticky leaflet-cluster-anim class on mapPane\r\n\t\tthis._noanimationUnspiderfy();\r\n\t},\r\n\r\n\t//On zoom start we add a zoomanim handler so that we are guaranteed to be last (after markers are animated)\r\n\t//This means we can define the animation they do rather than Markers doing an animation to their actual location\r\n\t_unspiderfyZoomStart: function () {\r\n\t\tif (!this._map) { //May have been removed from the map by a zoomEnd handler\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._map.on('zoomanim', this._unspiderfyZoomAnim, this);\r\n\t},\r\n\r\n\t_unspiderfyZoomAnim: function (zoomDetails) {\r\n\t\t//Wait until the first zoomanim after the user has finished touch-zooming before running the animation\r\n\t\tif (L.DomUtil.hasClass(this._map._mapPane, 'leaflet-touching')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._map.off('zoomanim', this._unspiderfyZoomAnim, this);\r\n\t\tthis._unspiderfy(zoomDetails);\r\n\t},\r\n\r\n\t_unspiderfyWrapper: function () {\r\n\t\t/// _unspiderfy but passes no arguments\r\n\t\tthis._unspiderfy();\r\n\t},\r\n\r\n\t_unspiderfy: function (zoomDetails) {\r\n\t\tif (this._spiderfied) {\r\n\t\t\tthis._spiderfied.unspiderfy(zoomDetails);\r\n\t\t}\r\n\t},\r\n\r\n\t_noanimationUnspiderfy: function () {\r\n\t\tif (this._spiderfied) {\r\n\t\t\tthis._spiderfied._noanimationUnspiderfy();\r\n\t\t}\r\n\t},\r\n\r\n\t//If the given layer is currently being spiderfied then we unspiderfy it so it isn't on the map anymore etc\r\n\t_unspiderfyLayer: function (layer) {\r\n\t\tif (layer._spiderLeg) {\r\n\t\t\tthis._featureGroup.removeLayer(layer);\r\n\r\n\t\t\tif (layer.clusterShow) {\r\n\t\t\t\tlayer.clusterShow();\r\n\t\t\t}\r\n\t\t\t\t//Position will be fixed up immediately in _animationUnspiderfy\r\n\t\t\tif (layer.setZIndexOffset) {\r\n\t\t\t\tlayer.setZIndexOffset(0);\r\n\t\t\t}\r\n\r\n\t\t\tthis._map.removeLayer(layer._spiderLeg);\r\n\t\t\tdelete layer._spiderLeg;\r\n\t\t}\r\n\t}\r\n});\r\n","/**\r\n * Adds 1 public method to MCG and 1 to L.Marker to facilitate changing\r\n * markers' icon options and refreshing their icon and their parent clusters\r\n * accordingly (case where their iconCreateFunction uses data of childMarkers\r\n * to make up the cluster icon).\r\n */\r\n\r\n\r\nL.MarkerClusterGroup.include({\r\n\t/**\r\n\t * Updates the icon of all clusters which are parents of the given marker(s).\r\n\t * In singleMarkerMode, also updates the given marker(s) icon.\r\n\t * @param layers L.MarkerClusterGroup|L.LayerGroup|Array(L.Marker)|Map(L.Marker)|\r\n\t * L.MarkerCluster|L.Marker (optional) list of markers (or single marker) whose parent\r\n\t * clusters need to be updated. If not provided, retrieves all child markers of this.\r\n\t * @returns {L.MarkerClusterGroup}\r\n\t */\r\n\trefreshClusters: function (layers) {\r\n\t\tif (!layers) {\r\n\t\t\tlayers = this._topClusterLevel.getAllChildMarkers();\r\n\t\t} else if (layers instanceof L.MarkerClusterGroup) {\r\n\t\t\tlayers = layers._topClusterLevel.getAllChildMarkers();\r\n\t\t} else if (layers instanceof L.LayerGroup) {\r\n\t\t\tlayers = layers._layers;\r\n\t\t} else if (layers instanceof L.MarkerCluster) {\r\n\t\t\tlayers = layers.getAllChildMarkers();\r\n\t\t} else if (layers instanceof L.Marker) {\r\n\t\t\tlayers = [layers];\r\n\t\t} // else: must be an Array(L.Marker)|Map(L.Marker)\r\n\t\tthis._flagParentsIconsNeedUpdate(layers);\r\n\t\tthis._refreshClustersIcons();\r\n\r\n\t\t// In case of singleMarkerMode, also re-draw the markers.\r\n\t\tif (this.options.singleMarkerMode) {\r\n\t\t\tthis._refreshSingleMarkerModeMarkers(layers);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/**\r\n\t * Simply flags all parent clusters of the given markers as having a \"dirty\" icon.\r\n\t * @param layers Array(L.Marker)|Map(L.Marker) list of markers.\r\n\t * @private\r\n\t */\r\n\t_flagParentsIconsNeedUpdate: function (layers) {\r\n\t\tvar id, parent;\r\n\r\n\t\t// Assumes layers is an Array or an Object whose prototype is non-enumerable.\r\n\t\tfor (id in layers) {\r\n\t\t\t// Flag parent clusters' icon as \"dirty\", all the way up.\r\n\t\t\t// Dumb process that flags multiple times upper parents, but still\r\n\t\t\t// much more efficient than trying to be smart and make short lists,\r\n\t\t\t// at least in the case of a hierarchy following a power law:\r\n\t\t\t// http://jsperf.com/flag-nodes-in-power-hierarchy/2\r\n\t\t\tparent = layers[id].__parent;\r\n\t\t\twhile (parent) {\r\n\t\t\t\tparent._iconNeedsUpdate = true;\r\n\t\t\t\tparent = parent.__parent;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Re-draws the icon of the supplied markers.\r\n\t * To be used in singleMarkerMode only.\r\n\t * @param layers Array(L.Marker)|Map(L.Marker) list of markers.\r\n\t * @private\r\n\t */\r\n\t_refreshSingleMarkerModeMarkers: function (layers) {\r\n\t\tvar id, layer;\r\n\r\n\t\tfor (id in layers) {\r\n\t\t\tlayer = layers[id];\r\n\r\n\t\t\t// Make sure we do not override markers that do not belong to THIS group.\r\n\t\t\tif (this.hasLayer(layer)) {\r\n\t\t\t\t// Need to re-create the icon first, then re-draw the marker.\r\n\t\t\t\tlayer.setIcon(this._overrideMarkerIcon(layer));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nL.Marker.include({\r\n\t/**\r\n\t * Updates the given options in the marker's icon and refreshes the marker.\r\n\t * @param options map object of icon options.\r\n\t * @param directlyRefreshClusters boolean (optional) true to trigger\r\n\t * MCG.refreshClustersOf() right away with this single marker.\r\n\t * @returns {L.Marker}\r\n\t */\r\n\trefreshIconOptions: function (options, directlyRefreshClusters) {\r\n\t\tvar icon = this.options.icon;\r\n\r\n\t\tL.setOptions(icon, options);\r\n\r\n\t\tthis.setIcon(icon);\r\n\r\n\t\t// Shortcut to refresh the associated MCG clusters right away.\r\n\t\t// To be used when refreshing a single marker.\r\n\t\t// Otherwise, better use MCG.refreshClusters() once at the end with\r\n\t\t// the list of modified markers.\r\n\t\tif (directlyRefreshClusters && this.__parent) {\r\n\t\t\tthis.__parent._group.refreshClusters(this);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n});\r\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/assets/vendor/leaflet.markercluster/dist/leaflet.markercluster.js b/assets/vendor/leaflet.markercluster/dist/leaflet.markercluster.js index beccbcaf..67c52dcd 100755 --- a/assets/vendor/leaflet.markercluster/dist/leaflet.markercluster.js +++ b/assets/vendor/leaflet.markercluster/dist/leaflet.markercluster.js @@ -1,7 +1,3 @@ -/* - Leaflet.markercluster, Provides Beautiful Animated Marker Clustering functionality for Leaflet, a JS library for interactive maps. - https://github.com/Leaflet/Leaflet.markercluster - (c) 2012-2017, Dave Leaver -*/ -!function(e,t,i){L.MarkerClusterGroup=L.FeatureGroup.extend({options:{maxClusterRadius:80,iconCreateFunction:null,clusterPane:L.Marker.prototype.options.pane,spiderfyOnMaxZoom:!0,showCoverageOnHover:!0,zoomToBoundsOnClick:!0,singleMarkerMode:!1,disableClusteringAtZoom:null,removeOutsideVisibleBounds:!0,animate:!0,animateAddingMarkers:!1,spiderfyDistanceMultiplier:1,spiderLegPolylineOptions:{weight:1.5,color:"#222",opacity:.5},chunkedLoading:!1,chunkInterval:200,chunkDelay:50,chunkProgress:null,polygonOptions:{}},initialize:function(e){L.Util.setOptions(this,e),this.options.iconCreateFunction||(this.options.iconCreateFunction=this._defaultIconCreateFunction),this._featureGroup=L.featureGroup(),this._featureGroup.addEventParent(this),this._nonPointGroup=L.featureGroup(),this._nonPointGroup.addEventParent(this),this._inZoomAnimation=0,this._needsClustering=[],this._needsRemoving=[],this._currentShownBounds=null,this._queue=[],this._childMarkerEventHandlers={dragstart:this._childMarkerDragStart,move:this._childMarkerMoved,dragend:this._childMarkerDragEnd};var t=L.DomUtil.TRANSITION&&this.options.animate;L.extend(this,t?this._withAnimation:this._noAnimation),this._markerCluster=t?L.MarkerCluster:L.MarkerClusterNonAnimated},addLayer:function(e){if(e instanceof L.LayerGroup)return this.addLayers([e]);if(!e.getLatLng)return this._nonPointGroup.addLayer(e),this.fire("layeradd",{layer:e}),this;if(!this._map)return this._needsClustering.push(e),this.fire("layeradd",{layer:e}),this;if(this.hasLayer(e))return this;this._unspiderfy&&this._unspiderfy(),this._addLayer(e,this._maxZoom),this.fire("layeradd",{layer:e}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons();var t=e,i=this._zoom;if(e.__parent)for(;t.__parent._zoom>=i;)t=t.__parent;return this._currentShownBounds.contains(t.getLatLng())&&(this.options.animateAddingMarkers?this._animationAddLayer(e,t):this._animationAddLayerNonAnimated(e,t)),this},removeLayer:function(e){return e instanceof L.LayerGroup?this.removeLayers([e]):e.getLatLng?this._map?e.__parent?(this._unspiderfy&&(this._unspiderfy(),this._unspiderfyLayer(e)),this._removeLayer(e,!0),this.fire("layerremove",{layer:e}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),e.off(this._childMarkerEventHandlers,this),this._featureGroup.hasLayer(e)&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow()),this):this:(!this._arraySplice(this._needsClustering,e)&&this.hasLayer(e)&&this._needsRemoving.push({layer:e,latlng:e._latlng}),this.fire("layerremove",{layer:e}),this):(this._nonPointGroup.removeLayer(e),this.fire("layerremove",{layer:e}),this)},addLayers:function(e,t){if(!L.Util.isArray(e))return this.addLayer(e);var i,n=this._featureGroup,r=this._nonPointGroup,s=this.options.chunkedLoading,o=this.options.chunkInterval,a=this.options.chunkProgress,h=e.length,l=0,u=!0;if(this._map){var _=(new Date).getTime(),d=L.bind(function(){for(var c=(new Date).getTime();h>l;l++){if(s&&0===l%200){var p=(new Date).getTime()-c;if(p>o)break}if(i=e[l],i instanceof L.LayerGroup)u&&(e=e.slice(),u=!1),this._extractNonGroupLayers(i,e),h=e.length;else if(i.getLatLng){if(!this.hasLayer(i)&&(this._addLayer(i,this._maxZoom),t||this.fire("layeradd",{layer:i}),i.__parent&&2===i.__parent.getChildCount())){var f=i.__parent.getAllChildMarkers(),m=f[0]===i?f[1]:f[0];n.removeLayer(m)}}else r.addLayer(i),t||this.fire("layeradd",{layer:i})}a&&a(l,h,(new Date).getTime()-_),l===h?(this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds)):setTimeout(d,this.options.chunkDelay)},this);d()}else for(var c=this._needsClustering;h>l;l++)i=e[l],i instanceof L.LayerGroup?(u&&(e=e.slice(),u=!1),this._extractNonGroupLayers(i,e),h=e.length):i.getLatLng?this.hasLayer(i)||c.push(i):r.addLayer(i);return this},removeLayers:function(e){var t,i,n=e.length,r=this._featureGroup,s=this._nonPointGroup,o=!0;if(!this._map){for(t=0;n>t;t++)i=e[t],i instanceof L.LayerGroup?(o&&(e=e.slice(),o=!1),this._extractNonGroupLayers(i,e),n=e.length):(this._arraySplice(this._needsClustering,i),s.removeLayer(i),this.hasLayer(i)&&this._needsRemoving.push({layer:i,latlng:i._latlng}),this.fire("layerremove",{layer:i}));return this}if(this._unspiderfy){this._unspiderfy();var a=e.slice(),h=n;for(t=0;h>t;t++)i=a[t],i instanceof L.LayerGroup?(this._extractNonGroupLayers(i,a),h=a.length):this._unspiderfyLayer(i)}for(t=0;n>t;t++)i=e[t],i instanceof L.LayerGroup?(o&&(e=e.slice(),o=!1),this._extractNonGroupLayers(i,e),n=e.length):i.__parent?(this._removeLayer(i,!0,!0),this.fire("layerremove",{layer:i}),r.hasLayer(i)&&(r.removeLayer(i),i.clusterShow&&i.clusterShow())):(s.removeLayer(i),this.fire("layerremove",{layer:i}));return this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds),this},clearLayers:function(){return this._map||(this._needsClustering=[],delete this._gridClusters,delete this._gridUnclustered),this._noanimationUnspiderfy&&this._noanimationUnspiderfy(),this._featureGroup.clearLayers(),this._nonPointGroup.clearLayers(),this.eachLayer(function(e){e.off(this._childMarkerEventHandlers,this),delete e.__parent},this),this._map&&this._generateInitialClusters(),this},getBounds:function(){var e=new L.LatLngBounds;this._topClusterLevel&&e.extend(this._topClusterLevel._bounds);for(var t=this._needsClustering.length-1;t>=0;t--)e.extend(this._needsClustering[t].getLatLng());return e.extend(this._nonPointGroup.getBounds()),e},eachLayer:function(e,t){var i,n,r,s=this._needsClustering.slice(),o=this._needsRemoving;for(this._topClusterLevel&&this._topClusterLevel.getAllChildMarkers(s),n=s.length-1;n>=0;n--){for(i=!0,r=o.length-1;r>=0;r--)if(o[r].layer===s[n]){i=!1;break}i&&e.call(t,s[n])}this._nonPointGroup.eachLayer(e,t)},getLayers:function(){var e=[];return this.eachLayer(function(t){e.push(t)}),e},getLayer:function(e){var t=null;return e=parseInt(e,10),this.eachLayer(function(i){L.stamp(i)===e&&(t=i)}),t},hasLayer:function(e){if(!e)return!1;var t,i=this._needsClustering;for(t=i.length-1;t>=0;t--)if(i[t]===e)return!0;for(i=this._needsRemoving,t=i.length-1;t>=0;t--)if(i[t].layer===e)return!1;return!(!e.__parent||e.__parent._group!==this)||this._nonPointGroup.hasLayer(e)},zoomToShowLayer:function(e,t){"function"!=typeof t&&(t=function(){});var i=function(){!e._icon&&!e.__parent._icon||this._inZoomAnimation||(this._map.off("moveend",i,this),this.off("animationend",i,this),e._icon?t():e.__parent._icon&&(this.once("spiderfied",t,this),e.__parent.spiderfy()))};e._icon&&this._map.getBounds().contains(e.getLatLng())?t():e.__parent._zoomt;t++)n=this._needsRemoving[t],n.newlatlng=n.layer._latlng,n.layer._latlng=n.latlng;for(t=0,i=this._needsRemoving.length;i>t;t++)n=this._needsRemoving[t],this._removeLayer(n.layer,!0),n.layer._latlng=n.newlatlng;this._needsRemoving=[],this._zoom=Math.round(this._map._zoom),this._currentShownBounds=this._getExpandedVisibleBounds(),this._map.on("zoomend",this._zoomEnd,this),this._map.on("moveend",this._moveEnd,this),this._spiderfierOnAdd&&this._spiderfierOnAdd(),this._bindEvents(),i=this._needsClustering,this._needsClustering=[],this.addLayers(i,!0)},onRemove:function(e){e.off("zoomend",this._zoomEnd,this),e.off("moveend",this._moveEnd,this),this._unbindEvents(),this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim",""),this._spiderfierOnRemove&&this._spiderfierOnRemove(),delete this._maxLat,this._hideCoverage(),this._featureGroup.remove(),this._nonPointGroup.remove(),this._featureGroup.clearLayers(),this._map=null},getVisibleParent:function(e){for(var t=e;t&&!t._icon;)t=t.__parent;return t||null},_arraySplice:function(e,t){for(var i=e.length-1;i>=0;i--)if(e[i]===t)return e.splice(i,1),!0},_removeFromGridUnclustered:function(e,t){for(var i=this._map,n=this._gridUnclustered,r=Math.floor(this._map.getMinZoom());t>=r&&n[t].removeObject(e,i.project(e.getLatLng(),t));t--);},_childMarkerDragStart:function(e){e.target.__dragStart=e.target._latlng},_childMarkerMoved:function(e){if(!this._ignoreMove&&!e.target.__dragStart){var t=e.target._popup&&e.target._popup.isOpen();this._moveChild(e.target,e.oldLatLng,e.latlng),t&&e.target.openPopup()}},_moveChild:function(e,t,i){e._latlng=t,this.removeLayer(e),e._latlng=i,this.addLayer(e)},_childMarkerDragEnd:function(e){e.target.__dragStart&&this._moveChild(e.target,e.target.__dragStart,e.target._latlng),delete e.target.__dragStart},_removeLayer:function(e,t,i){var n=this._gridClusters,r=this._gridUnclustered,s=this._featureGroup,o=this._map,a=Math.floor(this._map.getMinZoom());t&&this._removeFromGridUnclustered(e,this._maxZoom);var h,l=e.__parent,u=l._markers;for(this._arraySplice(u,e);l&&(l._childCount--,l._boundsNeedUpdate=!0,!(l._zoomt?"small":100>t?"medium":"large",new L.DivIcon({html:"
"+t+"
",className:"marker-cluster"+i,iconSize:new L.Point(40,40)})},_bindEvents:function(){var e=this._map,t=this.options.spiderfyOnMaxZoom,i=this.options.showCoverageOnHover,n=this.options.zoomToBoundsOnClick;(t||n)&&this.on("clusterclick",this._zoomOrSpiderfy,this),i&&(this.on("clustermouseover",this._showCoverage,this),this.on("clustermouseout",this._hideCoverage,this),e.on("zoomend",this._hideCoverage,this))},_zoomOrSpiderfy:function(e){for(var t=e.layer,i=t;1===i._childClusters.length;)i=i._childClusters[0];i._zoom===this._maxZoom&&i._childCount===t._childCount&&this.options.spiderfyOnMaxZoom?t.spiderfy():this.options.zoomToBoundsOnClick&&t.zoomToBounds(),e.originalEvent&&13===e.originalEvent.keyCode&&this._map._container.focus()},_showCoverage:function(e){var t=this._map;this._inZoomAnimation||(this._shownPolygon&&t.removeLayer(this._shownPolygon),e.layer.getChildCount()>2&&e.layer!==this._spiderfied&&(this._shownPolygon=new L.Polygon(e.layer.getConvexHull(),this.options.polygonOptions),t.addLayer(this._shownPolygon)))},_hideCoverage:function(){this._shownPolygon&&(this._map.removeLayer(this._shownPolygon),this._shownPolygon=null)},_unbindEvents:function(){var e=this.options.spiderfyOnMaxZoom,t=this.options.showCoverageOnHover,i=this.options.zoomToBoundsOnClick,n=this._map;(e||i)&&this.off("clusterclick",this._zoomOrSpiderfy,this),t&&(this.off("clustermouseover",this._showCoverage,this),this.off("clustermouseout",this._hideCoverage,this),n.off("zoomend",this._hideCoverage,this))},_zoomEnd:function(){this._map&&(this._mergeSplitClusters(),this._zoom=Math.round(this._map._zoom),this._currentShownBounds=this._getExpandedVisibleBounds())},_moveEnd:function(){if(!this._inZoomAnimation){var e=this._getExpandedVisibleBounds();this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),this._zoom,e),this._topClusterLevel._recursivelyAddChildrenToMap(null,Math.round(this._map._zoom),e),this._currentShownBounds=e}},_generateInitialClusters:function(){var e=Math.ceil(this._map.getMaxZoom()),t=Math.floor(this._map.getMinZoom()),i=this.options.maxClusterRadius,n=i;"function"!=typeof i&&(n=function(){return i}),null!==this.options.disableClusteringAtZoom&&(e=this.options.disableClusteringAtZoom-1),this._maxZoom=e,this._gridClusters={},this._gridUnclustered={};for(var r=e;r>=t;r--)this._gridClusters[r]=new L.DistanceGrid(n(r)),this._gridUnclustered[r]=new L.DistanceGrid(n(r));this._topClusterLevel=new this._markerCluster(this,t-1)},_addLayer:function(e,t){var i,n,r=this._gridClusters,s=this._gridUnclustered,o=Math.floor(this._map.getMinZoom());for(this.options.singleMarkerMode&&this._overrideMarkerIcon(e),e.on(this._childMarkerEventHandlers,this);t>=o;t--){i=this._map.project(e.getLatLng(),t);var a=r[t].getNearObject(i);if(a)return a._addChild(e),e.__parent=a,void 0;if(a=s[t].getNearObject(i)){var h=a.__parent;h&&this._removeLayer(a,!1);var l=new this._markerCluster(this,t,a,e);r[t].addObject(l,this._map.project(l._cLatLng,t)),a.__parent=l,e.__parent=l;var u=l;for(n=t-1;n>h._zoom;n--)u=new this._markerCluster(this,n,u),r[n].addObject(u,this._map.project(a.getLatLng(),n));return h._addChild(u),this._removeFromGridUnclustered(a,t),void 0}s[t].addObject(e,i)}this._topClusterLevel._addChild(e),e.__parent=this._topClusterLevel},_refreshClustersIcons:function(){this._featureGroup.eachLayer(function(e){e instanceof L.MarkerCluster&&e._iconNeedsUpdate&&e._updateIcon()})},_enqueue:function(e){this._queue.push(e),this._queueTimeout||(this._queueTimeout=setTimeout(L.bind(this._processQueue,this),300))},_processQueue:function(){for(var e=0;ee?(this._animationStart(),this._animationZoomOut(this._zoom,e)):this._moveEnd()},_getExpandedVisibleBounds:function(){return this.options.removeOutsideVisibleBounds?L.Browser.mobile?this._checkBoundsMaxLat(this._map.getBounds()):this._checkBoundsMaxLat(this._map.getBounds().pad(1)):this._mapBoundsInfinite},_checkBoundsMaxLat:function(e){var t=this._maxLat;return t!==i&&(e.getNorth()>=t&&(e._northEast.lat=1/0),e.getSouth()<=-t&&(e._southWest.lat=-1/0)),e},_animationAddLayerNonAnimated:function(e,t){if(t===e)this._featureGroup.addLayer(e);else if(2===t._childCount){t._addToMap();var i=t.getAllChildMarkers();this._featureGroup.removeLayer(i[0]),this._featureGroup.removeLayer(i[1])}else t._updateIcon()},_extractNonGroupLayers:function(e,t){var i,n=e.getLayers(),r=0;for(t=t||[];r=0;i--)o=h[i],n.contains(o._latlng)||r.removeLayer(o)}),this._forceLayout(),this._topClusterLevel._recursivelyBecomeVisible(n,t),r.eachLayer(function(e){e instanceof L.MarkerCluster||!e._icon||e.clusterShow()}),this._topClusterLevel._recursively(n,e,t,function(e){e._recursivelyRestoreChildPositions(t)}),this._ignoreMove=!1,this._enqueue(function(){this._topClusterLevel._recursively(n,e,s,function(e){r.removeLayer(e),e.clusterShow()}),this._animationEnd()})},_animationZoomOut:function(e,t){this._animationZoomOutSingle(this._topClusterLevel,e-1,t),this._topClusterLevel._recursivelyAddChildrenToMap(null,t,this._getExpandedVisibleBounds()),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),e,this._getExpandedVisibleBounds())},_animationAddLayer:function(e,t){var i=this,n=this._featureGroup;n.addLayer(e),t!==e&&(t._childCount>2?(t._updateIcon(),this._forceLayout(),this._animationStart(),e._setPos(this._map.latLngToLayerPoint(t.getLatLng())),e.clusterHide(),this._enqueue(function(){n.removeLayer(e),e.clusterShow(),i._animationEnd()})):(this._forceLayout(),i._animationStart(),i._animationZoomOutSingle(t,this._map.getMaxZoom(),this._zoom)))}},_animationZoomOutSingle:function(e,t,i){var n=this._getExpandedVisibleBounds(),r=Math.floor(this._map.getMinZoom());e._recursivelyAnimateChildrenInAndAddSelfToMap(n,r,t+1,i);var s=this;this._forceLayout(),e._recursivelyBecomeVisible(n,i),this._enqueue(function(){if(1===e._childCount){var o=e._markers[0];this._ignoreMove=!0,o.setLatLng(o.getLatLng()),this._ignoreMove=!1,o.clusterShow&&o.clusterShow()}else e._recursively(n,i,r,function(e){e._recursivelyRemoveChildrenFromMap(n,r,t+1)});s._animationEnd()})},_animationEnd:function(){this._map&&(this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim","")),this._inZoomAnimation--,this.fire("animationend")},_forceLayout:function(){L.Util.falseFn(t.body.offsetWidth)}}),L.markerClusterGroup=function(e){return new L.MarkerClusterGroup(e)},L.MarkerCluster=L.Marker.extend({initialize:function(e,t,i,n){L.Marker.prototype.initialize.call(this,i?i._cLatLng||i.getLatLng():new L.LatLng(0,0),{icon:this,pane:e.options.clusterPane}),this._group=e,this._zoom=t,this._markers=[],this._childClusters=[],this._childCount=0,this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._bounds=new L.LatLngBounds,i&&this._addChild(i),n&&this._addChild(n)},getAllChildMarkers:function(e){e=e||[];for(var t=this._childClusters.length-1;t>=0;t--)this._childClusters[t].getAllChildMarkers(e);for(var i=this._markers.length-1;i>=0;i--)e.push(this._markers[i]);return e},getChildCount:function(){return this._childCount},zoomToBounds:function(e){for(var t,i=this._childClusters.slice(),n=this._group._map,r=n.getBoundsZoom(this._bounds),s=this._zoom+1,o=n.getZoom();i.length>0&&r>s;){s++;var a=[];for(t=0;ts?this._group._map.setView(this._latlng,s):o>=r?this._group._map.setView(this._latlng,o+1):this._group._map.fitBounds(this._bounds,e)},getBounds:function(){var e=new L.LatLngBounds;return e.extend(this._bounds),e},_updateIcon:function(){this._iconNeedsUpdate=!0,this._icon&&this.setIcon(this)},createIcon:function(){return this._iconNeedsUpdate&&(this._iconObj=this._group.options.iconCreateFunction(this),this._iconNeedsUpdate=!1),this._iconObj.createIcon()},createShadow:function(){return this._iconObj.createShadow()},_addChild:function(e,t){this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._setClusterCenter(e),e instanceof L.MarkerCluster?(t||(this._childClusters.push(e),e.__parent=this),this._childCount+=e._childCount):(t||this._markers.push(e),this._childCount++),this.__parent&&this.__parent._addChild(e,!0)},_setClusterCenter:function(e){this._cLatLng||(this._cLatLng=e._cLatLng||e._latlng)},_resetBounds:function(){var e=this._bounds;e._southWest&&(e._southWest.lat=1/0,e._southWest.lng=1/0),e._northEast&&(e._northEast.lat=-1/0,e._northEast.lng=-1/0)},_recalculateBounds:function(){var e,t,i,n,r=this._markers,s=this._childClusters,o=0,a=0,h=this._childCount;if(0!==h){for(this._resetBounds(),e=0;e=0;i--)n=r[i],n._icon&&(n._setPos(t),n.clusterHide())},function(e){var i,n,r=e._childClusters;for(i=r.length-1;i>=0;i--)n=r[i],n._icon&&(n._setPos(t),n.clusterHide())})},_recursivelyAnimateChildrenInAndAddSelfToMap:function(e,t,i,n){this._recursively(e,n,t,function(r){r._recursivelyAnimateChildrenIn(e,r._group._map.latLngToLayerPoint(r.getLatLng()).round(),i),r._isSingleParent()&&i-1===n?(r.clusterShow(),r._recursivelyRemoveChildrenFromMap(e,t,i)):r.clusterHide(),r._addToMap()})},_recursivelyBecomeVisible:function(e,t){this._recursively(e,this._group._map.getMinZoom(),t,null,function(e){e.clusterShow()})},_recursivelyAddChildrenToMap:function(e,t,i){this._recursively(i,this._group._map.getMinZoom()-1,t,function(n){if(t!==n._zoom)for(var r=n._markers.length-1;r>=0;r--){var s=n._markers[r];i.contains(s._latlng)&&(e&&(s._backupLatlng=s.getLatLng(),s.setLatLng(e),s.clusterHide&&s.clusterHide()),n._group._featureGroup.addLayer(s))}},function(t){t._addToMap(e)})},_recursivelyRestoreChildPositions:function(e){for(var t=this._markers.length-1;t>=0;t--){var i=this._markers[t];i._backupLatlng&&(i.setLatLng(i._backupLatlng),delete i._backupLatlng)}if(e-1===this._zoom)for(var n=this._childClusters.length-1;n>=0;n--)this._childClusters[n]._restorePosition();else for(var r=this._childClusters.length-1;r>=0;r--)this._childClusters[r]._recursivelyRestoreChildPositions(e)},_restorePosition:function(){this._backupLatlng&&(this.setLatLng(this._backupLatlng),delete this._backupLatlng)},_recursivelyRemoveChildrenFromMap:function(e,t,i,n){var r,s;this._recursively(e,t-1,i-1,function(e){for(s=e._markers.length-1;s>=0;s--)r=e._markers[s],n&&n.contains(r._latlng)||(e._group._featureGroup.removeLayer(r),r.clusterShow&&r.clusterShow())},function(e){for(s=e._childClusters.length-1;s>=0;s--)r=e._childClusters[s],n&&n.contains(r._latlng)||(e._group._featureGroup.removeLayer(r),r.clusterShow&&r.clusterShow())})},_recursively:function(e,t,i,n,r){var s,o,a=this._childClusters,h=this._zoom;if(h>=t&&(n&&n(this),r&&h===i&&r(this)),t>h||i>h)for(s=a.length-1;s>=0;s--)o=a[s],e.intersects(o._bounds)&&o._recursively(e,t,i,n,r)},_isSingleParent:function(){return this._childClusters.length>0&&this._childClusters[0]._childCount===this._childCount}}),L.Marker.include({clusterHide:function(){return this.options.opacityWhenUnclustered=this.options.opacity||1,this.setOpacity(0)},clusterShow:function(){var e=this.setOpacity(this.options.opacity||this.options.opacityWhenUnclustered);return delete this.options.opacityWhenUnclustered,e}}),L.DistanceGrid=function(e){this._cellSize=e,this._sqCellSize=e*e,this._grid={},this._objectPoint={}},L.DistanceGrid.prototype={addObject:function(e,t){var i=this._getCoord(t.x),n=this._getCoord(t.y),r=this._grid,s=r[n]=r[n]||{},o=s[i]=s[i]||[],a=L.Util.stamp(e);this._objectPoint[a]=t,o.push(e)},updateObject:function(e,t){this.removeObject(e),this.addObject(e,t)},removeObject:function(e,t){var i,n,r=this._getCoord(t.x),s=this._getCoord(t.y),o=this._grid,a=o[s]=o[s]||{},h=a[r]=a[r]||[];for(delete this._objectPoint[L.Util.stamp(e)],i=0,n=h.length;n>i;i++)if(h[i]===e)return h.splice(i,1),1===n&&delete a[r],!0},eachObject:function(e,t){var i,n,r,s,o,a,h,l=this._grid;for(i in l){o=l[i];for(n in o)for(a=o[n],r=0,s=a.length;s>r;r++)h=e.call(t,a[r]),h&&(r--,s--)}},getNearObject:function(e){var t,i,n,r,s,o,a,h,l=this._getCoord(e.x),u=this._getCoord(e.y),_=this._objectPoint,d=this._sqCellSize,c=null;for(t=u-1;u+1>=t;t++)if(r=this._grid[t])for(i=l-1;l+1>=i;i++)if(s=r[i])for(n=0,o=s.length;o>n;n++)a=s[n],h=this._sqDist(_[L.Util.stamp(a)],e),(d>h||d>=h&&null===c)&&(d=h,c=a);return c},_getCoord:function(e){var t=Math.floor(e/this._cellSize);return isFinite(t)?t:e},_sqDist:function(e,t){var i=t.x-e.x,n=t.y-e.y;return i*i+n*n}},function(){L.QuickHull={getDistant:function(e,t){var i=t[1].lat-t[0].lat,n=t[0].lng-t[1].lng;return n*(e.lat-t[0].lat)+i*(e.lng-t[0].lng)},findMostDistantPointFromBaseLine:function(e,t){var i,n,r,s=0,o=null,a=[];for(i=t.length-1;i>=0;i--)n=t[i],r=this.getDistant(n,e),r>0&&(a.push(n),r>s&&(s=r,o=n));return{maxPoint:o,newPoints:a}},buildConvexHull:function(e,t){var i=[],n=this.findMostDistantPointFromBaseLine(e,t);return n.maxPoint?(i=i.concat(this.buildConvexHull([e[0],n.maxPoint],n.newPoints)),i=i.concat(this.buildConvexHull([n.maxPoint,e[1]],n.newPoints))):[e[0]]},getConvexHull:function(e){var t,i=!1,n=!1,r=!1,s=!1,o=null,a=null,h=null,l=null,u=null,_=null;for(t=e.length-1;t>=0;t--){var d=e[t];(i===!1||d.lat>i)&&(o=d,i=d.lat),(n===!1||d.latr)&&(h=d,r=d.lng),(s===!1||d.lng=0;t--)e=i[t].getLatLng(),n.push(e);return L.QuickHull.getConvexHull(n)}}),L.MarkerCluster.include({_2PI:2*Math.PI,_circleFootSeparation:25,_circleStartAngle:Math.PI/6,_spiralFootSeparation:28,_spiralLengthStart:11,_spiralLengthFactor:5,_circleSpiralSwitchover:9,spiderfy:function(){if(this._group._spiderfied!==this&&!this._group._inZoomAnimation){var e,t=this.getAllChildMarkers(),i=this._group,n=i._map,r=n.latLngToLayerPoint(this._latlng);this._group._unspiderfy(),this._group._spiderfied=this,t.length>=this._circleSpiralSwitchover?e=this._generatePointsSpiral(t.length,r):(r.y+=10,e=this._generatePointsCircle(t.length,r)),this._animationSpiderfy(t,e)}},unspiderfy:function(e){this._group._inZoomAnimation||(this._animationUnspiderfy(e),this._group._spiderfied=null)},_generatePointsCircle:function(e,t){var i,n,r=this._group.options.spiderfyDistanceMultiplier*this._circleFootSeparation*(2+e),s=r/this._2PI,o=this._2PI/e,a=[];for(a.length=e,i=e-1;i>=0;i--)n=this._circleStartAngle+i*o,a[i]=new L.Point(t.x+s*Math.cos(n),t.y+s*Math.sin(n))._round();return a},_generatePointsSpiral:function(e,t){var i,n=this._group.options.spiderfyDistanceMultiplier,r=n*this._spiralLengthStart,s=n*this._spiralFootSeparation,o=n*this._spiralLengthFactor*this._2PI,a=0,h=[];for(h.length=e,i=e-1;i>=0;i--)a+=s/r+5e-4*i,h[i]=new L.Point(t.x+r*Math.cos(a),t.y+r*Math.sin(a))._round(),r+=o/a;return h},_noanimationUnspiderfy:function(){var e,t,i=this._group,n=i._map,r=i._featureGroup,s=this.getAllChildMarkers();for(i._ignoreMove=!0,this.setOpacity(1),t=s.length-1;t>=0;t--)e=s[t],r.removeLayer(e),e._preSpiderfyLatlng&&(e.setLatLng(e._preSpiderfyLatlng),delete e._preSpiderfyLatlng),e.setZIndexOffset&&e.setZIndexOffset(0),e._spiderLeg&&(n.removeLayer(e._spiderLeg),delete e._spiderLeg);i.fire("unspiderfied",{cluster:this,markers:s}),i._ignoreMove=!1,i._spiderfied=null}}),L.MarkerClusterNonAnimated=L.MarkerCluster.extend({_animationSpiderfy:function(e,t){var i,n,r,s,o=this._group,a=o._map,h=o._featureGroup,l=this._group.options.spiderLegPolylineOptions;for(o._ignoreMove=!0,i=0;i=0;n--)h=_.layerPointToLatLng(t[n]),r=e[n],r._preSpiderfyLatlng=r._latlng,r.setLatLng(h),r.clusterShow&&r.clusterShow(),f&&(s=r._spiderLeg,o=s._path,o.style.strokeDashoffset=0,s.setStyle({opacity:g}));this.setOpacity(.3),u._ignoreMove=!1,setTimeout(function(){u._animationEnd(),u.fire("spiderfied",{cluster:l,markers:e})},200)},_animationUnspiderfy:function(e){var t,i,n,r,s,o,a=this,h=this._group,l=h._map,u=h._featureGroup,_=e?l._latLngToNewLayerPoint(this._latlng,e.zoom,e.center):l.latLngToLayerPoint(this._latlng),d=this.getAllChildMarkers(),c=L.Path.SVG;for(h._ignoreMove=!0,h._animationStart(),this.setOpacity(1),i=d.length-1;i>=0;i--)t=d[i],t._preSpiderfyLatlng&&(t.closePopup(),t.setLatLng(t._preSpiderfyLatlng),delete t._preSpiderfyLatlng,o=!0,t._setPos&&(t._setPos(_),o=!1),t.clusterHide&&(t.clusterHide(),o=!1),o&&u.removeLayer(t),c&&(n=t._spiderLeg,r=n._path,s=r.getTotalLength()+.1,r.style.strokeDashoffset=s,n.setStyle({opacity:0})));h._ignoreMove=!1,setTimeout(function(){var e=0;for(i=d.length-1;i>=0;i--)t=d[i],t._spiderLeg&&e++;for(i=d.length-1;i>=0;i--)t=d[i],t._spiderLeg&&(t.clusterShow&&t.clusterShow(),t.setZIndexOffset&&t.setZIndexOffset(0),e>1&&u.removeLayer(t),l.removeLayer(t._spiderLeg),delete t._spiderLeg);h._animationEnd(),h.fire("unspiderfied",{cluster:a,markers:d})},200)}}),L.MarkerClusterGroup.include({_spiderfied:null,unspiderfy:function(){this._unspiderfy.apply(this,arguments)},_spiderfierOnAdd:function(){this._map.on("click",this._unspiderfyWrapper,this),this._map.options.zoomAnimation&&this._map.on("zoomstart",this._unspiderfyZoomStart,this),this._map.on("zoomend",this._noanimationUnspiderfy,this),L.Browser.touch||this._map.getRenderer(this)},_spiderfierOnRemove:function(){this._map.off("click",this._unspiderfyWrapper,this),this._map.off("zoomstart",this._unspiderfyZoomStart,this),this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._map.off("zoomend",this._noanimationUnspiderfy,this),this._noanimationUnspiderfy()},_unspiderfyZoomStart:function(){this._map&&this._map.on("zoomanim",this._unspiderfyZoomAnim,this)},_unspiderfyZoomAnim:function(e){L.DomUtil.hasClass(this._map._mapPane,"leaflet-touching")||(this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._unspiderfy(e))},_unspiderfyWrapper:function(){this._unspiderfy() -},_unspiderfy:function(e){this._spiderfied&&this._spiderfied.unspiderfy(e)},_noanimationUnspiderfy:function(){this._spiderfied&&this._spiderfied._noanimationUnspiderfy()},_unspiderfyLayer:function(e){e._spiderLeg&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow(),e.setZIndexOffset&&e.setZIndexOffset(0),this._map.removeLayer(e._spiderLeg),delete e._spiderLeg)}}),L.MarkerClusterGroup.include({refreshClusters:function(e){return e?e instanceof L.MarkerClusterGroup?e=e._topClusterLevel.getAllChildMarkers():e instanceof L.LayerGroup?e=e._layers:e instanceof L.MarkerCluster?e=e.getAllChildMarkers():e instanceof L.Marker&&(e=[e]):e=this._topClusterLevel.getAllChildMarkers(),this._flagParentsIconsNeedUpdate(e),this._refreshClustersIcons(),this.options.singleMarkerMode&&this._refreshSingleMarkerModeMarkers(e),this},_flagParentsIconsNeedUpdate:function(e){var t,i;for(t in e)for(i=e[t].__parent;i;)i._iconNeedsUpdate=!0,i=i.__parent},_refreshSingleMarkerModeMarkers:function(e){var t,i;for(t in e)i=e[t],this.hasLayer(i)&&i.setIcon(this._overrideMarkerIcon(i))}}),L.Marker.include({refreshIconOptions:function(e,t){var i=this.options.icon;return L.setOptions(i,e),this.setIcon(i),t&&this.__parent&&this.__parent._group.refreshClusters(this),this}})}(window,document); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e.Leaflet=e.Leaflet||{},e.Leaflet.markercluster=e.Leaflet.markercluster||{}))}(this,function(e){"use strict";var t=L.MarkerClusterGroup=L.FeatureGroup.extend({options:{maxClusterRadius:80,iconCreateFunction:null,clusterPane:L.Marker.prototype.options.pane,spiderfyOnMaxZoom:!0,showCoverageOnHover:!0,zoomToBoundsOnClick:!0,singleMarkerMode:!1,disableClusteringAtZoom:null,removeOutsideVisibleBounds:!0,animate:!0,animateAddingMarkers:!1,spiderfyDistanceMultiplier:1,spiderLegPolylineOptions:{weight:1.5,color:"#222",opacity:.5},chunkedLoading:!1,chunkInterval:200,chunkDelay:50,chunkProgress:null,polygonOptions:{}},initialize:function(e){L.Util.setOptions(this,e),this.options.iconCreateFunction||(this.options.iconCreateFunction=this._defaultIconCreateFunction),this._featureGroup=L.featureGroup(),this._featureGroup.addEventParent(this),this._nonPointGroup=L.featureGroup(),this._nonPointGroup.addEventParent(this),this._inZoomAnimation=0,this._needsClustering=[],this._needsRemoving=[],this._currentShownBounds=null,this._queue=[],this._childMarkerEventHandlers={dragstart:this._childMarkerDragStart,move:this._childMarkerMoved,dragend:this._childMarkerDragEnd};var t=L.DomUtil.TRANSITION&&this.options.animate;L.extend(this,t?this._withAnimation:this._noAnimation),this._markerCluster=t?L.MarkerCluster:L.MarkerClusterNonAnimated},addLayer:function(e){if(e instanceof L.LayerGroup)return this.addLayers([e]);if(!e.getLatLng)return this._nonPointGroup.addLayer(e),this.fire("layeradd",{layer:e}),this;if(!this._map)return this._needsClustering.push(e),this.fire("layeradd",{layer:e}),this;if(this.hasLayer(e))return this;this._unspiderfy&&this._unspiderfy(),this._addLayer(e,this._maxZoom),this.fire("layeradd",{layer:e}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons();var t=e,i=this._zoom;if(e.__parent)for(;t.__parent._zoom>=i;)t=t.__parent;return this._currentShownBounds.contains(t.getLatLng())&&(this.options.animateAddingMarkers?this._animationAddLayer(e,t):this._animationAddLayerNonAnimated(e,t)),this},removeLayer:function(e){return e instanceof L.LayerGroup?this.removeLayers([e]):e.getLatLng?this._map?e.__parent?(this._unspiderfy&&(this._unspiderfy(),this._unspiderfyLayer(e)),this._removeLayer(e,!0),this.fire("layerremove",{layer:e}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),e.off(this._childMarkerEventHandlers,this),this._featureGroup.hasLayer(e)&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow()),this):this:(!this._arraySplice(this._needsClustering,e)&&this.hasLayer(e)&&this._needsRemoving.push({layer:e,latlng:e._latlng}),this.fire("layerremove",{layer:e}),this):(this._nonPointGroup.removeLayer(e),this.fire("layerremove",{layer:e}),this)},addLayers:function(e,t){if(!L.Util.isArray(e))return this.addLayer(e);var i,n=this._featureGroup,r=this._nonPointGroup,s=this.options.chunkedLoading,o=this.options.chunkInterval,a=this.options.chunkProgress,h=e.length,l=0,u=!0;if(this._map){var _=(new Date).getTime(),d=L.bind(function(){for(var c=(new Date).getTime();h>l;l++){if(s&&0===l%200){var p=(new Date).getTime()-c;if(p>o)break}if(i=e[l],i instanceof L.LayerGroup)u&&(e=e.slice(),u=!1),this._extractNonGroupLayers(i,e),h=e.length;else if(i.getLatLng){if(!this.hasLayer(i)&&(this._addLayer(i,this._maxZoom),t||this.fire("layeradd",{layer:i}),i.__parent&&2===i.__parent.getChildCount())){var f=i.__parent.getAllChildMarkers(),m=f[0]===i?f[1]:f[0];n.removeLayer(m)}}else r.addLayer(i),t||this.fire("layeradd",{layer:i})}a&&a(l,h,(new Date).getTime()-_),l===h?(this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds)):setTimeout(d,this.options.chunkDelay)},this);d()}else for(var c=this._needsClustering;h>l;l++)i=e[l],i instanceof L.LayerGroup?(u&&(e=e.slice(),u=!1),this._extractNonGroupLayers(i,e),h=e.length):i.getLatLng?this.hasLayer(i)||c.push(i):r.addLayer(i);return this},removeLayers:function(e){var t,i,n=e.length,r=this._featureGroup,s=this._nonPointGroup,o=!0;if(!this._map){for(t=0;n>t;t++)i=e[t],i instanceof L.LayerGroup?(o&&(e=e.slice(),o=!1),this._extractNonGroupLayers(i,e),n=e.length):(this._arraySplice(this._needsClustering,i),s.removeLayer(i),this.hasLayer(i)&&this._needsRemoving.push({layer:i,latlng:i._latlng}),this.fire("layerremove",{layer:i}));return this}if(this._unspiderfy){this._unspiderfy();var a=e.slice(),h=n;for(t=0;h>t;t++)i=a[t],i instanceof L.LayerGroup?(this._extractNonGroupLayers(i,a),h=a.length):this._unspiderfyLayer(i)}for(t=0;n>t;t++)i=e[t],i instanceof L.LayerGroup?(o&&(e=e.slice(),o=!1),this._extractNonGroupLayers(i,e),n=e.length):i.__parent?(this._removeLayer(i,!0,!0),this.fire("layerremove",{layer:i}),r.hasLayer(i)&&(r.removeLayer(i),i.clusterShow&&i.clusterShow())):(s.removeLayer(i),this.fire("layerremove",{layer:i}));return this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds),this},clearLayers:function(){return this._map||(this._needsClustering=[],this._needsRemoving=[],delete this._gridClusters,delete this._gridUnclustered),this._noanimationUnspiderfy&&this._noanimationUnspiderfy(),this._featureGroup.clearLayers(),this._nonPointGroup.clearLayers(),this.eachLayer(function(e){e.off(this._childMarkerEventHandlers,this),delete e.__parent},this),this._map&&this._generateInitialClusters(),this},getBounds:function(){var e=new L.LatLngBounds;this._topClusterLevel&&e.extend(this._topClusterLevel._bounds);for(var t=this._needsClustering.length-1;t>=0;t--)e.extend(this._needsClustering[t].getLatLng());return e.extend(this._nonPointGroup.getBounds()),e},eachLayer:function(e,t){var i,n,r,s=this._needsClustering.slice(),o=this._needsRemoving;for(this._topClusterLevel&&this._topClusterLevel.getAllChildMarkers(s),n=s.length-1;n>=0;n--){for(i=!0,r=o.length-1;r>=0;r--)if(o[r].layer===s[n]){i=!1;break}i&&e.call(t,s[n])}this._nonPointGroup.eachLayer(e,t)},getLayers:function(){var e=[];return this.eachLayer(function(t){e.push(t)}),e},getLayer:function(e){var t=null;return e=parseInt(e,10),this.eachLayer(function(i){L.stamp(i)===e&&(t=i)}),t},hasLayer:function(e){if(!e)return!1;var t,i=this._needsClustering;for(t=i.length-1;t>=0;t--)if(i[t]===e)return!0;for(i=this._needsRemoving,t=i.length-1;t>=0;t--)if(i[t].layer===e)return!1;return!(!e.__parent||e.__parent._group!==this)||this._nonPointGroup.hasLayer(e)},zoomToShowLayer:function(e,t){"function"!=typeof t&&(t=function(){});var i=function(){!e._icon&&!e.__parent._icon||this._inZoomAnimation||(this._map.off("moveend",i,this),this.off("animationend",i,this),e._icon?t():e.__parent._icon&&(this.once("spiderfied",t,this),e.__parent.spiderfy()))};e._icon&&this._map.getBounds().contains(e.getLatLng())?t():e.__parent._zoomt;t++)n=this._needsRemoving[t],n.newlatlng=n.layer._latlng,n.layer._latlng=n.latlng;for(t=0,i=this._needsRemoving.length;i>t;t++)n=this._needsRemoving[t],this._removeLayer(n.layer,!0),n.layer._latlng=n.newlatlng;this._needsRemoving=[],this._zoom=Math.round(this._map._zoom),this._currentShownBounds=this._getExpandedVisibleBounds(),this._map.on("zoomend",this._zoomEnd,this),this._map.on("moveend",this._moveEnd,this),this._spiderfierOnAdd&&this._spiderfierOnAdd(),this._bindEvents(),i=this._needsClustering,this._needsClustering=[],this.addLayers(i,!0)},onRemove:function(e){e.off("zoomend",this._zoomEnd,this),e.off("moveend",this._moveEnd,this),this._unbindEvents(),this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim",""),this._spiderfierOnRemove&&this._spiderfierOnRemove(),delete this._maxLat,this._hideCoverage(),this._featureGroup.remove(),this._nonPointGroup.remove(),this._featureGroup.clearLayers(),this._map=null},getVisibleParent:function(e){for(var t=e;t&&!t._icon;)t=t.__parent;return t||null},_arraySplice:function(e,t){for(var i=e.length-1;i>=0;i--)if(e[i]===t)return e.splice(i,1),!0},_removeFromGridUnclustered:function(e,t){for(var i=this._map,n=this._gridUnclustered,r=Math.floor(this._map.getMinZoom());t>=r&&n[t].removeObject(e,i.project(e.getLatLng(),t));t--);},_childMarkerDragStart:function(e){e.target.__dragStart=e.target._latlng},_childMarkerMoved:function(e){if(!this._ignoreMove&&!e.target.__dragStart){var t=e.target._popup&&e.target._popup.isOpen();this._moveChild(e.target,e.oldLatLng,e.latlng),t&&e.target.openPopup()}},_moveChild:function(e,t,i){e._latlng=t,this.removeLayer(e),e._latlng=i,this.addLayer(e)},_childMarkerDragEnd:function(e){var t=e.target.__dragStart;delete e.target.__dragStart,t&&this._moveChild(e.target,t,e.target._latlng)},_removeLayer:function(e,t,i){var n=this._gridClusters,r=this._gridUnclustered,s=this._featureGroup,o=this._map,a=Math.floor(this._map.getMinZoom());t&&this._removeFromGridUnclustered(e,this._maxZoom);var h,l=e.__parent,u=l._markers;for(this._arraySplice(u,e);l&&(l._childCount--,l._boundsNeedUpdate=!0,!(l._zoomt?"small":100>t?"medium":"large",new L.DivIcon({html:"
"+t+"
",className:"marker-cluster"+i,iconSize:new L.Point(40,40)})},_bindEvents:function(){var e=this._map,t=this.options.spiderfyOnMaxZoom,i=this.options.showCoverageOnHover,n=this.options.zoomToBoundsOnClick;(t||n)&&this.on("clusterclick",this._zoomOrSpiderfy,this),i&&(this.on("clustermouseover",this._showCoverage,this),this.on("clustermouseout",this._hideCoverage,this),e.on("zoomend",this._hideCoverage,this))},_zoomOrSpiderfy:function(e){for(var t=e.layer,i=t;1===i._childClusters.length;)i=i._childClusters[0];i._zoom===this._maxZoom&&i._childCount===t._childCount&&this.options.spiderfyOnMaxZoom?t.spiderfy():this.options.zoomToBoundsOnClick&&t.zoomToBounds(),e.originalEvent&&13===e.originalEvent.keyCode&&this._map._container.focus()},_showCoverage:function(e){var t=this._map;this._inZoomAnimation||(this._shownPolygon&&t.removeLayer(this._shownPolygon),e.layer.getChildCount()>2&&e.layer!==this._spiderfied&&(this._shownPolygon=new L.Polygon(e.layer.getConvexHull(),this.options.polygonOptions),t.addLayer(this._shownPolygon)))},_hideCoverage:function(){this._shownPolygon&&(this._map.removeLayer(this._shownPolygon),this._shownPolygon=null)},_unbindEvents:function(){var e=this.options.spiderfyOnMaxZoom,t=this.options.showCoverageOnHover,i=this.options.zoomToBoundsOnClick,n=this._map;(e||i)&&this.off("clusterclick",this._zoomOrSpiderfy,this),t&&(this.off("clustermouseover",this._showCoverage,this),this.off("clustermouseout",this._hideCoverage,this),n.off("zoomend",this._hideCoverage,this))},_zoomEnd:function(){this._map&&(this._mergeSplitClusters(),this._zoom=Math.round(this._map._zoom),this._currentShownBounds=this._getExpandedVisibleBounds())},_moveEnd:function(){if(!this._inZoomAnimation){var e=this._getExpandedVisibleBounds();this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),this._zoom,e),this._topClusterLevel._recursivelyAddChildrenToMap(null,Math.round(this._map._zoom),e),this._currentShownBounds=e}},_generateInitialClusters:function(){var e=Math.ceil(this._map.getMaxZoom()),t=Math.floor(this._map.getMinZoom()),i=this.options.maxClusterRadius,n=i;"function"!=typeof i&&(n=function(){return i}),null!==this.options.disableClusteringAtZoom&&(e=this.options.disableClusteringAtZoom-1),this._maxZoom=e,this._gridClusters={},this._gridUnclustered={};for(var r=e;r>=t;r--)this._gridClusters[r]=new L.DistanceGrid(n(r)),this._gridUnclustered[r]=new L.DistanceGrid(n(r));this._topClusterLevel=new this._markerCluster(this,t-1)},_addLayer:function(e,t){var i,n,r=this._gridClusters,s=this._gridUnclustered,o=Math.floor(this._map.getMinZoom());for(this.options.singleMarkerMode&&this._overrideMarkerIcon(e),e.on(this._childMarkerEventHandlers,this);t>=o;t--){i=this._map.project(e.getLatLng(),t);var a=r[t].getNearObject(i);if(a)return a._addChild(e),e.__parent=a,void 0;if(a=s[t].getNearObject(i)){var h=a.__parent;h&&this._removeLayer(a,!1);var l=new this._markerCluster(this,t,a,e);r[t].addObject(l,this._map.project(l._cLatLng,t)),a.__parent=l,e.__parent=l;var u=l;for(n=t-1;n>h._zoom;n--)u=new this._markerCluster(this,n,u),r[n].addObject(u,this._map.project(a.getLatLng(),n));return h._addChild(u),this._removeFromGridUnclustered(a,t),void 0}s[t].addObject(e,i)}this._topClusterLevel._addChild(e),e.__parent=this._topClusterLevel},_refreshClustersIcons:function(){this._featureGroup.eachLayer(function(e){e instanceof L.MarkerCluster&&e._iconNeedsUpdate&&e._updateIcon()})},_enqueue:function(e){this._queue.push(e),this._queueTimeout||(this._queueTimeout=setTimeout(L.bind(this._processQueue,this),300))},_processQueue:function(){for(var e=0;ee?(this._animationStart(),this._animationZoomOut(this._zoom,e)):this._moveEnd()},_getExpandedVisibleBounds:function(){return this.options.removeOutsideVisibleBounds?L.Browser.mobile?this._checkBoundsMaxLat(this._map.getBounds()):this._checkBoundsMaxLat(this._map.getBounds().pad(1)):this._mapBoundsInfinite},_checkBoundsMaxLat:function(e){var t=this._maxLat;return void 0!==t&&(e.getNorth()>=t&&(e._northEast.lat=1/0),e.getSouth()<=-t&&(e._southWest.lat=-1/0)),e},_animationAddLayerNonAnimated:function(e,t){if(t===e)this._featureGroup.addLayer(e);else if(2===t._childCount){t._addToMap();var i=t.getAllChildMarkers();this._featureGroup.removeLayer(i[0]),this._featureGroup.removeLayer(i[1])}else t._updateIcon()},_extractNonGroupLayers:function(e,t){var i,n=e.getLayers(),r=0;for(t=t||[];r=0;i--)o=h[i],n.contains(o._latlng)||r.removeLayer(o)}),this._forceLayout(),this._topClusterLevel._recursivelyBecomeVisible(n,t),r.eachLayer(function(e){e instanceof L.MarkerCluster||!e._icon||e.clusterShow()}),this._topClusterLevel._recursively(n,e,t,function(e){e._recursivelyRestoreChildPositions(t)}),this._ignoreMove=!1,this._enqueue(function(){this._topClusterLevel._recursively(n,e,s,function(e){r.removeLayer(e),e.clusterShow()}),this._animationEnd()})},_animationZoomOut:function(e,t){this._animationZoomOutSingle(this._topClusterLevel,e-1,t),this._topClusterLevel._recursivelyAddChildrenToMap(null,t,this._getExpandedVisibleBounds()),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),e,this._getExpandedVisibleBounds())},_animationAddLayer:function(e,t){var i=this,n=this._featureGroup;n.addLayer(e),t!==e&&(t._childCount>2?(t._updateIcon(),this._forceLayout(),this._animationStart(),e._setPos(this._map.latLngToLayerPoint(t.getLatLng())),e.clusterHide(),this._enqueue(function(){n.removeLayer(e),e.clusterShow(),i._animationEnd()})):(this._forceLayout(),i._animationStart(),i._animationZoomOutSingle(t,this._map.getMaxZoom(),this._zoom)))}},_animationZoomOutSingle:function(e,t,i){var n=this._getExpandedVisibleBounds(),r=Math.floor(this._map.getMinZoom());e._recursivelyAnimateChildrenInAndAddSelfToMap(n,r,t+1,i);var s=this;this._forceLayout(),e._recursivelyBecomeVisible(n,i),this._enqueue(function(){if(1===e._childCount){var o=e._markers[0];this._ignoreMove=!0,o.setLatLng(o.getLatLng()),this._ignoreMove=!1,o.clusterShow&&o.clusterShow()}else e._recursively(n,i,r,function(e){e._recursivelyRemoveChildrenFromMap(n,r,t+1)});s._animationEnd()})},_animationEnd:function(){this._map&&(this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim","")),this._inZoomAnimation--,this.fire("animationend")},_forceLayout:function(){L.Util.falseFn(document.body.offsetWidth)}}),L.markerClusterGroup=function(e){return new L.MarkerClusterGroup(e)};var i=L.MarkerCluster=L.Marker.extend({options:L.Icon.prototype.options,initialize:function(e,t,i,n){L.Marker.prototype.initialize.call(this,i?i._cLatLng||i.getLatLng():new L.LatLng(0,0),{icon:this,pane:e.options.clusterPane}),this._group=e,this._zoom=t,this._markers=[],this._childClusters=[],this._childCount=0,this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._bounds=new L.LatLngBounds,i&&this._addChild(i),n&&this._addChild(n)},getAllChildMarkers:function(e,t){e=e||[];for(var i=this._childClusters.length-1;i>=0;i--)this._childClusters[i].getAllChildMarkers(e);for(var n=this._markers.length-1;n>=0;n--)t&&this._markers[n].__dragStart||e.push(this._markers[n]);return e},getChildCount:function(){return this._childCount},zoomToBounds:function(e){for(var t,i=this._childClusters.slice(),n=this._group._map,r=n.getBoundsZoom(this._bounds),s=this._zoom+1,o=n.getZoom();i.length>0&&r>s;){s++;var a=[];for(t=0;ts?this._group._map.setView(this._latlng,s):o>=r?this._group._map.setView(this._latlng,o+1):this._group._map.fitBounds(this._bounds,e)},getBounds:function(){var e=new L.LatLngBounds;return e.extend(this._bounds),e},_updateIcon:function(){this._iconNeedsUpdate=!0,this._icon&&this.setIcon(this)},createIcon:function(){return this._iconNeedsUpdate&&(this._iconObj=this._group.options.iconCreateFunction(this),this._iconNeedsUpdate=!1),this._iconObj.createIcon()},createShadow:function(){return this._iconObj.createShadow()},_addChild:function(e,t){this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._setClusterCenter(e),e instanceof L.MarkerCluster?(t||(this._childClusters.push(e),e.__parent=this),this._childCount+=e._childCount):(t||this._markers.push(e),this._childCount++),this.__parent&&this.__parent._addChild(e,!0)},_setClusterCenter:function(e){this._cLatLng||(this._cLatLng=e._cLatLng||e._latlng)},_resetBounds:function(){var e=this._bounds;e._southWest&&(e._southWest.lat=1/0,e._southWest.lng=1/0),e._northEast&&(e._northEast.lat=-1/0,e._northEast.lng=-1/0)},_recalculateBounds:function(){var e,t,i,n,r=this._markers,s=this._childClusters,o=0,a=0,h=this._childCount;if(0!==h){for(this._resetBounds(),e=0;e=0;i--)n=r[i],n._icon&&(n._setPos(t),n.clusterHide())},function(e){var i,n,r=e._childClusters;for(i=r.length-1;i>=0;i--)n=r[i],n._icon&&(n._setPos(t),n.clusterHide())})},_recursivelyAnimateChildrenInAndAddSelfToMap:function(e,t,i,n){this._recursively(e,n,t,function(r){r._recursivelyAnimateChildrenIn(e,r._group._map.latLngToLayerPoint(r.getLatLng()).round(),i),r._isSingleParent()&&i-1===n?(r.clusterShow(),r._recursivelyRemoveChildrenFromMap(e,t,i)):r.clusterHide(),r._addToMap()})},_recursivelyBecomeVisible:function(e,t){this._recursively(e,this._group._map.getMinZoom(),t,null,function(e){e.clusterShow()})},_recursivelyAddChildrenToMap:function(e,t,i){this._recursively(i,this._group._map.getMinZoom()-1,t,function(n){if(t!==n._zoom)for(var r=n._markers.length-1;r>=0;r--){var s=n._markers[r];i.contains(s._latlng)&&(e&&(s._backupLatlng=s.getLatLng(),s.setLatLng(e),s.clusterHide&&s.clusterHide()),n._group._featureGroup.addLayer(s))}},function(t){t._addToMap(e)})},_recursivelyRestoreChildPositions:function(e){for(var t=this._markers.length-1;t>=0;t--){var i=this._markers[t];i._backupLatlng&&(i.setLatLng(i._backupLatlng),delete i._backupLatlng)}if(e-1===this._zoom)for(var n=this._childClusters.length-1;n>=0;n--)this._childClusters[n]._restorePosition();else for(var r=this._childClusters.length-1;r>=0;r--)this._childClusters[r]._recursivelyRestoreChildPositions(e)},_restorePosition:function(){this._backupLatlng&&(this.setLatLng(this._backupLatlng),delete this._backupLatlng)},_recursivelyRemoveChildrenFromMap:function(e,t,i,n){var r,s;this._recursively(e,t-1,i-1,function(e){for(s=e._markers.length-1;s>=0;s--)r=e._markers[s],n&&n.contains(r._latlng)||(e._group._featureGroup.removeLayer(r),r.clusterShow&&r.clusterShow())},function(e){for(s=e._childClusters.length-1;s>=0;s--)r=e._childClusters[s],n&&n.contains(r._latlng)||(e._group._featureGroup.removeLayer(r),r.clusterShow&&r.clusterShow())})},_recursively:function(e,t,i,n,r){var s,o,a=this._childClusters,h=this._zoom;if(h>=t&&(n&&n(this),r&&h===i&&r(this)),t>h||i>h)for(s=a.length-1;s>=0;s--)o=a[s],o._boundsNeedUpdate&&o._recalculateBounds(),e.intersects(o._bounds)&&o._recursively(e,t,i,n,r)},_isSingleParent:function(){return this._childClusters.length>0&&this._childClusters[0]._childCount===this._childCount}});L.Marker.include({clusterHide:function(){var e=this.options.opacity;return this.setOpacity(0),this.options.opacity=e,this},clusterShow:function(){return this.setOpacity(this.options.opacity)}}),L.DistanceGrid=function(e){this._cellSize=e,this._sqCellSize=e*e,this._grid={},this._objectPoint={}},L.DistanceGrid.prototype={addObject:function(e,t){var i=this._getCoord(t.x),n=this._getCoord(t.y),r=this._grid,s=r[n]=r[n]||{},o=s[i]=s[i]||[],a=L.Util.stamp(e);this._objectPoint[a]=t,o.push(e)},updateObject:function(e,t){this.removeObject(e),this.addObject(e,t)},removeObject:function(e,t){var i,n,r=this._getCoord(t.x),s=this._getCoord(t.y),o=this._grid,a=o[s]=o[s]||{},h=a[r]=a[r]||[];for(delete this._objectPoint[L.Util.stamp(e)],i=0,n=h.length;n>i;i++)if(h[i]===e)return h.splice(i,1),1===n&&delete a[r],!0},eachObject:function(e,t){var i,n,r,s,o,a,h,l=this._grid;for(i in l){o=l[i];for(n in o)for(a=o[n],r=0,s=a.length;s>r;r++)h=e.call(t,a[r]),h&&(r--,s--)}},getNearObject:function(e){var t,i,n,r,s,o,a,h,l=this._getCoord(e.x),u=this._getCoord(e.y),_=this._objectPoint,d=this._sqCellSize,c=null;for(t=u-1;u+1>=t;t++)if(r=this._grid[t])for(i=l-1;l+1>=i;i++)if(s=r[i])for(n=0,o=s.length;o>n;n++)a=s[n],h=this._sqDist(_[L.Util.stamp(a)],e),(d>h||d>=h&&null===c)&&(d=h,c=a);return c},_getCoord:function(e){var t=Math.floor(e/this._cellSize);return isFinite(t)?t:e},_sqDist:function(e,t){var i=t.x-e.x,n=t.y-e.y;return i*i+n*n}},function(){L.QuickHull={getDistant:function(e,t){var i=t[1].lat-t[0].lat,n=t[0].lng-t[1].lng;return n*(e.lat-t[0].lat)+i*(e.lng-t[0].lng)},findMostDistantPointFromBaseLine:function(e,t){var i,n,r,s=0,o=null,a=[];for(i=t.length-1;i>=0;i--)n=t[i],r=this.getDistant(n,e),r>0&&(a.push(n),r>s&&(s=r,o=n));return{maxPoint:o,newPoints:a}},buildConvexHull:function(e,t){var i=[],n=this.findMostDistantPointFromBaseLine(e,t);return n.maxPoint?(i=i.concat(this.buildConvexHull([e[0],n.maxPoint],n.newPoints)),i=i.concat(this.buildConvexHull([n.maxPoint,e[1]],n.newPoints))):[e[0]]},getConvexHull:function(e){var t,i=!1,n=!1,r=!1,s=!1,o=null,a=null,h=null,l=null,u=null,_=null;for(t=e.length-1;t>=0;t--){var d=e[t];(i===!1||d.lat>i)&&(o=d,i=d.lat),(n===!1||d.latr)&&(h=d,r=d.lng),(s===!1||d.lng=0;t--)e=i[t].getLatLng(),n.push(e);return L.QuickHull.getConvexHull(n)}}),L.MarkerCluster.include({_2PI:2*Math.PI,_circleFootSeparation:25,_circleStartAngle:0,_spiralFootSeparation:28,_spiralLengthStart:11,_spiralLengthFactor:5,_circleSpiralSwitchover:9,spiderfy:function(){if(this._group._spiderfied!==this&&!this._group._inZoomAnimation){var e,t=this.getAllChildMarkers(null,!0),i=this._group,n=i._map,r=n.latLngToLayerPoint(this._latlng);this._group._unspiderfy(),this._group._spiderfied=this,t.length>=this._circleSpiralSwitchover?e=this._generatePointsSpiral(t.length,r):(r.y+=10,e=this._generatePointsCircle(t.length,r)),this._animationSpiderfy(t,e)}},unspiderfy:function(e){this._group._inZoomAnimation||(this._animationUnspiderfy(e),this._group._spiderfied=null)},_generatePointsCircle:function(e,t){var i,n,r=this._group.options.spiderfyDistanceMultiplier*this._circleFootSeparation*(2+e),s=r/this._2PI,o=this._2PI/e,a=[];for(s=Math.max(s,35),a.length=e,i=0;e>i;i++)n=this._circleStartAngle+i*o,a[i]=new L.Point(t.x+s*Math.cos(n),t.y+s*Math.sin(n))._round();return a},_generatePointsSpiral:function(e,t){var i,n=this._group.options.spiderfyDistanceMultiplier,r=n*this._spiralLengthStart,s=n*this._spiralFootSeparation,o=n*this._spiralLengthFactor*this._2PI,a=0,h=[];for(h.length=e,i=e;i>=0;i--)e>i&&(h[i]=new L.Point(t.x+r*Math.cos(a),t.y+r*Math.sin(a))._round()),a+=s/r+5e-4*i,r+=o/a;return h},_noanimationUnspiderfy:function(){var e,t,i=this._group,n=i._map,r=i._featureGroup,s=this.getAllChildMarkers(null,!0);for(i._ignoreMove=!0,this.setOpacity(1),t=s.length-1;t>=0;t--)e=s[t],r.removeLayer(e),e._preSpiderfyLatlng&&(e.setLatLng(e._preSpiderfyLatlng),delete e._preSpiderfyLatlng),e.setZIndexOffset&&e.setZIndexOffset(0),e._spiderLeg&&(n.removeLayer(e._spiderLeg),delete e._spiderLeg);i.fire("unspiderfied",{cluster:this,markers:s}),i._ignoreMove=!1,i._spiderfied=null}}),L.MarkerClusterNonAnimated=L.MarkerCluster.extend({_animationSpiderfy:function(e,t){var i,n,r,s,o=this._group,a=o._map,h=o._featureGroup,l=this._group.options.spiderLegPolylineOptions;for(o._ignoreMove=!0,i=0;i=0;i--)a=u.layerPointToLatLng(t[i]),n=e[i],n._preSpiderfyLatlng=n._latlng,n.setLatLng(a),n.clusterShow&&n.clusterShow(),p&&(r=n._spiderLeg,s=r._path,s.style.strokeDashoffset=0,r.setStyle({opacity:m}));this.setOpacity(.3),l._ignoreMove=!1,setTimeout(function(){l._animationEnd(),l.fire("spiderfied",{cluster:h,markers:e})},200)},_animationUnspiderfy:function(e){var t,i,n,r,s,o,a=this,h=this._group,l=h._map,u=h._featureGroup,_=e?l._latLngToNewLayerPoint(this._latlng,e.zoom,e.center):l.latLngToLayerPoint(this._latlng),d=this.getAllChildMarkers(null,!0),c=L.Path.SVG;for(h._ignoreMove=!0,h._animationStart(),this.setOpacity(1),i=d.length-1;i>=0;i--)t=d[i],t._preSpiderfyLatlng&&(t.closePopup(),t.setLatLng(t._preSpiderfyLatlng),delete t._preSpiderfyLatlng,o=!0,t._setPos&&(t._setPos(_),o=!1),t.clusterHide&&(t.clusterHide(),o=!1),o&&u.removeLayer(t),c&&(n=t._spiderLeg,r=n._path,s=r.getTotalLength()+.1,r.style.strokeDashoffset=s,n.setStyle({opacity:0})));h._ignoreMove=!1,setTimeout(function(){var e=0;for(i=d.length-1;i>=0;i--)t=d[i],t._spiderLeg&&e++;for(i=d.length-1;i>=0;i--)t=d[i],t._spiderLeg&&(t.clusterShow&&t.clusterShow(),t.setZIndexOffset&&t.setZIndexOffset(0),e>1&&u.removeLayer(t),l.removeLayer(t._spiderLeg),delete t._spiderLeg);h._animationEnd(),h.fire("unspiderfied",{cluster:a,markers:d})},200)}}),L.MarkerClusterGroup.include({_spiderfied:null,unspiderfy:function(){this._unspiderfy.apply(this,arguments)},_spiderfierOnAdd:function(){this._map.on("click",this._unspiderfyWrapper,this),this._map.options.zoomAnimation&&this._map.on("zoomstart",this._unspiderfyZoomStart,this),this._map.on("zoomend",this._noanimationUnspiderfy,this),L.Browser.touch||this._map.getRenderer(this)},_spiderfierOnRemove:function(){this._map.off("click",this._unspiderfyWrapper,this),this._map.off("zoomstart",this._unspiderfyZoomStart,this),this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._map.off("zoomend",this._noanimationUnspiderfy,this),this._noanimationUnspiderfy() +},_unspiderfyZoomStart:function(){this._map&&this._map.on("zoomanim",this._unspiderfyZoomAnim,this)},_unspiderfyZoomAnim:function(e){L.DomUtil.hasClass(this._map._mapPane,"leaflet-touching")||(this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._unspiderfy(e))},_unspiderfyWrapper:function(){this._unspiderfy()},_unspiderfy:function(e){this._spiderfied&&this._spiderfied.unspiderfy(e)},_noanimationUnspiderfy:function(){this._spiderfied&&this._spiderfied._noanimationUnspiderfy()},_unspiderfyLayer:function(e){e._spiderLeg&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow(),e.setZIndexOffset&&e.setZIndexOffset(0),this._map.removeLayer(e._spiderLeg),delete e._spiderLeg)}}),L.MarkerClusterGroup.include({refreshClusters:function(e){return e?e instanceof L.MarkerClusterGroup?e=e._topClusterLevel.getAllChildMarkers():e instanceof L.LayerGroup?e=e._layers:e instanceof L.MarkerCluster?e=e.getAllChildMarkers():e instanceof L.Marker&&(e=[e]):e=this._topClusterLevel.getAllChildMarkers(),this._flagParentsIconsNeedUpdate(e),this._refreshClustersIcons(),this.options.singleMarkerMode&&this._refreshSingleMarkerModeMarkers(e),this},_flagParentsIconsNeedUpdate:function(e){var t,i;for(t in e)for(i=e[t].__parent;i;)i._iconNeedsUpdate=!0,i=i.__parent},_refreshSingleMarkerModeMarkers:function(e){var t,i;for(t in e)i=e[t],this.hasLayer(i)&&i.setIcon(this._overrideMarkerIcon(i))}}),L.Marker.include({refreshIconOptions:function(e,t){var i=this.options.icon;return L.setOptions(i,e),this.setIcon(i),t&&this.__parent&&this.__parent._group.refreshClusters(this),this}}),e.MarkerClusterGroup=t,e.MarkerCluster=i}); +//# sourceMappingURL=leaflet.markercluster.js.map \ No newline at end of file diff --git a/assets/vendor/leaflet.markercluster/dist/leaflet.markercluster.js.map b/assets/vendor/leaflet.markercluster/dist/leaflet.markercluster.js.map new file mode 100644 index 00000000..a4b459c1 --- /dev/null +++ b/assets/vendor/leaflet.markercluster/dist/leaflet.markercluster.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/MarkerClusterGroup.js","../src/MarkerCluster.js","../src/MarkerOpacity.js","../src/DistanceGrid.js","../src/MarkerCluster.QuickHull.js","../src/MarkerCluster.Spiderfier.js","../src/MarkerClusterGroup.Refresh.js"],"names":[],"mappings":"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","file":"dist/leaflet.markercluster.js"} \ No newline at end of file diff --git a/assets/vendor/leaflet/images/marker-icon-2x.png b/assets/vendor/leaflet/images/marker-icon-2x.png index e4abba3b..88f9e501 100644 Binary files a/assets/vendor/leaflet/images/marker-icon-2x.png and b/assets/vendor/leaflet/images/marker-icon-2x.png differ diff --git a/assets/vendor/leaflet/leaflet-src.esm.js b/assets/vendor/leaflet/leaflet-src.esm.js new file mode 100644 index 00000000..c6d24a0e --- /dev/null +++ b/assets/vendor/leaflet/leaflet-src.esm.js @@ -0,0 +1,14316 @@ +/* @preserve + * Leaflet 1.9.2, a JS library for interactive maps. https://leafletjs.com + * (c) 2010-2022 Vladimir Agafonkin, (c) 2010-2011 CloudMade + */ + +var version = "1.9.2"; + +/* + * @namespace Util + * + * Various utility functions, used by Leaflet internally. + */ + +// @function extend(dest: Object, src?: Object): Object +// Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut. +function extend(dest) { + var i, j, len, src; + + for (j = 1, len = arguments.length; j < len; j++) { + src = arguments[j]; + for (i in src) { + dest[i] = src[i]; + } + } + return dest; +} + +// @function create(proto: Object, properties?: Object): Object +// Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create) +var create$2 = Object.create || (function () { + function F() {} + return function (proto) { + F.prototype = proto; + return new F(); + }; +})(); + +// @function bind(fn: Function, 
): Function +// Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind). +// Has a `L.bind()` shortcut. +function bind(fn, obj) { + var slice = Array.prototype.slice; + + if (fn.bind) { + return fn.bind.apply(fn, slice.call(arguments, 1)); + } + + var args = slice.call(arguments, 2); + + return function () { + return fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments); + }; +} + +// @property lastId: Number +// Last unique ID used by [`stamp()`](#util-stamp) +var lastId = 0; + +// @function stamp(obj: Object): Number +// Returns the unique ID of an object, assigning it one if it doesn't have it. +function stamp(obj) { + if (!('_leaflet_id' in obj)) { + obj['_leaflet_id'] = ++lastId; + } + return obj._leaflet_id; +} + +// @function throttle(fn: Function, time: Number, context: Object): Function +// Returns a function which executes function `fn` with the given scope `context` +// (so that the `this` keyword refers to `context` inside `fn`'s code). The function +// `fn` will be called no more than one time per given amount of `time`. The arguments +// received by the bound function will be any arguments passed when binding the +// function, followed by any arguments passed when invoking the bound function. +// Has an `L.throttle` shortcut. +function throttle(fn, time, context) { + var lock, args, wrapperFn, later; + + later = function () { + // reset lock and call if queued + lock = false; + if (args) { + wrapperFn.apply(context, args); + args = false; + } + }; + + wrapperFn = function () { + if (lock) { + // called too soon, queue to call later + args = arguments; + + } else { + // call and lock until later + fn.apply(context, arguments); + setTimeout(later, time); + lock = true; + } + }; + + return wrapperFn; +} + +// @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number +// Returns the number `num` modulo `range` in such a way so it lies within +// `range[0]` and `range[1]`. The returned value will be always smaller than +// `range[1]` unless `includeMax` is set to `true`. +function wrapNum(x, range, includeMax) { + var max = range[1], + min = range[0], + d = max - min; + return x === max && includeMax ? x : ((x - min) % d + d) % d + min; +} + +// @function falseFn(): Function +// Returns a function which always returns `false`. +function falseFn() { return false; } + +// @function formatNum(num: Number, precision?: Number|false): Number +// Returns the number `num` rounded with specified `precision`. +// The default `precision` value is 6 decimal places. +// `false` can be passed to skip any processing (can be useful to avoid round-off errors). +function formatNum(num, precision) { + if (precision === false) { return num; } + var pow = Math.pow(10, precision === undefined ? 6 : precision); + return Math.round(num * pow) / pow; +} + +// @function trim(str: String): String +// Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim) +function trim(str) { + return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ''); +} + +// @function splitWords(str: String): String[] +// Trims and splits the string on whitespace and returns the array of parts. +function splitWords(str) { + return trim(str).split(/\s+/); +} + +// @function setOptions(obj: Object, options: Object): Object +// Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut. +function setOptions(obj, options) { + if (!Object.prototype.hasOwnProperty.call(obj, 'options')) { + obj.options = obj.options ? create$2(obj.options) : {}; + } + for (var i in options) { + obj.options[i] = options[i]; + } + return obj.options; +} + +// @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String +// Converts an object into a parameter URL string, e.g. `{a: "foo", b: "bar"}` +// translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will +// be appended at the end. If `uppercase` is `true`, the parameter names will +// be uppercased (e.g. `'?A=foo&B=bar'`) +function getParamString(obj, existingUrl, uppercase) { + var params = []; + for (var i in obj) { + params.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i])); + } + return ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&'); +} + +var templateRe = /\{ *([\w_ -]+) *\}/g; + +// @function template(str: String, data: Object): String +// Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'` +// and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string +// `('Hello foo, bar')`. You can also specify functions instead of strings for +// data values — they will be evaluated passing `data` as an argument. +function template(str, data) { + return str.replace(templateRe, function (str, key) { + var value = data[key]; + + if (value === undefined) { + throw new Error('No value provided for variable ' + str); + + } else if (typeof value === 'function') { + value = value(data); + } + return value; + }); +} + +// @function isArray(obj): Boolean +// Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray) +var isArray = Array.isArray || function (obj) { + return (Object.prototype.toString.call(obj) === '[object Array]'); +}; + +// @function indexOf(array: Array, el: Object): Number +// Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf) +function indexOf(array, el) { + for (var i = 0; i < array.length; i++) { + if (array[i] === el) { return i; } + } + return -1; +} + +// @property emptyImageUrl: String +// Data URI string containing a base64-encoded empty GIF image. +// Used as a hack to free memory from unused images on WebKit-powered +// mobile devices (by setting image `src` to this string). +var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='; + +// inspired by https://paulirish.com/2011/requestanimationframe-for-smart-animating/ + +function getPrefixed(name) { + return window['webkit' + name] || window['moz' + name] || window['ms' + name]; +} + +var lastTime = 0; + +// fallback for IE 7-8 +function timeoutDefer(fn) { + var time = +new Date(), + timeToCall = Math.max(0, 16 - (time - lastTime)); + + lastTime = time + timeToCall; + return window.setTimeout(fn, timeToCall); +} + +var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer; +var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') || + getPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); }; + +// @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number +// Schedules `fn` to be executed when the browser repaints. `fn` is bound to +// `context` if given. When `immediate` is set, `fn` is called immediately if +// the browser doesn't have native support for +// [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame), +// otherwise it's delayed. Returns a request ID that can be used to cancel the request. +function requestAnimFrame(fn, context, immediate) { + if (immediate && requestFn === timeoutDefer) { + fn.call(context); + } else { + return requestFn.call(window, bind(fn, context)); + } +} + +// @function cancelAnimFrame(id: Number): undefined +// Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame). +function cancelAnimFrame(id) { + if (id) { + cancelFn.call(window, id); + } +} + +var Util = { + __proto__: null, + extend: extend, + create: create$2, + bind: bind, + get lastId () { return lastId; }, + stamp: stamp, + throttle: throttle, + wrapNum: wrapNum, + falseFn: falseFn, + formatNum: formatNum, + trim: trim, + splitWords: splitWords, + setOptions: setOptions, + getParamString: getParamString, + template: template, + isArray: isArray, + indexOf: indexOf, + emptyImageUrl: emptyImageUrl, + requestFn: requestFn, + cancelFn: cancelFn, + requestAnimFrame: requestAnimFrame, + cancelAnimFrame: cancelAnimFrame +}; + +// @class Class +// @aka L.Class + +// @section +// @uninheritable + +// Thanks to John Resig and Dean Edwards for inspiration! + +function Class() {} + +Class.extend = function (props) { + + // @function extend(props: Object): Function + // [Extends the current class](#class-inheritance) given the properties to be included. + // Returns a Javascript function that is a class constructor (to be called with `new`). + var NewClass = function () { + + setOptions(this); + + // call the constructor + if (this.initialize) { + this.initialize.apply(this, arguments); + } + + // call all constructor hooks + this.callInitHooks(); + }; + + var parentProto = NewClass.__super__ = this.prototype; + + var proto = create$2(parentProto); + proto.constructor = NewClass; + + NewClass.prototype = proto; + + // inherit parent's statics + for (var i in this) { + if (Object.prototype.hasOwnProperty.call(this, i) && i !== 'prototype' && i !== '__super__') { + NewClass[i] = this[i]; + } + } + + // mix static properties into the class + if (props.statics) { + extend(NewClass, props.statics); + } + + // mix includes into the prototype + if (props.includes) { + checkDeprecatedMixinEvents(props.includes); + extend.apply(null, [proto].concat(props.includes)); + } + + // mix given properties into the prototype + extend(proto, props); + delete proto.statics; + delete proto.includes; + + // merge options + if (proto.options) { + proto.options = parentProto.options ? create$2(parentProto.options) : {}; + extend(proto.options, props.options); + } + + proto._initHooks = []; + + // add method for calling all hooks + proto.callInitHooks = function () { + + if (this._initHooksCalled) { return; } + + if (parentProto.callInitHooks) { + parentProto.callInitHooks.call(this); + } + + this._initHooksCalled = true; + + for (var i = 0, len = proto._initHooks.length; i < len; i++) { + proto._initHooks[i].call(this); + } + }; + + return NewClass; +}; + + +// @function include(properties: Object): this +// [Includes a mixin](#class-includes) into the current class. +Class.include = function (props) { + var parentOptions = this.prototype.options; + extend(this.prototype, props); + if (props.options) { + this.prototype.options = parentOptions; + this.mergeOptions(props.options); + } + return this; +}; + +// @function mergeOptions(options: Object): this +// [Merges `options`](#class-options) into the defaults of the class. +Class.mergeOptions = function (options) { + extend(this.prototype.options, options); + return this; +}; + +// @function addInitHook(fn: Function): this +// Adds a [constructor hook](#class-constructor-hooks) to the class. +Class.addInitHook = function (fn) { // (Function) || (String, args...) + var args = Array.prototype.slice.call(arguments, 1); + + var init = typeof fn === 'function' ? fn : function () { + this[fn].apply(this, args); + }; + + this.prototype._initHooks = this.prototype._initHooks || []; + this.prototype._initHooks.push(init); + return this; +}; + +function checkDeprecatedMixinEvents(includes) { + if (typeof L === 'undefined' || !L || !L.Mixin) { return; } + + includes = isArray(includes) ? includes : [includes]; + + for (var i = 0; i < includes.length; i++) { + if (includes[i] === L.Mixin.Events) { + console.warn('Deprecated include of L.Mixin.Events: ' + + 'this property will be removed in future releases, ' + + 'please inherit from L.Evented instead.', new Error().stack); + } + } +} + +/* + * @class Evented + * @aka L.Evented + * @inherits Class + * + * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event). + * + * @example + * + * ```js + * map.on('click', function(e) { + * alert(e.latlng); + * } ); + * ``` + * + * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function: + * + * ```js + * function onClick(e) { ... } + * + * map.on('click', onClick); + * map.off('click', onClick); + * ``` + */ + +var Events = { + /* @method on(type: String, fn: Function, context?: Object): this + * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`). + * + * @alternative + * @method on(eventMap: Object): this + * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}` + */ + on: function (types, fn, context) { + + // types can be a map of types/handlers + if (typeof types === 'object') { + for (var type in types) { + // we don't process space-separated events here for performance; + // it's a hot path since Layer uses the on(obj) syntax + this._on(type, types[type], fn); + } + + } else { + // types can be a string of space-separated words + types = splitWords(types); + + for (var i = 0, len = types.length; i < len; i++) { + this._on(types[i], fn, context); + } + } + + return this; + }, + + /* @method off(type: String, fn?: Function, context?: Object): this + * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener. + * + * @alternative + * @method off(eventMap: Object): this + * Removes a set of type/listener pairs. + * + * @alternative + * @method off: this + * Removes all listeners to all events on the object. This includes implicitly attached events. + */ + off: function (types, fn, context) { + + if (!arguments.length) { + // clear all listeners if called without arguments + delete this._events; + + } else if (typeof types === 'object') { + for (var type in types) { + this._off(type, types[type], fn); + } + + } else { + types = splitWords(types); + + var removeAll = arguments.length === 1; + for (var i = 0, len = types.length; i < len; i++) { + if (removeAll) { + this._off(types[i]); + } else { + this._off(types[i], fn, context); + } + } + } + + return this; + }, + + // attach listener (without syntactic sugar now) + _on: function (type, fn, context, _once) { + if (typeof fn !== 'function') { + console.warn('wrong listener type: ' + typeof fn); + return; + } + + // check if fn already there + if (this._listens(type, fn, context) !== false) { + return; + } + + if (context === this) { + // Less memory footprint. + context = undefined; + } + + var newListener = {fn: fn, ctx: context}; + if (_once) { + newListener.once = true; + } + + this._events = this._events || {}; + this._events[type] = this._events[type] || []; + this._events[type].push(newListener); + }, + + _off: function (type, fn, context) { + var listeners, + i, + len; + + if (!this._events) { + return; + } + + listeners = this._events[type]; + if (!listeners) { + return; + } + + if (arguments.length === 1) { // remove all + if (this._firingCount) { + // Set all removed listeners to noop + // so they are not called if remove happens in fire + for (i = 0, len = listeners.length; i < len; i++) { + listeners[i].fn = falseFn; + } + } + // clear all listeners for a type if function isn't specified + delete this._events[type]; + return; + } + + if (typeof fn !== 'function') { + console.warn('wrong listener type: ' + typeof fn); + return; + } + + // find fn and remove it + var index = this._listens(type, fn, context); + if (index !== false) { + var listener = listeners[index]; + if (this._firingCount) { + // set the removed listener to noop so that's not called if remove happens in fire + listener.fn = falseFn; + + /* copy array in case events are being fired */ + this._events[type] = listeners = listeners.slice(); + } + listeners.splice(index, 1); + } + }, + + // @method fire(type: String, data?: Object, propagate?: Boolean): this + // Fires an event of the specified type. You can optionally provide a data + // object — the first argument of the listener function will contain its + // properties. The event can optionally be propagated to event parents. + fire: function (type, data, propagate) { + if (!this.listens(type, propagate)) { return this; } + + var event = extend({}, data, { + type: type, + target: this, + sourceTarget: data && data.sourceTarget || this + }); + + if (this._events) { + var listeners = this._events[type]; + if (listeners) { + this._firingCount = (this._firingCount + 1) || 1; + for (var i = 0, len = listeners.length; i < len; i++) { + var l = listeners[i]; + // off overwrites l.fn, so we need to copy fn to a var + var fn = l.fn; + if (l.once) { + this.off(type, fn, l.ctx); + } + fn.call(l.ctx || this, event); + } + + this._firingCount--; + } + } + + if (propagate) { + // propagate the event to parents (set with addEventParent) + this._propagateEvent(event); + } + + return this; + }, + + // @method listens(type: String, propagate?: Boolean): Boolean + // @method listens(type: String, fn: Function, context?: Object, propagate?: Boolean): Boolean + // Returns `true` if a particular event type has any listeners attached to it. + // The verification can optionally be propagated, it will return `true` if parents have the listener attached to it. + listens: function (type, fn, context, propagate) { + if (typeof type !== 'string') { + console.warn('"string" type argument expected'); + } + + // we don't overwrite the input `fn` value, because we need to use it for propagation + var _fn = fn; + if (typeof fn !== 'function') { + propagate = !!fn; + _fn = undefined; + context = undefined; + } + + var listeners = this._events && this._events[type]; + if (listeners && listeners.length) { + if (this._listens(type, _fn, context) !== false) { + return true; + } + } + + if (propagate) { + // also check parents for listeners if event propagates + for (var id in this._eventParents) { + if (this._eventParents[id].listens(type, fn, context, propagate)) { return true; } + } + } + return false; + }, + + // returns the index (number) or false + _listens: function (type, fn, context) { + if (!this._events) { + return false; + } + + var listeners = this._events[type] || []; + if (!fn) { + return !!listeners.length; + } + + if (context === this) { + // Less memory footprint. + context = undefined; + } + + for (var i = 0, len = listeners.length; i < len; i++) { + if (listeners[i].fn === fn && listeners[i].ctx === context) { + return i; + } + } + return false; + + }, + + // @method once(
): this + // Behaves as [`on(
)`](#evented-on), except the listener will only get fired once and then removed. + once: function (types, fn, context) { + + // types can be a map of types/handlers + if (typeof types === 'object') { + for (var type in types) { + // we don't process space-separated events here for performance; + // it's a hot path since Layer uses the on(obj) syntax + this._on(type, types[type], fn, true); + } + + } else { + // types can be a string of space-separated words + types = splitWords(types); + + for (var i = 0, len = types.length; i < len; i++) { + this._on(types[i], fn, context, true); + } + } + + return this; + }, + + // @method addEventParent(obj: Evented): this + // Adds an event parent - an `Evented` that will receive propagated events + addEventParent: function (obj) { + this._eventParents = this._eventParents || {}; + this._eventParents[stamp(obj)] = obj; + return this; + }, + + // @method removeEventParent(obj: Evented): this + // Removes an event parent, so it will stop receiving propagated events + removeEventParent: function (obj) { + if (this._eventParents) { + delete this._eventParents[stamp(obj)]; + } + return this; + }, + + _propagateEvent: function (e) { + for (var id in this._eventParents) { + this._eventParents[id].fire(e.type, extend({ + layer: e.target, + propagatedFrom: e.target + }, e), true); + } + } +}; + +// aliases; we should ditch those eventually + +// @method addEventListener(
): this +// Alias to [`on(
)`](#evented-on) +Events.addEventListener = Events.on; + +// @method removeEventListener(
): this +// Alias to [`off(
)`](#evented-off) + +// @method clearAllEventListeners(
): this +// Alias to [`off()`](#evented-off) +Events.removeEventListener = Events.clearAllEventListeners = Events.off; + +// @method addOneTimeEventListener(
): this +// Alias to [`once(
)`](#evented-once) +Events.addOneTimeEventListener = Events.once; + +// @method fireEvent(
): this +// Alias to [`fire(
)`](#evented-fire) +Events.fireEvent = Events.fire; + +// @method hasEventListeners(
): Boolean +// Alias to [`listens(
)`](#evented-listens) +Events.hasEventListeners = Events.listens; + +var Evented = Class.extend(Events); + +/* + * @class Point + * @aka L.Point + * + * Represents a point with `x` and `y` coordinates in pixels. + * + * @example + * + * ```js + * var point = L.point(200, 300); + * ``` + * + * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent: + * + * ```js + * map.panBy([200, 300]); + * map.panBy(L.point(200, 300)); + * ``` + * + * Note that `Point` does not inherit from Leaflet's `Class` object, + * which means new classes can't inherit from it, and new methods + * can't be added to it with the `include` function. + */ + +function Point(x, y, round) { + // @property x: Number; The `x` coordinate of the point + this.x = (round ? Math.round(x) : x); + // @property y: Number; The `y` coordinate of the point + this.y = (round ? Math.round(y) : y); +} + +var trunc = Math.trunc || function (v) { + return v > 0 ? Math.floor(v) : Math.ceil(v); +}; + +Point.prototype = { + + // @method clone(): Point + // Returns a copy of the current point. + clone: function () { + return new Point(this.x, this.y); + }, + + // @method add(otherPoint: Point): Point + // Returns the result of addition of the current and the given points. + add: function (point) { + // non-destructive, returns a new point + return this.clone()._add(toPoint(point)); + }, + + _add: function (point) { + // destructive, used directly for performance in situations where it's safe to modify existing point + this.x += point.x; + this.y += point.y; + return this; + }, + + // @method subtract(otherPoint: Point): Point + // Returns the result of subtraction of the given point from the current. + subtract: function (point) { + return this.clone()._subtract(toPoint(point)); + }, + + _subtract: function (point) { + this.x -= point.x; + this.y -= point.y; + return this; + }, + + // @method divideBy(num: Number): Point + // Returns the result of division of the current point by the given number. + divideBy: function (num) { + return this.clone()._divideBy(num); + }, + + _divideBy: function (num) { + this.x /= num; + this.y /= num; + return this; + }, + + // @method multiplyBy(num: Number): Point + // Returns the result of multiplication of the current point by the given number. + multiplyBy: function (num) { + return this.clone()._multiplyBy(num); + }, + + _multiplyBy: function (num) { + this.x *= num; + this.y *= num; + return this; + }, + + // @method scaleBy(scale: Point): Point + // Multiply each coordinate of the current point by each coordinate of + // `scale`. In linear algebra terms, multiply the point by the + // [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation) + // defined by `scale`. + scaleBy: function (point) { + return new Point(this.x * point.x, this.y * point.y); + }, + + // @method unscaleBy(scale: Point): Point + // Inverse of `scaleBy`. Divide each coordinate of the current point by + // each coordinate of `scale`. + unscaleBy: function (point) { + return new Point(this.x / point.x, this.y / point.y); + }, + + // @method round(): Point + // Returns a copy of the current point with rounded coordinates. + round: function () { + return this.clone()._round(); + }, + + _round: function () { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + return this; + }, + + // @method floor(): Point + // Returns a copy of the current point with floored coordinates (rounded down). + floor: function () { + return this.clone()._floor(); + }, + + _floor: function () { + this.x = Math.floor(this.x); + this.y = Math.floor(this.y); + return this; + }, + + // @method ceil(): Point + // Returns a copy of the current point with ceiled coordinates (rounded up). + ceil: function () { + return this.clone()._ceil(); + }, + + _ceil: function () { + this.x = Math.ceil(this.x); + this.y = Math.ceil(this.y); + return this; + }, + + // @method trunc(): Point + // Returns a copy of the current point with truncated coordinates (rounded towards zero). + trunc: function () { + return this.clone()._trunc(); + }, + + _trunc: function () { + this.x = trunc(this.x); + this.y = trunc(this.y); + return this; + }, + + // @method distanceTo(otherPoint: Point): Number + // Returns the cartesian distance between the current and the given points. + distanceTo: function (point) { + point = toPoint(point); + + var x = point.x - this.x, + y = point.y - this.y; + + return Math.sqrt(x * x + y * y); + }, + + // @method equals(otherPoint: Point): Boolean + // Returns `true` if the given point has the same coordinates. + equals: function (point) { + point = toPoint(point); + + return point.x === this.x && + point.y === this.y; + }, + + // @method contains(otherPoint: Point): Boolean + // Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values). + contains: function (point) { + point = toPoint(point); + + return Math.abs(point.x) <= Math.abs(this.x) && + Math.abs(point.y) <= Math.abs(this.y); + }, + + // @method toString(): String + // Returns a string representation of the point for debugging purposes. + toString: function () { + return 'Point(' + + formatNum(this.x) + ', ' + + formatNum(this.y) + ')'; + } +}; + +// @factory L.point(x: Number, y: Number, round?: Boolean) +// Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values. + +// @alternative +// @factory L.point(coords: Number[]) +// Expects an array of the form `[x, y]` instead. + +// @alternative +// @factory L.point(coords: Object) +// Expects a plain object of the form `{x: Number, y: Number}` instead. +function toPoint(x, y, round) { + if (x instanceof Point) { + return x; + } + if (isArray(x)) { + return new Point(x[0], x[1]); + } + if (x === undefined || x === null) { + return x; + } + if (typeof x === 'object' && 'x' in x && 'y' in x) { + return new Point(x.x, x.y); + } + return new Point(x, y, round); +} + +/* + * @class Bounds + * @aka L.Bounds + * + * Represents a rectangular area in pixel coordinates. + * + * @example + * + * ```js + * var p1 = L.point(10, 10), + * p2 = L.point(40, 60), + * bounds = L.bounds(p1, p2); + * ``` + * + * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this: + * + * ```js + * otherBounds.intersects([[10, 10], [40, 60]]); + * ``` + * + * Note that `Bounds` does not inherit from Leaflet's `Class` object, + * which means new classes can't inherit from it, and new methods + * can't be added to it with the `include` function. + */ + +function Bounds(a, b) { + if (!a) { return; } + + var points = b ? [a, b] : a; + + for (var i = 0, len = points.length; i < len; i++) { + this.extend(points[i]); + } +} + +Bounds.prototype = { + // @method extend(point: Point): this + // Extends the bounds to contain the given point. + + // @alternative + // @method extend(otherBounds: Bounds): this + // Extend the bounds to contain the given bounds + extend: function (obj) { + var min2, max2; + if (!obj) { return this; } + + if (obj instanceof Point || typeof obj[0] === 'number' || 'x' in obj) { + min2 = max2 = toPoint(obj); + } else { + obj = toBounds(obj); + min2 = obj.min; + max2 = obj.max; + + if (!min2 || !max2) { return this; } + } + + // @property min: Point + // The top left corner of the rectangle. + // @property max: Point + // The bottom right corner of the rectangle. + if (!this.min && !this.max) { + this.min = min2.clone(); + this.max = max2.clone(); + } else { + this.min.x = Math.min(min2.x, this.min.x); + this.max.x = Math.max(max2.x, this.max.x); + this.min.y = Math.min(min2.y, this.min.y); + this.max.y = Math.max(max2.y, this.max.y); + } + return this; + }, + + // @method getCenter(round?: Boolean): Point + // Returns the center point of the bounds. + getCenter: function (round) { + return toPoint( + (this.min.x + this.max.x) / 2, + (this.min.y + this.max.y) / 2, round); + }, + + // @method getBottomLeft(): Point + // Returns the bottom-left point of the bounds. + getBottomLeft: function () { + return toPoint(this.min.x, this.max.y); + }, + + // @method getTopRight(): Point + // Returns the top-right point of the bounds. + getTopRight: function () { // -> Point + return toPoint(this.max.x, this.min.y); + }, + + // @method getTopLeft(): Point + // Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)). + getTopLeft: function () { + return this.min; // left, top + }, + + // @method getBottomRight(): Point + // Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)). + getBottomRight: function () { + return this.max; // right, bottom + }, + + // @method getSize(): Point + // Returns the size of the given bounds + getSize: function () { + return this.max.subtract(this.min); + }, + + // @method contains(otherBounds: Bounds): Boolean + // Returns `true` if the rectangle contains the given one. + // @alternative + // @method contains(point: Point): Boolean + // Returns `true` if the rectangle contains the given point. + contains: function (obj) { + var min, max; + + if (typeof obj[0] === 'number' || obj instanceof Point) { + obj = toPoint(obj); + } else { + obj = toBounds(obj); + } + + if (obj instanceof Bounds) { + min = obj.min; + max = obj.max; + } else { + min = max = obj; + } + + return (min.x >= this.min.x) && + (max.x <= this.max.x) && + (min.y >= this.min.y) && + (max.y <= this.max.y); + }, + + // @method intersects(otherBounds: Bounds): Boolean + // Returns `true` if the rectangle intersects the given bounds. Two bounds + // intersect if they have at least one point in common. + intersects: function (bounds) { // (Bounds) -> Boolean + bounds = toBounds(bounds); + + var min = this.min, + max = this.max, + min2 = bounds.min, + max2 = bounds.max, + xIntersects = (max2.x >= min.x) && (min2.x <= max.x), + yIntersects = (max2.y >= min.y) && (min2.y <= max.y); + + return xIntersects && yIntersects; + }, + + // @method overlaps(otherBounds: Bounds): Boolean + // Returns `true` if the rectangle overlaps the given bounds. Two bounds + // overlap if their intersection is an area. + overlaps: function (bounds) { // (Bounds) -> Boolean + bounds = toBounds(bounds); + + var min = this.min, + max = this.max, + min2 = bounds.min, + max2 = bounds.max, + xOverlaps = (max2.x > min.x) && (min2.x < max.x), + yOverlaps = (max2.y > min.y) && (min2.y < max.y); + + return xOverlaps && yOverlaps; + }, + + // @method isValid(): Boolean + // Returns `true` if the bounds are properly initialized. + isValid: function () { + return !!(this.min && this.max); + }, + + + // @method pad(bufferRatio: Number): Bounds + // Returns bounds created by extending or retracting the current bounds by a given ratio in each direction. + // For example, a ratio of 0.5 extends the bounds by 50% in each direction. + // Negative values will retract the bounds. + pad: function (bufferRatio) { + var min = this.min, + max = this.max, + heightBuffer = Math.abs(min.x - max.x) * bufferRatio, + widthBuffer = Math.abs(min.y - max.y) * bufferRatio; + + + return toBounds( + toPoint(min.x - heightBuffer, min.y - widthBuffer), + toPoint(max.x + heightBuffer, max.y + widthBuffer)); + }, + + + // @method equals(otherBounds: Bounds): Boolean + // Returns `true` if the rectangle is equivalent to the given bounds. + equals: function (bounds) { + if (!bounds) { return false; } + + bounds = toBounds(bounds); + + return this.min.equals(bounds.getTopLeft()) && + this.max.equals(bounds.getBottomRight()); + }, +}; + + +// @factory L.bounds(corner1: Point, corner2: Point) +// Creates a Bounds object from two corners coordinate pairs. +// @alternative +// @factory L.bounds(points: Point[]) +// Creates a Bounds object from the given array of points. +function toBounds(a, b) { + if (!a || a instanceof Bounds) { + return a; + } + return new Bounds(a, b); +} + +/* + * @class LatLngBounds + * @aka L.LatLngBounds + * + * Represents a rectangular geographical area on a map. + * + * @example + * + * ```js + * var corner1 = L.latLng(40.712, -74.227), + * corner2 = L.latLng(40.774, -74.125), + * bounds = L.latLngBounds(corner1, corner2); + * ``` + * + * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this: + * + * ```js + * map.fitBounds([ + * [40.712, -74.227], + * [40.774, -74.125] + * ]); + * ``` + * + * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range. + * + * Note that `LatLngBounds` does not inherit from Leaflet's `Class` object, + * which means new classes can't inherit from it, and new methods + * can't be added to it with the `include` function. + */ + +function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[]) + if (!corner1) { return; } + + var latlngs = corner2 ? [corner1, corner2] : corner1; + + for (var i = 0, len = latlngs.length; i < len; i++) { + this.extend(latlngs[i]); + } +} + +LatLngBounds.prototype = { + + // @method extend(latlng: LatLng): this + // Extend the bounds to contain the given point + + // @alternative + // @method extend(otherBounds: LatLngBounds): this + // Extend the bounds to contain the given bounds + extend: function (obj) { + var sw = this._southWest, + ne = this._northEast, + sw2, ne2; + + if (obj instanceof LatLng) { + sw2 = obj; + ne2 = obj; + + } else if (obj instanceof LatLngBounds) { + sw2 = obj._southWest; + ne2 = obj._northEast; + + if (!sw2 || !ne2) { return this; } + + } else { + return obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this; + } + + if (!sw && !ne) { + this._southWest = new LatLng(sw2.lat, sw2.lng); + this._northEast = new LatLng(ne2.lat, ne2.lng); + } else { + sw.lat = Math.min(sw2.lat, sw.lat); + sw.lng = Math.min(sw2.lng, sw.lng); + ne.lat = Math.max(ne2.lat, ne.lat); + ne.lng = Math.max(ne2.lng, ne.lng); + } + + return this; + }, + + // @method pad(bufferRatio: Number): LatLngBounds + // Returns bounds created by extending or retracting the current bounds by a given ratio in each direction. + // For example, a ratio of 0.5 extends the bounds by 50% in each direction. + // Negative values will retract the bounds. + pad: function (bufferRatio) { + var sw = this._southWest, + ne = this._northEast, + heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio, + widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio; + + return new LatLngBounds( + new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer), + new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer)); + }, + + // @method getCenter(): LatLng + // Returns the center point of the bounds. + getCenter: function () { + return new LatLng( + (this._southWest.lat + this._northEast.lat) / 2, + (this._southWest.lng + this._northEast.lng) / 2); + }, + + // @method getSouthWest(): LatLng + // Returns the south-west point of the bounds. + getSouthWest: function () { + return this._southWest; + }, + + // @method getNorthEast(): LatLng + // Returns the north-east point of the bounds. + getNorthEast: function () { + return this._northEast; + }, + + // @method getNorthWest(): LatLng + // Returns the north-west point of the bounds. + getNorthWest: function () { + return new LatLng(this.getNorth(), this.getWest()); + }, + + // @method getSouthEast(): LatLng + // Returns the south-east point of the bounds. + getSouthEast: function () { + return new LatLng(this.getSouth(), this.getEast()); + }, + + // @method getWest(): Number + // Returns the west longitude of the bounds + getWest: function () { + return this._southWest.lng; + }, + + // @method getSouth(): Number + // Returns the south latitude of the bounds + getSouth: function () { + return this._southWest.lat; + }, + + // @method getEast(): Number + // Returns the east longitude of the bounds + getEast: function () { + return this._northEast.lng; + }, + + // @method getNorth(): Number + // Returns the north latitude of the bounds + getNorth: function () { + return this._northEast.lat; + }, + + // @method contains(otherBounds: LatLngBounds): Boolean + // Returns `true` if the rectangle contains the given one. + + // @alternative + // @method contains (latlng: LatLng): Boolean + // Returns `true` if the rectangle contains the given point. + contains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean + if (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) { + obj = toLatLng(obj); + } else { + obj = toLatLngBounds(obj); + } + + var sw = this._southWest, + ne = this._northEast, + sw2, ne2; + + if (obj instanceof LatLngBounds) { + sw2 = obj.getSouthWest(); + ne2 = obj.getNorthEast(); + } else { + sw2 = ne2 = obj; + } + + return (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) && + (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng); + }, + + // @method intersects(otherBounds: LatLngBounds): Boolean + // Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common. + intersects: function (bounds) { + bounds = toLatLngBounds(bounds); + + var sw = this._southWest, + ne = this._northEast, + sw2 = bounds.getSouthWest(), + ne2 = bounds.getNorthEast(), + + latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat), + lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng); + + return latIntersects && lngIntersects; + }, + + // @method overlaps(otherBounds: LatLngBounds): Boolean + // Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area. + overlaps: function (bounds) { + bounds = toLatLngBounds(bounds); + + var sw = this._southWest, + ne = this._northEast, + sw2 = bounds.getSouthWest(), + ne2 = bounds.getNorthEast(), + + latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat), + lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng); + + return latOverlaps && lngOverlaps; + }, + + // @method toBBoxString(): String + // Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data. + toBBoxString: function () { + return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(','); + }, + + // @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean + // Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number. + equals: function (bounds, maxMargin) { + if (!bounds) { return false; } + + bounds = toLatLngBounds(bounds); + + return this._southWest.equals(bounds.getSouthWest(), maxMargin) && + this._northEast.equals(bounds.getNorthEast(), maxMargin); + }, + + // @method isValid(): Boolean + // Returns `true` if the bounds are properly initialized. + isValid: function () { + return !!(this._southWest && this._northEast); + } +}; + +// TODO International date line? + +// @factory L.latLngBounds(corner1: LatLng, corner2: LatLng) +// Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle. + +// @alternative +// @factory L.latLngBounds(latlngs: LatLng[]) +// Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds). +function toLatLngBounds(a, b) { + if (a instanceof LatLngBounds) { + return a; + } + return new LatLngBounds(a, b); +} + +/* @class LatLng + * @aka L.LatLng + * + * Represents a geographical point with a certain latitude and longitude. + * + * @example + * + * ``` + * var latlng = L.latLng(50.5, 30.5); + * ``` + * + * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent: + * + * ``` + * map.panTo([50, 30]); + * map.panTo({lon: 30, lat: 50}); + * map.panTo({lat: 50, lng: 30}); + * map.panTo(L.latLng(50, 30)); + * ``` + * + * Note that `LatLng` does not inherit from Leaflet's `Class` object, + * which means new classes can't inherit from it, and new methods + * can't be added to it with the `include` function. + */ + +function LatLng(lat, lng, alt) { + if (isNaN(lat) || isNaN(lng)) { + throw new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')'); + } + + // @property lat: Number + // Latitude in degrees + this.lat = +lat; + + // @property lng: Number + // Longitude in degrees + this.lng = +lng; + + // @property alt: Number + // Altitude in meters (optional) + if (alt !== undefined) { + this.alt = +alt; + } +} + +LatLng.prototype = { + // @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean + // Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number. + equals: function (obj, maxMargin) { + if (!obj) { return false; } + + obj = toLatLng(obj); + + var margin = Math.max( + Math.abs(this.lat - obj.lat), + Math.abs(this.lng - obj.lng)); + + return margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin); + }, + + // @method toString(): String + // Returns a string representation of the point (for debugging purposes). + toString: function (precision) { + return 'LatLng(' + + formatNum(this.lat, precision) + ', ' + + formatNum(this.lng, precision) + ')'; + }, + + // @method distanceTo(otherLatLng: LatLng): Number + // Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines). + distanceTo: function (other) { + return Earth.distance(this, toLatLng(other)); + }, + + // @method wrap(): LatLng + // Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees. + wrap: function () { + return Earth.wrapLatLng(this); + }, + + // @method toBounds(sizeInMeters: Number): LatLngBounds + // Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`. + toBounds: function (sizeInMeters) { + var latAccuracy = 180 * sizeInMeters / 40075017, + lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat); + + return toLatLngBounds( + [this.lat - latAccuracy, this.lng - lngAccuracy], + [this.lat + latAccuracy, this.lng + lngAccuracy]); + }, + + clone: function () { + return new LatLng(this.lat, this.lng, this.alt); + } +}; + + + +// @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng +// Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude). + +// @alternative +// @factory L.latLng(coords: Array): LatLng +// Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead. + +// @alternative +// @factory L.latLng(coords: Object): LatLng +// Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead. + +function toLatLng(a, b, c) { + if (a instanceof LatLng) { + return a; + } + if (isArray(a) && typeof a[0] !== 'object') { + if (a.length === 3) { + return new LatLng(a[0], a[1], a[2]); + } + if (a.length === 2) { + return new LatLng(a[0], a[1]); + } + return null; + } + if (a === undefined || a === null) { + return a; + } + if (typeof a === 'object' && 'lat' in a) { + return new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt); + } + if (b === undefined) { + return null; + } + return new LatLng(a, b, c); +} + +/* + * @namespace CRS + * @crs L.CRS.Base + * Object that defines coordinate reference systems for projecting + * geographical points into pixel (screen) coordinates and back (and to + * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See + * [spatial reference system](https://en.wikipedia.org/wiki/Spatial_reference_system). + * + * Leaflet defines the most usual CRSs by default. If you want to use a + * CRS not defined by default, take a look at the + * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin. + * + * Note that the CRS instances do not inherit from Leaflet's `Class` object, + * and can't be instantiated. Also, new classes can't inherit from them, + * and methods can't be added to them with the `include` function. + */ + +var CRS = { + // @method latLngToPoint(latlng: LatLng, zoom: Number): Point + // Projects geographical coordinates into pixel coordinates for a given zoom. + latLngToPoint: function (latlng, zoom) { + var projectedPoint = this.projection.project(latlng), + scale = this.scale(zoom); + + return this.transformation._transform(projectedPoint, scale); + }, + + // @method pointToLatLng(point: Point, zoom: Number): LatLng + // The inverse of `latLngToPoint`. Projects pixel coordinates on a given + // zoom into geographical coordinates. + pointToLatLng: function (point, zoom) { + var scale = this.scale(zoom), + untransformedPoint = this.transformation.untransform(point, scale); + + return this.projection.unproject(untransformedPoint); + }, + + // @method project(latlng: LatLng): Point + // Projects geographical coordinates into coordinates in units accepted for + // this CRS (e.g. meters for EPSG:3857, for passing it to WMS services). + project: function (latlng) { + return this.projection.project(latlng); + }, + + // @method unproject(point: Point): LatLng + // Given a projected coordinate returns the corresponding LatLng. + // The inverse of `project`. + unproject: function (point) { + return this.projection.unproject(point); + }, + + // @method scale(zoom: Number): Number + // Returns the scale used when transforming projected coordinates into + // pixel coordinates for a particular zoom. For example, it returns + // `256 * 2^zoom` for Mercator-based CRS. + scale: function (zoom) { + return 256 * Math.pow(2, zoom); + }, + + // @method zoom(scale: Number): Number + // Inverse of `scale()`, returns the zoom level corresponding to a scale + // factor of `scale`. + zoom: function (scale) { + return Math.log(scale / 256) / Math.LN2; + }, + + // @method getProjectedBounds(zoom: Number): Bounds + // Returns the projection's bounds scaled and transformed for the provided `zoom`. + getProjectedBounds: function (zoom) { + if (this.infinite) { return null; } + + var b = this.projection.bounds, + s = this.scale(zoom), + min = this.transformation.transform(b.min, s), + max = this.transformation.transform(b.max, s); + + return new Bounds(min, max); + }, + + // @method distance(latlng1: LatLng, latlng2: LatLng): Number + // Returns the distance between two geographical coordinates. + + // @property code: String + // Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`) + // + // @property wrapLng: Number[] + // An array of two numbers defining whether the longitude (horizontal) coordinate + // axis wraps around a given range and how. Defaults to `[-180, 180]` in most + // geographical CRSs. If `undefined`, the longitude axis does not wrap around. + // + // @property wrapLat: Number[] + // Like `wrapLng`, but for the latitude (vertical) axis. + + // wrapLng: [min, max], + // wrapLat: [min, max], + + // @property infinite: Boolean + // If true, the coordinate space will be unbounded (infinite in both axes) + infinite: false, + + // @method wrapLatLng(latlng: LatLng): LatLng + // Returns a `LatLng` where lat and lng has been wrapped according to the + // CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds. + wrapLatLng: function (latlng) { + var lng = this.wrapLng ? wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng, + lat = this.wrapLat ? wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat, + alt = latlng.alt; + + return new LatLng(lat, lng, alt); + }, + + // @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds + // Returns a `LatLngBounds` with the same size as the given one, ensuring + // that its center is within the CRS's bounds. + // Only accepts actual `L.LatLngBounds` instances, not arrays. + wrapLatLngBounds: function (bounds) { + var center = bounds.getCenter(), + newCenter = this.wrapLatLng(center), + latShift = center.lat - newCenter.lat, + lngShift = center.lng - newCenter.lng; + + if (latShift === 0 && lngShift === 0) { + return bounds; + } + + var sw = bounds.getSouthWest(), + ne = bounds.getNorthEast(), + newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift), + newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift); + + return new LatLngBounds(newSw, newNe); + } +}; + +/* + * @namespace CRS + * @crs L.CRS.Earth + * + * Serves as the base for CRS that are global such that they cover the earth. + * Can only be used as the base for other CRS and cannot be used directly, + * since it does not have a `code`, `projection` or `transformation`. `distance()` returns + * meters. + */ + +var Earth = extend({}, CRS, { + wrapLng: [-180, 180], + + // Mean Earth Radius, as recommended for use by + // the International Union of Geodesy and Geophysics, + // see https://rosettacode.org/wiki/Haversine_formula + R: 6371000, + + // distance between two geographical points using spherical law of cosines approximation + distance: function (latlng1, latlng2) { + var rad = Math.PI / 180, + lat1 = latlng1.lat * rad, + lat2 = latlng2.lat * rad, + sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2), + sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2), + a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon, + c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + return this.R * c; + } +}); + +/* + * @namespace Projection + * @projection L.Projection.SphericalMercator + * + * Spherical Mercator projection — the most common projection for online maps, + * used by almost all free and commercial tile providers. Assumes that Earth is + * a sphere. Used by the `EPSG:3857` CRS. + */ + +var earthRadius = 6378137; + +var SphericalMercator = { + + R: earthRadius, + MAX_LATITUDE: 85.0511287798, + + project: function (latlng) { + var d = Math.PI / 180, + max = this.MAX_LATITUDE, + lat = Math.max(Math.min(max, latlng.lat), -max), + sin = Math.sin(lat * d); + + return new Point( + this.R * latlng.lng * d, + this.R * Math.log((1 + sin) / (1 - sin)) / 2); + }, + + unproject: function (point) { + var d = 180 / Math.PI; + + return new LatLng( + (2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d, + point.x * d / this.R); + }, + + bounds: (function () { + var d = earthRadius * Math.PI; + return new Bounds([-d, -d], [d, d]); + })() +}; + +/* + * @class Transformation + * @aka L.Transformation + * + * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d` + * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing + * the reverse. Used by Leaflet in its projections code. + * + * @example + * + * ```js + * var transformation = L.transformation(2, 5, -1, 10), + * p = L.point(1, 2), + * p2 = transformation.transform(p), // L.point(7, 8) + * p3 = transformation.untransform(p2); // L.point(1, 2) + * ``` + */ + + +// factory new L.Transformation(a: Number, b: Number, c: Number, d: Number) +// Creates a `Transformation` object with the given coefficients. +function Transformation(a, b, c, d) { + if (isArray(a)) { + // use array properties + this._a = a[0]; + this._b = a[1]; + this._c = a[2]; + this._d = a[3]; + return; + } + this._a = a; + this._b = b; + this._c = c; + this._d = d; +} + +Transformation.prototype = { + // @method transform(point: Point, scale?: Number): Point + // Returns a transformed point, optionally multiplied by the given scale. + // Only accepts actual `L.Point` instances, not arrays. + transform: function (point, scale) { // (Point, Number) -> Point + return this._transform(point.clone(), scale); + }, + + // destructive transform (faster) + _transform: function (point, scale) { + scale = scale || 1; + point.x = scale * (this._a * point.x + this._b); + point.y = scale * (this._c * point.y + this._d); + return point; + }, + + // @method untransform(point: Point, scale?: Number): Point + // Returns the reverse transformation of the given point, optionally divided + // by the given scale. Only accepts actual `L.Point` instances, not arrays. + untransform: function (point, scale) { + scale = scale || 1; + return new Point( + (point.x / scale - this._b) / this._a, + (point.y / scale - this._d) / this._c); + } +}; + +// factory L.transformation(a: Number, b: Number, c: Number, d: Number) + +// @factory L.transformation(a: Number, b: Number, c: Number, d: Number) +// Instantiates a Transformation object with the given coefficients. + +// @alternative +// @factory L.transformation(coefficients: Array): Transformation +// Expects an coefficients array of the form +// `[a: Number, b: Number, c: Number, d: Number]`. + +function toTransformation(a, b, c, d) { + return new Transformation(a, b, c, d); +} + +/* + * @namespace CRS + * @crs L.CRS.EPSG3857 + * + * The most common CRS for online maps, used by almost all free and commercial + * tile providers. Uses Spherical Mercator projection. Set in by default in + * Map's `crs` option. + */ + +var EPSG3857 = extend({}, Earth, { + code: 'EPSG:3857', + projection: SphericalMercator, + + transformation: (function () { + var scale = 0.5 / (Math.PI * SphericalMercator.R); + return toTransformation(scale, 0.5, -scale, 0.5); + }()) +}); + +var EPSG900913 = extend({}, EPSG3857, { + code: 'EPSG:900913' +}); + +// @namespace SVG; @section +// There are several static functions which can be called without instantiating L.SVG: + +// @function create(name: String): SVGElement +// Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement), +// corresponding to the class name passed. For example, using 'line' will return +// an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement). +function svgCreate(name) { + return document.createElementNS('http://www.w3.org/2000/svg', name); +} + +// @function pointsToPath(rings: Point[], closed: Boolean): String +// Generates a SVG path string for multiple rings, with each ring turning +// into "M..L..L.." instructions +function pointsToPath(rings, closed) { + var str = '', + i, j, len, len2, points, p; + + for (i = 0, len = rings.length; i < len; i++) { + points = rings[i]; + + for (j = 0, len2 = points.length; j < len2; j++) { + p = points[j]; + str += (j ? 'L' : 'M') + p.x + ' ' + p.y; + } + + // closes the ring for polygons; "x" is VML syntax + str += closed ? (Browser.svg ? 'z' : 'x') : ''; + } + + // SVG complains about empty path strings + return str || 'M0 0'; +} + +/* + * @namespace Browser + * @aka L.Browser + * + * A namespace with static properties for browser/feature detection used by Leaflet internally. + * + * @example + * + * ```js + * if (L.Browser.ielt9) { + * alert('Upgrade your browser, dude!'); + * } + * ``` + */ + +var style = document.documentElement.style; + +// @property ie: Boolean; `true` for all Internet Explorer versions (not Edge). +var ie = 'ActiveXObject' in window; + +// @property ielt9: Boolean; `true` for Internet Explorer versions less than 9. +var ielt9 = ie && !document.addEventListener; + +// @property edge: Boolean; `true` for the Edge web browser. +var edge = 'msLaunchUri' in navigator && !('documentMode' in document); + +// @property webkit: Boolean; +// `true` for webkit-based browsers like Chrome and Safari (including mobile versions). +var webkit = userAgentContains('webkit'); + +// @property android: Boolean +// **Deprecated.** `true` for any browser running on an Android platform. +var android = userAgentContains('android'); + +// @property android23: Boolean; **Deprecated.** `true` for browsers running on Android 2 or Android 3. +var android23 = userAgentContains('android 2') || userAgentContains('android 3'); + +/* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */ +var webkitVer = parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit +// @property androidStock: Boolean; **Deprecated.** `true` for the Android stock browser (i.e. not Chrome) +var androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window); + +// @property opera: Boolean; `true` for the Opera browser +var opera = !!window.opera; + +// @property chrome: Boolean; `true` for the Chrome browser. +var chrome = !edge && userAgentContains('chrome'); + +// @property gecko: Boolean; `true` for gecko-based browsers like Firefox. +var gecko = userAgentContains('gecko') && !webkit && !opera && !ie; + +// @property safari: Boolean; `true` for the Safari browser. +var safari = !chrome && userAgentContains('safari'); + +var phantom = userAgentContains('phantom'); + +// @property opera12: Boolean +// `true` for the Opera browser supporting CSS transforms (version 12 or later). +var opera12 = 'OTransition' in style; + +// @property win: Boolean; `true` when the browser is running in a Windows platform +var win = navigator.platform.indexOf('Win') === 0; + +// @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms. +var ie3d = ie && ('transition' in style); + +// @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms. +var webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23; + +// @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms. +var gecko3d = 'MozPerspective' in style; + +// @property any3d: Boolean +// `true` for all browsers supporting CSS transforms. +var any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom; + +// @property mobile: Boolean; `true` for all browsers running in a mobile device. +var mobile = typeof orientation !== 'undefined' || userAgentContains('mobile'); + +// @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device. +var mobileWebkit = mobile && webkit; + +// @property mobileWebkit3d: Boolean +// `true` for all webkit-based browsers in a mobile device supporting CSS transforms. +var mobileWebkit3d = mobile && webkit3d; + +// @property msPointer: Boolean +// `true` for browsers implementing the Microsoft touch events model (notably IE10). +var msPointer = !window.PointerEvent && window.MSPointerEvent; + +// @property pointer: Boolean +// `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx). +var pointer = !!(window.PointerEvent || msPointer); + +// @property touchNative: Boolean +// `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events). +// **This does not necessarily mean** that the browser is running in a computer with +// a touchscreen, it only means that the browser is capable of understanding +// touch events. +var touchNative = 'ontouchstart' in window || !!window.TouchEvent; + +// @property touch: Boolean +// `true` for all browsers supporting either [touch](#browser-touch) or [pointer](#browser-pointer) events. +// Note: pointer events will be preferred (if available), and processed for all `touch*` listeners. +var touch = !window.L_NO_TOUCH && (touchNative || pointer); + +// @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device. +var mobileOpera = mobile && opera; + +// @property mobileGecko: Boolean +// `true` for gecko-based browsers running in a mobile device. +var mobileGecko = mobile && gecko; + +// @property retina: Boolean +// `true` for browsers on a high-resolution "retina" screen or on any screen when browser's display zoom is more than 100%. +var retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1; + +// @property passiveEvents: Boolean +// `true` for browsers that support passive events. +var passiveEvents = (function () { + var supportsPassiveOption = false; + try { + var opts = Object.defineProperty({}, 'passive', { + get: function () { // eslint-disable-line getter-return + supportsPassiveOption = true; + } + }); + window.addEventListener('testPassiveEventSupport', falseFn, opts); + window.removeEventListener('testPassiveEventSupport', falseFn, opts); + } catch (e) { + // Errors can safely be ignored since this is only a browser support test. + } + return supportsPassiveOption; +}()); + +// @property canvas: Boolean +// `true` when the browser supports [``](https://developer.mozilla.org/docs/Web/API/Canvas_API). +var canvas$1 = (function () { + return !!document.createElement('canvas').getContext; +}()); + +// @property svg: Boolean +// `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG). +var svg$1 = !!(document.createElementNS && svgCreate('svg').createSVGRect); + +var inlineSvg = !!svg$1 && (function () { + var div = document.createElement('div'); + div.innerHTML = ''; + return (div.firstChild && div.firstChild.namespaceURI) === 'http://www.w3.org/2000/svg'; +})(); + +// @property vml: Boolean +// `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language). +var vml = !svg$1 && (function () { + try { + var div = document.createElement('div'); + div.innerHTML = ''; + + var shape = div.firstChild; + shape.style.behavior = 'url(#default#VML)'; + + return shape && (typeof shape.adj === 'object'); + + } catch (e) { + return false; + } +}()); + + +// @property mac: Boolean; `true` when the browser is running in a Mac platform +var mac = navigator.platform.indexOf('Mac') === 0; + +// @property mac: Boolean; `true` when the browser is running in a Linux platform +var linux = navigator.platform.indexOf('Linux') === 0; + +function userAgentContains(str) { + return navigator.userAgent.toLowerCase().indexOf(str) >= 0; +} + + +var Browser = { + ie: ie, + ielt9: ielt9, + edge: edge, + webkit: webkit, + android: android, + android23: android23, + androidStock: androidStock, + opera: opera, + chrome: chrome, + gecko: gecko, + safari: safari, + phantom: phantom, + opera12: opera12, + win: win, + ie3d: ie3d, + webkit3d: webkit3d, + gecko3d: gecko3d, + any3d: any3d, + mobile: mobile, + mobileWebkit: mobileWebkit, + mobileWebkit3d: mobileWebkit3d, + msPointer: msPointer, + pointer: pointer, + touch: touch, + touchNative: touchNative, + mobileOpera: mobileOpera, + mobileGecko: mobileGecko, + retina: retina, + passiveEvents: passiveEvents, + canvas: canvas$1, + svg: svg$1, + vml: vml, + inlineSvg: inlineSvg, + mac: mac, + linux: linux +}; + +/* + * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices. + */ + +var POINTER_DOWN = Browser.msPointer ? 'MSPointerDown' : 'pointerdown'; +var POINTER_MOVE = Browser.msPointer ? 'MSPointerMove' : 'pointermove'; +var POINTER_UP = Browser.msPointer ? 'MSPointerUp' : 'pointerup'; +var POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel'; +var pEvent = { + touchstart : POINTER_DOWN, + touchmove : POINTER_MOVE, + touchend : POINTER_UP, + touchcancel : POINTER_CANCEL +}; +var handle = { + touchstart : _onPointerStart, + touchmove : _handlePointer, + touchend : _handlePointer, + touchcancel : _handlePointer +}; +var _pointers = {}; +var _pointerDocListener = false; + +// Provides a touch events wrapper for (ms)pointer events. +// ref https://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890 + +function addPointerListener(obj, type, handler) { + if (type === 'touchstart') { + _addPointerDocListener(); + } + if (!handle[type]) { + console.warn('wrong event specified:', type); + return L.Util.falseFn; + } + handler = handle[type].bind(this, handler); + obj.addEventListener(pEvent[type], handler, false); + return handler; +} + +function removePointerListener(obj, type, handler) { + if (!pEvent[type]) { + console.warn('wrong event specified:', type); + return; + } + obj.removeEventListener(pEvent[type], handler, false); +} + +function _globalPointerDown(e) { + _pointers[e.pointerId] = e; +} + +function _globalPointerMove(e) { + if (_pointers[e.pointerId]) { + _pointers[e.pointerId] = e; + } +} + +function _globalPointerUp(e) { + delete _pointers[e.pointerId]; +} + +function _addPointerDocListener() { + // need to keep track of what pointers and how many are active to provide e.touches emulation + if (!_pointerDocListener) { + // we listen document as any drags that end by moving the touch off the screen get fired there + document.addEventListener(POINTER_DOWN, _globalPointerDown, true); + document.addEventListener(POINTER_MOVE, _globalPointerMove, true); + document.addEventListener(POINTER_UP, _globalPointerUp, true); + document.addEventListener(POINTER_CANCEL, _globalPointerUp, true); + + _pointerDocListener = true; + } +} + +function _handlePointer(handler, e) { + if (e.pointerType === (e.MSPOINTER_TYPE_MOUSE || 'mouse')) { return; } + + e.touches = []; + for (var i in _pointers) { + e.touches.push(_pointers[i]); + } + e.changedTouches = [e]; + + handler(e); +} + +function _onPointerStart(handler, e) { + // IE10 specific: MsTouch needs preventDefault. See #2000 + if (e.MSPOINTER_TYPE_TOUCH && e.pointerType === e.MSPOINTER_TYPE_TOUCH) { + preventDefault(e); + } + _handlePointer(handler, e); +} + +/* + * Extends the event handling code with double tap support for mobile browsers. + * + * Note: currently most browsers fire native dblclick, with only a few exceptions + * (see https://github.com/Leaflet/Leaflet/issues/7012#issuecomment-595087386) + */ + +function makeDblclick(event) { + // in modern browsers `type` cannot be just overridden: + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only + var newEvent = {}, + prop, i; + for (i in event) { + prop = event[i]; + newEvent[i] = prop && prop.bind ? prop.bind(event) : prop; + } + event = newEvent; + newEvent.type = 'dblclick'; + newEvent.detail = 2; + newEvent.isTrusted = false; + newEvent._simulated = true; // for debug purposes + return newEvent; +} + +var delay = 200; +function addDoubleTapListener(obj, handler) { + // Most browsers handle double tap natively + obj.addEventListener('dblclick', handler); + + // On some platforms the browser doesn't fire native dblclicks for touch events. + // It seems that in all such cases `detail` property of `click` event is always `1`. + // So here we rely on that fact to avoid excessive 'dblclick' simulation when not needed. + var last = 0, + detail; + function simDblclick(e) { + if (e.detail !== 1) { + detail = e.detail; // keep in sync to avoid false dblclick in some cases + return; + } + + if (e.pointerType === 'mouse' || + (e.sourceCapabilities && !e.sourceCapabilities.firesTouchEvents)) { + + return; + } + + // When clicking on an , the browser generates a click on its + //