From 005c299dee6ee471507d117962707a0ce0dfdf54 Mon Sep 17 00:00:00 2001
From: Tobias Klika
Date: Wed, 28 Aug 2019 20:17:49 +0200
Subject: [PATCH] start uNesting package
---
.gitattributes | 63 +
.gitignore | 362 +
UmbracoPackages.sln | 25 +
.../directives/ct-tabbed-content.html | 40 +
.../directives/cttabbedcontent.directive.js | 181 +
.../directives/ctvaltab.directive.js | 36 +
.../App_Plugins/Cultiv.Tabify/interceptor.js | 23 +
.../Cultiv.Tabify/package.manifest | 10 +
.../App_Plugins/Cultiv.Tabify/tabify.css | 145 +
.../App_Plugins/Cultiv.Tabify/tabify.html | 5 +
.../ModelsBuilder/modelsbuilder.controller.js | 38 +
.../ModelsBuilder/modelsbuilder.html | 44 +
.../ModelsBuilder/modelsbuilder.resource.js | 23 +
.../ModelsBuilder/package.manifest | 18 +
.../App_Plugins/OsmMaps/OsmMaps.controller.js | 81 +
.../App_Plugins/OsmMaps/OsmMaps.html | 25 +
.../OsmMaps/assets/css/osmmaps.css | 11 +
.../assets/leaflet/images/layers-2x.png | Bin 0 -> 2898 bytes
.../OsmMaps/assets/leaflet/images/layers.png | Bin 0 -> 1502 bytes
.../assets/leaflet/images/marker-icon-2x.png | Bin 0 -> 4033 bytes
.../assets/leaflet/images/marker-icon.png | Bin 0 -> 1747 bytes
.../assets/leaflet/images/marker-shadow.png | Bin 0 -> 797 bytes
.../OsmMaps/assets/leaflet/leaflet-src.js | 9168 ++++
.../OsmMaps/assets/leaflet/leaflet.css | 479 +
.../OsmMaps/assets/leaflet/leaflet.js | 9 +
.../App_Plugins/OsmMaps/langs/da-dk.js | 5 +
.../App_Plugins/OsmMaps/langs/de-de.js | 5 +
.../App_Plugins/OsmMaps/langs/en-gb.js | 5 +
.../App_Plugins/OsmMaps/langs/en-us.js | 5 +
.../App_Plugins/OsmMaps/langs/es-es.js | 5 +
.../App_Plugins/OsmMaps/langs/fr-fr.js | 5 +
.../App_Plugins/OsmMaps/langs/he-il.js | 5 +
.../App_Plugins/OsmMaps/langs/it-it.js | 5 +
.../App_Plugins/OsmMaps/langs/ja-jp.js | 5 +
.../App_Plugins/OsmMaps/langs/ko-kr.js | 5 +
.../App_Plugins/OsmMaps/langs/nb-no.js | 5 +
.../App_Plugins/OsmMaps/langs/nl-nl.js | 5 +
.../App_Plugins/OsmMaps/langs/pl-pl.js | 5 +
.../App_Plugins/OsmMaps/langs/pt-br.js | 5 +
.../App_Plugins/OsmMaps/langs/ru-ru.js | 5 +
.../App_Plugins/OsmMaps/langs/sv-se.js | 5 +
.../App_Plugins/OsmMaps/langs/zh-cn.js | 5 +
.../App_Plugins/OsmMaps/package.manifest | 45 +
.../StarterKit/StarterKitHelp.Controller.js | 34 +
.../backoffice/tours/create-content.json | 319 +
.../backoffice/tours/data-structure.json | 237 +
.../App_Plugins/StarterKit/lang/en-GB.xml | 6 +
.../App_Plugins/StarterKit/lang/en-US.xml | 6 +
.../App_Plugins/StarterKit/lessons.service.js | 20 +
.../App_Plugins/StarterKit/package.manifest | 15 +
.../StarterKit/starterkithelp.html | 36 +
.../medialibrary/uploadimages.controller.js | 56 +
.../views/medialibrary/uploadimages.html | 31 +
.../tours/views/validatetext.controller.js | 25 +
.../StarterKit/tours/views/validatetext.html | 32 +
.../App_Plugins/brothers.uNesting/_nc.js | 576 +
.../brothers.uNesting/interceptor.js | 17 +
.../brothers.uNesting/package.manifest | 9 +
.../brothers.uNesting/uNesting.controller.js | 26 +
.../brothers.uNesting/uNesting.css | 159 +
.../brothers.uNesting/uNesting.html | 94 +
UmbracoPackages/Global.asax | 1 +
UmbracoPackages/Properties/AssemblyInfo.cs | 35 +
UmbracoPackages/Umbraco/Config/Lang/cs.xml | 972 +
UmbracoPackages/Umbraco/Config/Lang/da.xml | 1613 +
UmbracoPackages/Umbraco/Config/Lang/de.xml | 958 +
UmbracoPackages/Umbraco/Config/Lang/en.xml | 2131 +
UmbracoPackages/Umbraco/Config/Lang/en_us.xml | 2145 +
UmbracoPackages/Umbraco/Config/Lang/es.xml | 1652 +
UmbracoPackages/Umbraco/Config/Lang/fr.xml | 1858 +
UmbracoPackages/Umbraco/Config/Lang/he.xml | 868 +
UmbracoPackages/Umbraco/Config/Lang/it.xml | 859 +
UmbracoPackages/Umbraco/Config/Lang/ja.xml | 1110 +
UmbracoPackages/Umbraco/Config/Lang/ko.xml | 849 +
UmbracoPackages/Umbraco/Config/Lang/nb.xml | 942 +
UmbracoPackages/Umbraco/Config/Lang/nl.xml | 1407 +
UmbracoPackages/Umbraco/Config/Lang/pl.xml | 1485 +
UmbracoPackages/Umbraco/Config/Lang/pt.xml | 839 +
UmbracoPackages/Umbraco/Config/Lang/ru.xml | 1845 +
UmbracoPackages/Umbraco/Config/Lang/sv.xml | 949 +
UmbracoPackages/Umbraco/Config/Lang/tr.xml | 961 +
UmbracoPackages/Umbraco/Config/Lang/zh.xml | 1264 +
UmbracoPackages/Umbraco/Config/Lang/zh_tw.xml | 1244 +
.../Umbraco/Js/UmbracoSpeechBubbleBackEnd.js | 68 +
UmbracoPackages/Umbraco/Js/app.js | 95 +
UmbracoPackages/Umbraco/Js/dualSelectBox.js | 48 +
UmbracoPackages/Umbraco/Js/guiFunctions.js | 88 +
UmbracoPackages/Umbraco/Js/init.js | 164 +
UmbracoPackages/Umbraco/Js/install.loader.js | 19 +
UmbracoPackages/Umbraco/Js/installer.app.js | 7 +
UmbracoPackages/Umbraco/Js/routes.js | 239 +
.../Umbraco/Js/umbraco.controllers.js | 23771 ++++++++++
.../Umbraco/Js/umbraco.directives.js | 16496 +++++++
UmbracoPackages/Umbraco/Js/umbraco.filters.js | 175 +
.../Umbraco/Js/umbraco.installer.js | 422 +
.../Umbraco/Js/umbraco.interceptors.js | 213 +
UmbracoPackages/Umbraco/Js/umbraco.preview.js | 190 +
.../Umbraco/Js/umbraco.resources.js | 5357 +++
.../Umbraco/Js/umbraco.services.js | 12110 ++++++
.../Umbraco/Js/umbracoCheckKeys.js | 102 +
UmbracoPackages/Umbraco/Js/web.config | 8 +
.../Templates/Breadcrumb.cshtml | 26 +
.../Templates/EditProfile.cshtml | 65 +
.../PartialViewMacros/Templates/Empty.cshtml | 1 +
.../Templates/Gallery.cshtml | 51 +
.../ListAncestorsFromCurrentPage.cshtml | 26 +
.../ListChildPagesFromChangeableSource.cshtml | 33 +
.../ListChildPagesFromCurrentPage.cshtml | 24 +
.../ListChildPagesOrderedByDate.cshtml | 23 +
.../ListChildPagesOrderedByName.cshtml | 23 +
.../ListChildPagesOrderedByProperty.cshtml | 31 +
.../ListChildPagesWithDoctype.cshtml | 22 +
.../ListDescendantsFromCurrentPage.cshtml | 68 +
.../ListImagesFromMediaFolder.cshtml | 34 +
.../PartialViewMacros/Templates/Login.cshtml | 42 +
.../Templates/LoginStatus.cshtml | 32 +
.../Templates/MultinodeTree-picker.cshtml | 25 +
.../Templates/Navigation.cshtml | 22 +
.../Templates/RegisterMember.cshtml | 103 +
.../Templates/SiteMap.cshtml | 43 +
.../Umbraco/Views/AuthorizeUpgrade.cshtml | 75 +
UmbracoPackages/Umbraco/Views/Default.cshtml | 136 +
.../Umbraco/Views/Preview/Index.cshtml | 72 +
.../Umbraco/Views/common/dashboard.html | 37 +
.../Views/common/drawers/help/help.html | 134 +
.../compositions/compositions.html | 130 +
.../common/infiniteeditors/copy/copy.html | 95 +
.../datatypepicker/datatypepicker.html | 146 +
.../datatypesettings/datatypesettings.html | 74 +
.../common/infiniteeditors/embed/embed.html | 74 +
.../iconpicker/iconpicker.html | 87 +
.../insertcodesnippet/insertcodesnippet.html | 58 +
.../insertfield/insertfield.html | 100 +
.../itempicker/itempicker.html | 56 +
.../linkpicker/linkpicker.html | 138 +
.../macropicker/macropicker.html | 100 +
.../mediapicker/mediapicker.html | 192 +
.../membergrouppicker/membergrouppicker.html | 50 +
.../common/infiniteeditors/move/move.html | 85 +
.../nodepermissions/nodepermissions.html | 52 +
.../propertysettings/propertysettings.html | 202 +
.../querybuilder/querybuilder.html | 207 +
.../infiniteeditors/rollback/rollback.html | 105 +
.../sectionpicker/sectionpicker.html | 55 +
.../templatesections/templatesections.html | 106 +
.../treepicker/treepicker.html | 113 +
.../usergrouppicker/usergrouppicker.html | 101 +
.../userpicker/userpicker.html | 91 +
.../Umbraco/Views/common/legacy.html | 3 +
.../Umbraco/Views/common/login.html | 3 +
.../notifications/confirmroutechange.html | 7 +
.../notifications/confirmunpublish.html | 6 +
.../common/overlays/default/default.html | 1 +
.../overlays/itempicker/itempicker.html | 49 +
.../keyboardshortcuts/keyboardshortcuts.html | 19 +
.../logviewersearch/logviewersearch.html | 11 +
.../mediatypepicker/mediatypepicker.html | 16 +
.../Views/common/overlays/user/user.html | 139 +
.../Views/common/overlays/ysod/ysod.html | 27 +
.../nodename/nodename.html | 29 +
.../doctypename/doctypename.html | 29 +
.../propertyname/propertyname.html | 29 +
.../tabname/tabname.html | 29 +
.../foldername/foldername.html | 29 +
.../uploadimages/uploadimages.html | 29 +
.../templatetree/templatetree.html | 22 +
.../application/umb-app-header.html | 50 +
.../components/application/umb-backdrop.html | 19 +
.../application/umb-contextmenu.html | 20 +
.../components/application/umb-login.html | 267 +
.../application/umb-navigation.html | 53 +
.../components/application/umb-search.html | 34 +
.../components/application/umb-sections.html | 33 +
.../components/application/umb-tour.html | 86 +
.../umbdrawer/umb-drawer-content.html | 1 +
.../umbdrawer/umb-drawer-footer.html | 1 +
.../umbdrawer/umb-drawer-header.html | 4 +
.../umbdrawer/umb-drawer-view.html | 1 +
.../application/umbdrawer/umb-drawer.html | 3 +
.../umbtour/umb-tour-step-content.html | 4 +
.../umbtour/umb-tour-step-counter.html | 1 +
.../umbtour/umb-tour-step-footer.html | 1 +
.../umbtour/umb-tour-step-header.html | 4 +
.../application/umbtour/umb-tour-step.html | 10 +
.../components/buttons/umb-button-group.html | 37 +
.../Views/components/buttons/umb-button.html | 34 +
.../components/buttons/umb-toggle-group.html | 13 +
.../Views/components/buttons/umb-toggle.html | 19 +
.../Views/components/content/edit.html | 99 +
.../content/umb-content-node-info.html | 177 +
.../content/umb-tabbed-content.html | 36 +
.../content/umb-variant-content-editors.html | 23 +
.../content/umb-variant-content.html | 44 +
.../umb-variant-notification-list.html | 8 +
.../components/content/umb-variant-state.html | 6 +
.../umb-editor-sub-header-content-left.html | 1 +
.../umb-editor-sub-header-content-right.html | 1 +
.../umb-editor-sub-header-section.html | 1 +
.../subheader/umb-editor-sub-header.html | 6 +
.../components/editor/umb-breadcrumbs.html | 15 +
.../editor/umb-editor-container.html | 11 +
.../editor/umb-editor-content-header.html | 90 +
.../umb-editor-footer-content-left.html | 1 +
.../umb-editor-footer-content-right.html | 1 +
.../components/editor/umb-editor-footer.html | 5 +
.../components/editor/umb-editor-header.html | 90 +
.../components/editor/umb-editor-menu.html | 20 +
.../editor/umb-editor-navigation-item.html | 19 +
.../editor/umb-editor-navigation.html | 42 +
.../editor/umb-editor-sub-view.html | 11 +
.../editor/umb-editor-sub-views.html | 17 +
.../components/editor/umb-editor-view.html | 7 +
.../Views/components/editor/umb-editor.html | 5 +
.../Views/components/editor/umb-editors.html | 25 +
.../Views/components/forms/umb-checkbox.html | 19 +
.../components/forms/umb-radiobutton.html | 13 +
.../Views/components/grid/grid-rte.html | 3 +
.../html/umb-box/umb-box-content.html | 1 +
.../html/umb-box/umb-box-header.html | 13 +
.../components/html/umb-box/umb-box.html | 1 +
.../components/html/umb-control-group.html | 14 +
.../Views/components/html/umb-pane.html | 3 +
.../Views/components/html/umb-panel.html | 3 +
.../components/imaging/umb-image-crop.html | 25 +
.../components/imaging/umb-image-gravity.html | 14 +
.../imaging/umb-image-thumbnail.html | 5 +
.../components/media/umb-media-node-info.html | 59 +
.../member/umb-membergroup-node-info.html | 30 +
.../notifications/umb-notifications.html | 24 +
.../overlays/umb-overlay-backdrop.html | 1 +
.../components/overlays/umb-overlay.html | 85 +
.../property/umb-property-editor.html | 5 +
.../property/umb-property-group.html | 0
.../components/property/umb-property.html | 28 +
.../components/tabs/umb-tab-content.html | 3 +
.../Views/components/tabs/umb-tabs-nav.html | 14 +
.../components/tags/umb-tags-editor.html | 34 +
.../Views/components/tree/umb-tree-item.html | 24 +
.../components/tree/umb-tree-search-box.html | 13 +
.../tree/umb-tree-search-results.html | 26 +
.../Views/components/tree/umb-tree.html | 53 +
.../umbcontextdialog/umb-context-dialog.html | 6 +
.../Umbraco/Views/components/umb-avatar.html | 7 +
.../Umbraco/Views/components/umb-badge.html | 1 +
.../Views/components/umb-checkmark.html | 1 +
.../Views/components/umb-child-selector.html | 37 +
.../Views/components/umb-color-swatches.html | 15 +
.../Views/components/umb-confirm-action.html | 16 +
.../Umbraco/Views/components/umb-confirm.html | 21 +
.../Views/components/umb-content-grid.html | 42 +
.../components/umb-date-time-picker.html | 12 +
.../Views/components/umb-dropdown-item.html | 1 +
.../Views/components/umb-dropdown.html | 1 +
.../Views/components/umb-empty-state.html | 9 +
.../Views/components/umb-folder-grid.html | 18 +
.../Views/components/umb-generate-alias.html | 12 +
.../Views/components/umb-grid-selector.html | 38 +
.../Views/components/umb-groups-builder.html | 288 +
.../umb-keyboard-shortcuts-overview.html | 19 +
.../Views/components/umb-layout-selector.html | 22 +
.../Views/components/umb-lightbox.html | 22 +
.../components/umb-list-view-layout.html | 3 +
.../components/umb-list-view-settings.html | 43 +
.../Views/components/umb-load-indicator.html | 5 +
.../Views/components/umb-locked-field.html | 51 +
.../Views/components/umb-media-grid.html | 31 +
.../Views/components/umb-mini-list-view.html | 103 +
.../Views/components/umb-node-preview.html | 21 +
.../Views/components/umb-pagination.html | 26 +
.../Views/components/umb-progress-bar.html | 3 +
.../Views/components/umb-progress-circle.html | 7 +
.../Umbraco/Views/components/umb-table.html | 78 +
.../Umbraco/Views/components/umb-tooltip.html | 1 +
.../components/upload/umb-file-dropzone.html | 110 +
.../upload/umb-property-file-upload.html | 62 +
.../components/users/change-password.html | 73 +
.../users/umb-user-group-preview.html | 46 +
.../components/users/umb-user-preview.html | 21 +
.../Views/content/apps/content/content.html | 8 +
.../Umbraco/Views/content/apps/info/info.html | 4 +
.../Views/content/apps/listview/listview.html | 7 +
.../Umbraco/Views/content/assigndomain.html | 108 +
.../Umbraco/Views/content/copy.html | 97 +
.../Umbraco/Views/content/create.html | 74 +
.../Views/content/createblueprint.html | 46 +
.../Umbraco/Views/content/delete.html | 15 +
.../Umbraco/Views/content/edit.html | 13 +
.../Views/content/emptyrecyclebin.html | 17 +
.../Umbraco/Views/content/move.html | 86 +
.../Umbraco/Views/content/notify.html | 45 +
.../Views/content/overlays/publish.html | 74 +
.../content/overlays/publishdescendants.html | 79 +
.../Umbraco/Views/content/overlays/save.html | 81 +
.../Views/content/overlays/schedule.html | 185 +
.../Views/content/overlays/sendtopublish.html | 64 +
.../Views/content/overlays/unpublish.html | 66 +
.../Umbraco/Views/content/protect.html | 186 +
.../Umbraco/Views/content/recyclebin.html | 20 +
.../Umbraco/Views/content/restore.html | 93 +
.../Umbraco/Views/content/rights.html | 127 +
.../Umbraco/Views/content/sort.html | 79 +
.../Umbraco/Views/content/umbpreview.html | 9 +
.../Views/contentblueprints/create.html | 41 +
.../Views/contentblueprints/delete.html | 12 +
.../Umbraco/Views/contentblueprints/edit.html | 10 +
.../Views/contentblueprints/intro.html | 39 +
.../Views/dashboard/ChangePassword.html | 18 +
.../dashboard/content/overlays/delete.html | 11 +
.../dashboard/content/overlays/disable.html | 5 +
.../Views/dashboard/content/redirecturls.html | 125 +
.../default/StartupDashboardIntro.html | 71 +
.../default/StartupDashboardKits.html | 15 +
.../default/StartupDashboardLastEdits.html | 0
.../default/StartupDashboardVideos.html | 18 +
.../Views/dashboard/default/ourumbraco.jpg | Bin 0 -> 25651 bytes
.../Views/dashboard/default/umbracotv.jpg | Bin 0 -> 49817 bytes
.../dashboard/forms/formsdashboardintro.html | 36 +
.../dashboard/media/desktopmediauploader.html | 38 +
.../dashboard/media/mediadashboardintro.html | 13 +
.../dashboard/media/mediadashboardvideos.html | 20 +
.../dashboard/media/mediafolderbrowser.html | 3 +
.../members/membersdashboardintro.html | 10 +
.../members/membersdashboardvideos.html | 24 +
.../dashboard/settings/examinemanagement.html | 422 +
.../settings/examinemanagementresults.html | 18 +
.../Views/dashboard/settings/healthcheck.html | 156 +
.../Views/dashboard/settings/nucache.html | 54 +
.../overlays/examinemanagement.rebuild.html | 12 +
.../settings/overlays/nucache.rebuild.html | 7 +
.../settings/overlays/nucache.reload.html | 7 +
.../Views/dashboard/settings/profiler.html | 41 +
.../dashboard/settings/publishedstatus.html | 11 +
.../settings/settingsdashboardintro.html | 15 +
.../settings/settingsdashboardvideos.html | 20 +
.../Umbraco/Views/datatypes/create.html | 48 +
.../Umbraco/Views/datatypes/delete.html | 32 +
.../Umbraco/Views/datatypes/edit.html | 81 +
.../Umbraco/Views/datatypes/move.html | 55 +
.../Umbraco/Views/datatypes/rename.html | 24 +
.../Umbraco/Views/dictionary/create.html | 19 +
.../Umbraco/Views/dictionary/delete.html | 12 +
.../Umbraco/Views/dictionary/edit.html | 48 +
.../Umbraco/Views/dictionary/list.html | 48 +
.../Umbraco/Views/documenttypes/copy.html | 55 +
.../Umbraco/Views/documenttypes/create.html | 109 +
.../Umbraco/Views/documenttypes/delete.html | 43 +
.../Umbraco/Views/documenttypes/edit.html | 80 +
.../Umbraco/Views/documenttypes/export.html | 10 +
.../documenttypes/importdocumenttype.html | 53 +
.../Umbraco/Views/documenttypes/move.html | 55 +
.../Umbraco/Views/documenttypes/property.html | 4 +
.../Views/documenttypes/propertygroup.html | 0
.../Umbraco/Views/documenttypes/rename.html | 24 +
.../documenttypes/views/design/design.html | 4 +
.../views/listview/listview.html | 23 +
.../views/permissions/permissions.html | 77 +
.../views/templates/templates.html | 42 +
.../Umbraco/Views/languages/edit.html | 112 +
.../Views/languages/overlays/delete.html | 9 +
.../Umbraco/Views/languages/overview.html | 81 +
.../Umbraco/Views/logviewer/overview.html | 114 +
.../Umbraco/Views/logviewer/search.html | 231 +
.../Umbraco/Views/macros/create.html | 30 +
.../Umbraco/Views/macros/delete.html | 10 +
.../Umbraco/Views/macros/edit.html | 30 +
.../macros/infiniteeditors/parameter.html | 58 +
.../Views/macros/views/parameters.html | 33 +
.../Umbraco/Views/macros/views/settings.html | 61 +
.../Views/media/apps/content/content.html | 16 +
.../Umbraco/Views/media/apps/info/info.html | 4 +
.../Views/media/apps/listview/listview.html | 7 +
.../Umbraco/Views/media/create.html | 52 +
.../Umbraco/Views/media/delete.html | 10 +
UmbracoPackages/Umbraco/Views/media/edit.html | 77 +
.../Umbraco/Views/media/emptyrecyclebin.html | 19 +
UmbracoPackages/Umbraco/Views/media/move.html | 77 +
.../Umbraco/Views/media/recyclebin.html | 21 +
.../Umbraco/Views/media/restore.html | 87 +
UmbracoPackages/Umbraco/Views/media/sort.html | 79 +
.../Umbraco/Views/mediatypes/copy.html | 55 +
.../Umbraco/Views/mediatypes/create.html | 55 +
.../Umbraco/Views/mediatypes/delete.html | 37 +
.../Umbraco/Views/mediatypes/edit.html | 79 +
.../Umbraco/Views/mediatypes/move.html | 56 +
.../Umbraco/Views/mediatypes/rename.html | 23 +
.../Views/mediatypes/views/design/design.html | 4 +
.../mediatypes/views/listview/listview.html | 18 +
.../views/permissions/permissions.html | 36 +
.../Umbraco/Views/member/create.html | 28 +
.../Umbraco/Views/member/delete.html | 12 +
.../Umbraco/Views/member/edit.html | 79 +
.../Umbraco/Views/member/list.html | 30 +
.../Views/member/listview/listview.html | 7 +
.../Umbraco/Views/membergroups/delete.html | 12 +
.../Umbraco/Views/membergroups/edit.html | 49 +
.../Umbraco/Views/membertypes/create.html | 47 +
.../Umbraco/Views/membertypes/delete.html | 24 +
.../Umbraco/Views/membertypes/edit.html | 70 +
.../Umbraco/Views/membertypes/move.html | 11 +
.../membertypes/views/design/design.html | 5 +
.../Views/partialviewmacros/create.html | 86 +
.../Views/partialviewmacros/delete.html | 12 +
.../Umbraco/Views/partialviewmacros/edit.html | 79 +
.../Umbraco/Views/partialviews/create.html | 76 +
.../Umbraco/Views/partialviews/delete.html | 19 +
.../Umbraco/Views/partialviews/edit.html | 87 +
.../Views/prevalueeditors/boolean.html | 6 +
.../Views/prevalueeditors/colorpicker.html | 14 +
.../prevalueeditors/contenttypepicker.html | 23 +
.../Views/prevalueeditors/decimal.html | 13 +
.../Umbraco/Views/prevalueeditors/hidden.html | 1 +
.../Views/prevalueeditors/imagepicker.html | 22 +
.../Views/prevalueeditors/mediapicker.html | 26 +
.../Views/prevalueeditors/multivalues.html | 21 +
.../Views/prevalueeditors/nodetype.html | 5 +
.../Umbraco/Views/prevalueeditors/number.html | 12 +
.../prevalueeditors/radiobuttonlist.html | 15 +
.../prevalueeditors/readonlykeyvalues.html | 7 +
.../Views/prevalueeditors/requiredfield.html | 12 +
.../Views/prevalueeditors/textarea.html | 1 +
.../Views/prevalueeditors/textstring.html | 1 +
.../prevalueeditors/textstringlimited.html | 17 +
.../Views/prevalueeditors/treepicker.html | 26 +
.../Views/prevalueeditors/treesource.html | 81 +
.../Views/prevalueeditors/valuetype.html | 9 +
.../propertyeditors/boolean/boolean.html | 10 +
.../changepassword/changepassword.html | 6 +
.../checkboxlist/checkboxlist.html | 7 +
.../colorpicker/colorpicker.html | 17 +
.../colorpicker/colorpicker.prevalues.html | 28 +
.../contentpicker/contentpicker.html | 80 +
.../datepicker/datepicker.html | 47 +
.../propertyeditors/decimal/decimal.html | 16 +
.../dropdownFlexible/dropdownFlexible.html | 21 +
.../Views/propertyeditors/email/email.html | 17 +
.../entitypicker/entitypicker.html | 19 +
.../fileupload/fileupload.html | 7 +
.../folderbrowser/folderbrowser.html | 3 +
.../grid/config/grid.default.config.js | 363 +
.../propertyeditors/grid/dialogs/config.html | 61 +
.../grid/dialogs/editconfig.html | 60 +
.../grid/dialogs/layoutconfig.html | 166 +
.../grid/dialogs/rowconfig.html | 151 +
.../grid/dialogs/rowdeleteconfirm.html | 54 +
.../propertyeditors/grid/editors/embed.html | 10 +
.../propertyeditors/grid/editors/error.html | 2 +
.../propertyeditors/grid/editors/macro.html | 16 +
.../propertyeditors/grid/editors/media.html | 16 +
.../propertyeditors/grid/editors/rte.html | 11 +
.../grid/editors/textstring.html | 9 +
.../Views/propertyeditors/grid/grid.html | 306 +
.../propertyeditors/grid/grid.prevalues.html | 161 +
.../idwithguid/idwithguid.html | 4 +
.../imagecropper/imagecropper.html | 71 +
.../imagecropper/imagecropper.prevalues.html | 74 +
.../propertyeditors/integer/integer.html | 17 +
.../bulkActionPermissions.prevalues.html | 47 +
.../listview/includeproperties.prevalues.html | 58 +
.../listview/layouts.prevalues.html | 50 +
.../listview/layouts/grid/grid.html | 80 +
.../listview/layouts/list/list.html | 74 +
.../propertyeditors/listview/listview.html | 242 +
.../listview/orderDirection.prevalues.html | 16 +
.../listview/overlays/delete.html | 11 +
.../listview/overlays/listviewpublish.html | 47 +
.../listview/overlays/listviewunpublish.html | 46 +
.../listview/sortby.prevalues.html | 4 +
.../macrocontainer/macrocontainer.html | 33 +
.../macrocontainer/macrolist.prevalues.html | 7 +
.../markdowneditor/markdowneditor.html | 8 +
.../mediapicker/mediapicker.html | 59 +
.../membergrouppicker/membergrouppicker.html | 21 +
.../membergroups/membergroups.html | 11 +
.../memberpicker/memberpicker.html | 21 +
.../multipletextbox/multipletextbox.html | 31 +
.../multiurlpicker/multiurlpicker.html | 77 +
.../nestedcontent.doctypepicker.html | 63 +
.../nestedcontent/nestedcontent.editor.html | 13 +
.../nestedcontent/nestedcontent.html | 57 +
.../radiobuttons/radiobuttons.html | 7 +
.../readonlyvalue/readonlyvalue.html | 3 +
.../relatedlinks/relatedlinks.html | 91 +
.../Views/propertyeditors/rte/codeeditor.html | 41 +
.../Views/propertyeditors/rte/rte.html | 6 +
.../propertyeditors/rte/rte.prevalues.html | 51 +
.../sensitivevalue/sensitivevalue.html | 5 +
.../Views/propertyeditors/slider/slider.html | 12 +
.../Views/propertyeditors/tags/tags.html | 10 +
.../propertyeditors/tags/tags.prevalues.html | 10 +
.../templatepicker/templatepicker.html | 3 +
.../propertyeditors/textarea/textarea.html | 18 +
.../propertyeditors/textbox/textbox.html | 28 +
.../propertyeditors/urllist/urllist.html | 11 +
.../validationtest/validationtest.html | 17 +
.../Umbraco/Views/relationtypes/create.html | 55 +
.../Umbraco/Views/relationtypes/delete.html | 12 +
.../Umbraco/Views/relationtypes/edit.html | 33 +
.../relationtypes/views/relationType.html | 40 +
.../Views/relationtypes/views/relations.html | 28 +
.../Umbraco/Views/scripts/create.html | 52 +
.../Umbraco/Views/scripts/delete.html | 12 +
.../Umbraco/Views/scripts/edit.html | 62 +
.../Umbraco/Views/stylesheets/create.html | 58 +
.../Umbraco/Views/stylesheets/delete.html | 12 +
.../Umbraco/Views/stylesheets/edit.html | 56 +
.../richtextrule/richtextrule.html | 73 +
.../Views/stylesheets/views/code/code.html | 9 +
.../Views/stylesheets/views/rules/rules.html | 33 +
.../Umbraco/Views/templates/delete.html | 19 +
.../Umbraco/Views/templates/edit.html | 136 +
.../Umbraco/Views/users/group.html | 209 +
.../Umbraco/Views/users/overview.html | 24 +
UmbracoPackages/Umbraco/Views/users/user.html | 71 +
.../Views/users/views/groups/groups.html | 127 +
.../Views/users/views/user/details.html | 412 +
.../Views/users/views/users/users.html | 540 +
UmbracoPackages/Umbraco/Views/web.config | 49 +
.../Umbraco/assets/css/canvasdesigner.css | 1 +
.../Umbraco/assets/css/installer.css | 1 +
.../Umbraco/assets/css/nonodes.style.min.css | 1 +
.../Umbraco/assets/css/umbraco.css | 1 +
.../assets/fonts/helveticons/helveticons.eot | Bin 0 -> 117324 bytes
.../assets/fonts/helveticons/helveticons.svg | 1 +
.../assets/fonts/helveticons/helveticons.ttf | Bin 0 -> 117160 bytes
.../assets/fonts/helveticons/helveticons.woff | Bin 0 -> 294540 bytes
.../assets/fonts/lato/LatoLatin-Black.woff | Bin 0 -> 70460 bytes
.../assets/fonts/lato/LatoLatin-Black.woff2 | Bin 0 -> 43456 bytes
.../fonts/lato/LatoLatin-BlackItalic.woff | Bin 0 -> 72372 bytes
.../fonts/lato/LatoLatin-BlackItalic.woff2 | Bin 0 -> 44316 bytes
.../assets/fonts/lato/LatoLatin-Bold.woff | Bin 0 -> 72376 bytes
.../assets/fonts/lato/LatoLatin-Bold.woff2 | Bin 0 -> 44380 bytes
.../fonts/lato/LatoLatin-BoldItalic.woff | Bin 0 -> 73700 bytes
.../fonts/lato/LatoLatin-BoldItalic.woff2 | Bin 0 -> 45036 bytes
.../assets/fonts/lato/LatoLatin-Italic.woff | Bin 0 -> 74708 bytes
.../assets/fonts/lato/LatoLatin-Italic.woff2 | Bin 0 -> 45388 bytes
.../assets/fonts/lato/LatoLatin-Light.woff | Bin 0 -> 72604 bytes
.../assets/fonts/lato/LatoLatin-Light.woff2 | Bin 0 -> 43468 bytes
.../fonts/lato/LatoLatin-LightItalic.woff | Bin 0 -> 73444 bytes
.../fonts/lato/LatoLatin-LightItalic.woff2 | Bin 0 -> 44156 bytes
.../assets/fonts/lato/LatoLatin-Regular.woff | Bin 0 -> 72456 bytes
.../assets/fonts/lato/LatoLatin-Regular.woff2 | Bin 0 -> 43760 bytes
.../Umbraco/assets/fonts/web.config | 8 +
.../Umbraco/assets/img/application/logo.png | Bin 0 -> 967 bytes
.../assets/img/application/logo@2x.png | Bin 0 -> 1671 bytes
.../assets/img/application/logo@3x.png | Bin 0 -> 2229 bytes
.../assets/img/application/logo_black.png | Bin 0 -> 376 bytes
.../assets/img/application/logo_white.png | Bin 0 -> 376 bytes
.../img/application/umbraco_logo_white.svg | 3 +
.../assets/img/applicationIcons/content.png | Bin 0 -> 290 bytes
.../assets/img/applicationIcons/default.png | Bin 0 -> 732 bytes
.../assets/img/applicationIcons/developer.png | Bin 0 -> 527 bytes
.../assets/img/applicationIcons/help.svg | 1 +
.../applicationIcons/hlvticons-umbraco.svg | 1 +
.../assets/img/applicationIcons/media.png | Bin 0 -> 537 bytes
.../assets/img/applicationIcons/members.png | Bin 0 -> 493 bytes
.../assets/img/applicationIcons/search.png | Bin 0 -> 330 bytes
.../assets/img/applicationIcons/settings.png | Bin 0 -> 600 bytes
.../img/applicationIcons/tree-arrow.png | Bin 0 -> 112 bytes
.../assets/img/applicationIcons/users.png | Bin 0 -> 455 bytes
.../assets/img/checkered-background-20.png | Bin 0 -> 100 bytes
.../assets/img/checkered-background.png | Bin 0 -> 104 bytes
.../assets/img/forms/installer-background.png | Bin 0 -> 22679 bytes
.../Umbraco/assets/img/installer.jpg | Bin 0 -> 153974 bytes
UmbracoPackages/Umbraco/assets/img/loader.gif | Bin 0 -> 11172 bytes
UmbracoPackages/Umbraco/assets/img/login.jpg | Bin 0 -> 97365 bytes
UmbracoPackages/Umbraco/assets/img/logo.png | Bin 0 -> 1746 bytes
.../Umbraco/assets/img/nonodesbg.jpg | Bin 0 -> 237538 bytes
.../Umbraco/assets/img/preview-mode-badge.png | Bin 0 -> 2156 bytes
.../Umbraco/assets/img/transparent.png | Bin 0 -> 84 bytes
.../img/uploader/upload-illustration.png | Bin 0 -> 1047 bytes
.../img/uploader/upload-illustration.svg | 1 +
.../lib/ace-builds/src-min-noconflict/ace.js | 17 +
.../src-min-noconflict/ext-language_tools.js | 8 +
.../src-min-noconflict/ext-searchbox.js | 8 +
.../src-min-noconflict/ext-settings_menu.js | 8 +
.../ace-builds/src-min-noconflict/mode-css.js | 8 +
.../src-min-noconflict/mode-javascript.js | 8 +
.../src-min-noconflict/mode-razor.js | 8 +
.../src-min-noconflict/snippets/css.js | 8 +
.../src-min-noconflict/snippets/javascript.js | 8 +
.../src-min-noconflict/snippets/text.js | 8 +
.../src-min-noconflict/theme-chrome.js | 8 +
.../src-min-noconflict/worker-css.js | 1 +
.../src-min-noconflict/worker-javascript.js | 1 +
.../lib/ace-razor-mode/theme/razor_chrome.css | 161 +
.../lib/angular-animate/angular-animate.js | 4269 ++
.../lib/angular-chart.js/angular-chart.min.js | 11 +
.../lib/angular-cookies/angular-cookies.js | 253 +
.../tmhDynamicLocale.min.js | 8 +
.../tmhDynamicLocale.min.js.map | 1 +
.../lib/angular-i18n/angular-locale_aa-dj.js | 128 +
.../lib/angular-i18n/angular-locale_aa-er.js | 128 +
.../lib/angular-i18n/angular-locale_aa-et.js | 128 +
.../lib/angular-i18n/angular-locale_aa.js | 128 +
.../lib/angular-i18n/angular-locale_af-na.js | 125 +
.../lib/angular-i18n/angular-locale_af-za.js | 125 +
.../lib/angular-i18n/angular-locale_af.js | 125 +
.../lib/angular-i18n/angular-locale_agq-cm.js | 143 +
.../lib/angular-i18n/angular-locale_agq.js | 143 +
.../lib/angular-i18n/angular-locale_ak-gh.js | 143 +
.../lib/angular-i18n/angular-locale_ak.js | 143 +
.../lib/angular-i18n/angular-locale_am-et.js | 125 +
.../lib/angular-i18n/angular-locale_am.js | 125 +
.../lib/angular-i18n/angular-locale_ar-001.js | 125 +
.../lib/angular-i18n/angular-locale_ar-ae.js | 125 +
.../lib/angular-i18n/angular-locale_ar-bh.js | 125 +
.../lib/angular-i18n/angular-locale_ar-dj.js | 125 +
.../lib/angular-i18n/angular-locale_ar-dz.js | 125 +
.../lib/angular-i18n/angular-locale_ar-eg.js | 125 +
.../lib/angular-i18n/angular-locale_ar-eh.js | 125 +
.../lib/angular-i18n/angular-locale_ar-er.js | 125 +
.../lib/angular-i18n/angular-locale_ar-il.js | 125 +
.../lib/angular-i18n/angular-locale_ar-iq.js | 125 +
.../lib/angular-i18n/angular-locale_ar-jo.js | 125 +
.../lib/angular-i18n/angular-locale_ar-km.js | 125 +
.../lib/angular-i18n/angular-locale_ar-kw.js | 125 +
.../lib/angular-i18n/angular-locale_ar-lb.js | 125 +
.../lib/angular-i18n/angular-locale_ar-ly.js | 125 +
.../lib/angular-i18n/angular-locale_ar-ma.js | 125 +
.../lib/angular-i18n/angular-locale_ar-mr.js | 125 +
.../lib/angular-i18n/angular-locale_ar-om.js | 125 +
.../lib/angular-i18n/angular-locale_ar-ps.js | 125 +
.../lib/angular-i18n/angular-locale_ar-qa.js | 125 +
.../lib/angular-i18n/angular-locale_ar-sa.js | 125 +
.../lib/angular-i18n/angular-locale_ar-sd.js | 125 +
.../lib/angular-i18n/angular-locale_ar-so.js | 125 +
.../lib/angular-i18n/angular-locale_ar-ss.js | 125 +
.../lib/angular-i18n/angular-locale_ar-sy.js | 125 +
.../lib/angular-i18n/angular-locale_ar-td.js | 125 +
.../lib/angular-i18n/angular-locale_ar-tn.js | 125 +
.../lib/angular-i18n/angular-locale_ar-xb.js | 125 +
.../lib/angular-i18n/angular-locale_ar-ye.js | 125 +
.../lib/angular-i18n/angular-locale_ar.js | 125 +
.../lib/angular-i18n/angular-locale_as-in.js | 143 +
.../lib/angular-i18n/angular-locale_as.js | 143 +
.../lib/angular-i18n/angular-locale_asa-tz.js | 143 +
.../lib/angular-i18n/angular-locale_asa.js | 143 +
.../lib/angular-i18n/angular-locale_ast-es.js | 143 +
.../lib/angular-i18n/angular-locale_ast.js | 143 +
.../angular-i18n/angular-locale_az-cyrl-az.js | 125 +
.../angular-i18n/angular-locale_az-cyrl.js | 125 +
.../angular-i18n/angular-locale_az-latn-az.js | 125 +
.../angular-i18n/angular-locale_az-latn.js | 125 +
.../lib/angular-i18n/angular-locale_az.js | 125 +
.../lib/angular-i18n/angular-locale_bas-cm.js | 143 +
.../lib/angular-i18n/angular-locale_bas.js | 143 +
.../lib/angular-i18n/angular-locale_be-by.js | 125 +
.../lib/angular-i18n/angular-locale_be.js | 125 +
.../lib/angular-i18n/angular-locale_bem-zm.js | 143 +
.../lib/angular-i18n/angular-locale_bem.js | 143 +
.../lib/angular-i18n/angular-locale_bez-tz.js | 143 +
.../lib/angular-i18n/angular-locale_bez.js | 143 +
.../lib/angular-i18n/angular-locale_bg-bg.js | 125 +
.../lib/angular-i18n/angular-locale_bg.js | 125 +
.../angular-i18n/angular-locale_bm-latn-ml.js | 143 +
.../angular-i18n/angular-locale_bm-latn.js | 143 +
.../lib/angular-i18n/angular-locale_bm-ml.js | 143 +
.../lib/angular-i18n/angular-locale_bm.js | 143 +
.../lib/angular-i18n/angular-locale_bn-bd.js | 125 +
.../lib/angular-i18n/angular-locale_bn-in.js | 125 +
.../lib/angular-i18n/angular-locale_bn.js | 125 +
.../lib/angular-i18n/angular-locale_bo-cn.js | 143 +
.../lib/angular-i18n/angular-locale_bo-in.js | 143 +
.../lib/angular-i18n/angular-locale_bo.js | 143 +
.../lib/angular-i18n/angular-locale_br-fr.js | 125 +
.../lib/angular-i18n/angular-locale_br.js | 125 +
.../lib/angular-i18n/angular-locale_brx-in.js | 143 +
.../lib/angular-i18n/angular-locale_brx.js | 143 +
.../angular-i18n/angular-locale_bs-cyrl-ba.js | 143 +
.../angular-i18n/angular-locale_bs-cyrl.js | 143 +
.../angular-i18n/angular-locale_bs-latn-ba.js | 143 +
.../angular-i18n/angular-locale_bs-latn.js | 143 +
.../lib/angular-i18n/angular-locale_bs.js | 143 +
.../lib/angular-i18n/angular-locale_byn-er.js | 115 +
.../lib/angular-i18n/angular-locale_byn.js | 115 +
.../lib/angular-i18n/angular-locale_ca-ad.js | 143 +
.../angular-locale_ca-es-valencia.js | 143 +
.../lib/angular-i18n/angular-locale_ca-es.js | 143 +
.../lib/angular-i18n/angular-locale_ca-fr.js | 143 +
.../lib/angular-i18n/angular-locale_ca-it.js | 143 +
.../lib/angular-i18n/angular-locale_ca.js | 143 +
.../lib/angular-i18n/angular-locale_ce-ru.js | 143 +
.../lib/angular-i18n/angular-locale_ce.js | 143 +
.../lib/angular-i18n/angular-locale_cgg-ug.js | 143 +
.../lib/angular-i18n/angular-locale_cgg.js | 143 +
.../lib/angular-i18n/angular-locale_chr-us.js | 125 +
.../lib/angular-i18n/angular-locale_chr.js | 125 +
.../angular-locale_ckb-arab-iq.js | 143 +
.../angular-locale_ckb-arab-ir.js | 143 +
.../angular-i18n/angular-locale_ckb-arab.js | 143 +
.../lib/angular-i18n/angular-locale_ckb-iq.js | 143 +
.../lib/angular-i18n/angular-locale_ckb-ir.js | 143 +
.../angular-locale_ckb-latn-iq.js | 143 +
.../angular-i18n/angular-locale_ckb-latn.js | 143 +
.../lib/angular-i18n/angular-locale_ckb.js | 143 +
.../lib/angular-i18n/angular-locale_cs-cz.js | 143 +
.../lib/angular-i18n/angular-locale_cs.js | 143 +
.../lib/angular-i18n/angular-locale_cu-ru.js | 143 +
.../lib/angular-i18n/angular-locale_cu.js | 143 +
.../lib/angular-i18n/angular-locale_cy-gb.js | 125 +
.../lib/angular-i18n/angular-locale_cy.js | 125 +
.../lib/angular-i18n/angular-locale_da-dk.js | 156 +
.../lib/angular-i18n/angular-locale_da-gl.js | 156 +
.../lib/angular-i18n/angular-locale_da.js | 156 +
.../lib/angular-i18n/angular-locale_dav-ke.js | 143 +
.../lib/angular-i18n/angular-locale_dav.js | 143 +
.../lib/angular-i18n/angular-locale_de-at.js | 143 +
.../lib/angular-i18n/angular-locale_de-be.js | 143 +
.../lib/angular-i18n/angular-locale_de-ch.js | 143 +
.../lib/angular-i18n/angular-locale_de-de.js | 143 +
.../lib/angular-i18n/angular-locale_de-it.js | 143 +
.../lib/angular-i18n/angular-locale_de-li.js | 143 +
.../lib/angular-i18n/angular-locale_de-lu.js | 143 +
.../lib/angular-i18n/angular-locale_de.js | 143 +
.../lib/angular-i18n/angular-locale_dje-ne.js | 143 +
.../lib/angular-i18n/angular-locale_dje.js | 143 +
.../lib/angular-i18n/angular-locale_dsb-de.js | 143 +
.../lib/angular-i18n/angular-locale_dsb.js | 143 +
.../lib/angular-i18n/angular-locale_dua-cm.js | 143 +
.../lib/angular-i18n/angular-locale_dua.js | 143 +
.../lib/angular-i18n/angular-locale_dyo-sn.js | 143 +
.../lib/angular-i18n/angular-locale_dyo.js | 143 +
.../lib/angular-i18n/angular-locale_dz-bt.js | 143 +
.../lib/angular-i18n/angular-locale_dz.js | 143 +
.../lib/angular-i18n/angular-locale_ebu-ke.js | 143 +
.../lib/angular-i18n/angular-locale_ebu.js | 143 +
.../lib/angular-i18n/angular-locale_ee-gh.js | 143 +
.../lib/angular-i18n/angular-locale_ee-tg.js | 143 +
.../lib/angular-i18n/angular-locale_ee.js | 143 +
.../lib/angular-i18n/angular-locale_el-cy.js | 125 +
.../lib/angular-i18n/angular-locale_el-gr.js | 125 +
.../lib/angular-i18n/angular-locale_el.js | 125 +
.../lib/angular-i18n/angular-locale_en-001.js | 143 +
.../lib/angular-i18n/angular-locale_en-150.js | 143 +
.../lib/angular-i18n/angular-locale_en-ag.js | 143 +
.../lib/angular-i18n/angular-locale_en-ai.js | 143 +
.../lib/angular-i18n/angular-locale_en-as.js | 143 +
.../lib/angular-i18n/angular-locale_en-at.js | 143 +
.../lib/angular-i18n/angular-locale_en-au.js | 143 +
.../lib/angular-i18n/angular-locale_en-bb.js | 143 +
.../lib/angular-i18n/angular-locale_en-be.js | 143 +
.../lib/angular-i18n/angular-locale_en-bi.js | 143 +
.../lib/angular-i18n/angular-locale_en-bm.js | 143 +
.../lib/angular-i18n/angular-locale_en-bs.js | 143 +
.../lib/angular-i18n/angular-locale_en-bw.js | 143 +
.../lib/angular-i18n/angular-locale_en-bz.js | 143 +
.../lib/angular-i18n/angular-locale_en-ca.js | 143 +
.../lib/angular-i18n/angular-locale_en-cc.js | 143 +
.../lib/angular-i18n/angular-locale_en-ch.js | 143 +
.../lib/angular-i18n/angular-locale_en-ck.js | 143 +
.../lib/angular-i18n/angular-locale_en-cm.js | 143 +
.../lib/angular-i18n/angular-locale_en-cx.js | 143 +
.../lib/angular-i18n/angular-locale_en-cy.js | 143 +
.../lib/angular-i18n/angular-locale_en-de.js | 143 +
.../lib/angular-i18n/angular-locale_en-dg.js | 143 +
.../lib/angular-i18n/angular-locale_en-dk.js | 143 +
.../lib/angular-i18n/angular-locale_en-dm.js | 143 +
.../angular-i18n/angular-locale_en-dsrt-us.js | 99 +
.../angular-i18n/angular-locale_en-dsrt.js | 99 +
.../lib/angular-i18n/angular-locale_en-er.js | 143 +
.../lib/angular-i18n/angular-locale_en-fi.js | 143 +
.../lib/angular-i18n/angular-locale_en-fj.js | 143 +
.../lib/angular-i18n/angular-locale_en-fk.js | 143 +
.../lib/angular-i18n/angular-locale_en-fm.js | 143 +
.../lib/angular-i18n/angular-locale_en-gb.js | 143 +
.../lib/angular-i18n/angular-locale_en-gd.js | 143 +
.../lib/angular-i18n/angular-locale_en-gg.js | 143 +
.../lib/angular-i18n/angular-locale_en-gh.js | 143 +
.../lib/angular-i18n/angular-locale_en-gi.js | 143 +
.../lib/angular-i18n/angular-locale_en-gm.js | 143 +
.../lib/angular-i18n/angular-locale_en-gu.js | 143 +
.../lib/angular-i18n/angular-locale_en-gy.js | 143 +
.../lib/angular-i18n/angular-locale_en-hk.js | 143 +
.../lib/angular-i18n/angular-locale_en-ie.js | 143 +
.../lib/angular-i18n/angular-locale_en-il.js | 143 +
.../lib/angular-i18n/angular-locale_en-im.js | 143 +
.../lib/angular-i18n/angular-locale_en-in.js | 143 +
.../lib/angular-i18n/angular-locale_en-io.js | 143 +
.../lib/angular-i18n/angular-locale_en-iso.js | 143 +
.../lib/angular-i18n/angular-locale_en-je.js | 143 +
.../lib/angular-i18n/angular-locale_en-jm.js | 143 +
.../lib/angular-i18n/angular-locale_en-ke.js | 143 +
.../lib/angular-i18n/angular-locale_en-ki.js | 143 +
.../lib/angular-i18n/angular-locale_en-kn.js | 143 +
.../lib/angular-i18n/angular-locale_en-ky.js | 143 +
.../lib/angular-i18n/angular-locale_en-lc.js | 143 +
.../lib/angular-i18n/angular-locale_en-lr.js | 143 +
.../lib/angular-i18n/angular-locale_en-ls.js | 143 +
.../lib/angular-i18n/angular-locale_en-mg.js | 143 +
.../lib/angular-i18n/angular-locale_en-mh.js | 143 +
.../lib/angular-i18n/angular-locale_en-mo.js | 143 +
.../lib/angular-i18n/angular-locale_en-mp.js | 143 +
.../lib/angular-i18n/angular-locale_en-ms.js | 143 +
.../lib/angular-i18n/angular-locale_en-mt.js | 143 +
.../lib/angular-i18n/angular-locale_en-mu.js | 143 +
.../lib/angular-i18n/angular-locale_en-mw.js | 143 +
.../lib/angular-i18n/angular-locale_en-my.js | 143 +
.../lib/angular-i18n/angular-locale_en-na.js | 143 +
.../lib/angular-i18n/angular-locale_en-nf.js | 143 +
.../lib/angular-i18n/angular-locale_en-ng.js | 143 +
.../lib/angular-i18n/angular-locale_en-nl.js | 143 +
.../lib/angular-i18n/angular-locale_en-nr.js | 143 +
.../lib/angular-i18n/angular-locale_en-nu.js | 143 +
.../lib/angular-i18n/angular-locale_en-nz.js | 143 +
.../lib/angular-i18n/angular-locale_en-pg.js | 143 +
.../lib/angular-i18n/angular-locale_en-ph.js | 143 +
.../lib/angular-i18n/angular-locale_en-pk.js | 143 +
.../lib/angular-i18n/angular-locale_en-pn.js | 143 +
.../lib/angular-i18n/angular-locale_en-pr.js | 143 +
.../lib/angular-i18n/angular-locale_en-pw.js | 143 +
.../lib/angular-i18n/angular-locale_en-rw.js | 143 +
.../lib/angular-i18n/angular-locale_en-sb.js | 143 +
.../lib/angular-i18n/angular-locale_en-sc.js | 143 +
.../lib/angular-i18n/angular-locale_en-sd.js | 143 +
.../lib/angular-i18n/angular-locale_en-se.js | 143 +
.../lib/angular-i18n/angular-locale_en-sg.js | 143 +
.../lib/angular-i18n/angular-locale_en-sh.js | 143 +
.../lib/angular-i18n/angular-locale_en-si.js | 143 +
.../lib/angular-i18n/angular-locale_en-sl.js | 143 +
.../lib/angular-i18n/angular-locale_en-ss.js | 143 +
.../lib/angular-i18n/angular-locale_en-sx.js | 143 +
.../lib/angular-i18n/angular-locale_en-sz.js | 143 +
.../lib/angular-i18n/angular-locale_en-tc.js | 143 +
.../lib/angular-i18n/angular-locale_en-tk.js | 143 +
.../lib/angular-i18n/angular-locale_en-to.js | 143 +
.../lib/angular-i18n/angular-locale_en-tt.js | 143 +
.../lib/angular-i18n/angular-locale_en-tv.js | 143 +
.../lib/angular-i18n/angular-locale_en-tz.js | 143 +
.../lib/angular-i18n/angular-locale_en-ug.js | 143 +
.../lib/angular-i18n/angular-locale_en-um.js | 143 +
.../angular-locale_en-us-posix.js | 143 +
.../lib/angular-i18n/angular-locale_en-us.js | 143 +
.../lib/angular-i18n/angular-locale_en-vc.js | 143 +
.../lib/angular-i18n/angular-locale_en-vg.js | 143 +
.../lib/angular-i18n/angular-locale_en-vi.js | 143 +
.../lib/angular-i18n/angular-locale_en-vu.js | 143 +
.../lib/angular-i18n/angular-locale_en-ws.js | 143 +
.../lib/angular-i18n/angular-locale_en-xa.js | 143 +
.../lib/angular-i18n/angular-locale_en-za.js | 143 +
.../lib/angular-i18n/angular-locale_en-zm.js | 143 +
.../lib/angular-i18n/angular-locale_en-zw.js | 143 +
.../lib/angular-i18n/angular-locale_en.js | 143 +
.../lib/angular-i18n/angular-locale_eo-001.js | 143 +
.../lib/angular-i18n/angular-locale_eo.js | 143 +
.../lib/angular-i18n/angular-locale_es-419.js | 125 +
.../lib/angular-i18n/angular-locale_es-ar.js | 125 +
.../lib/angular-i18n/angular-locale_es-bo.js | 125 +
.../lib/angular-i18n/angular-locale_es-br.js | 125 +
.../lib/angular-i18n/angular-locale_es-bz.js | 125 +
.../lib/angular-i18n/angular-locale_es-cl.js | 125 +
.../lib/angular-i18n/angular-locale_es-co.js | 125 +
.../lib/angular-i18n/angular-locale_es-cr.js | 125 +
.../lib/angular-i18n/angular-locale_es-cu.js | 125 +
.../lib/angular-i18n/angular-locale_es-do.js | 125 +
.../lib/angular-i18n/angular-locale_es-ea.js | 125 +
.../lib/angular-i18n/angular-locale_es-ec.js | 125 +
.../lib/angular-i18n/angular-locale_es-es.js | 125 +
.../lib/angular-i18n/angular-locale_es-gq.js | 125 +
.../lib/angular-i18n/angular-locale_es-gt.js | 125 +
.../lib/angular-i18n/angular-locale_es-hn.js | 125 +
.../lib/angular-i18n/angular-locale_es-ic.js | 125 +
.../lib/angular-i18n/angular-locale_es-mx.js | 125 +
.../lib/angular-i18n/angular-locale_es-ni.js | 125 +
.../lib/angular-i18n/angular-locale_es-pa.js | 125 +
.../lib/angular-i18n/angular-locale_es-pe.js | 125 +
.../lib/angular-i18n/angular-locale_es-ph.js | 125 +
.../lib/angular-i18n/angular-locale_es-pr.js | 125 +
.../lib/angular-i18n/angular-locale_es-py.js | 125 +
.../lib/angular-i18n/angular-locale_es-sv.js | 125 +
.../lib/angular-i18n/angular-locale_es-us.js | 125 +
.../lib/angular-i18n/angular-locale_es-uy.js | 125 +
.../lib/angular-i18n/angular-locale_es-ve.js | 125 +
.../lib/angular-i18n/angular-locale_es.js | 125 +
.../lib/angular-i18n/angular-locale_et-ee.js | 143 +
.../lib/angular-i18n/angular-locale_et.js | 143 +
.../lib/angular-i18n/angular-locale_eu-es.js | 125 +
.../lib/angular-i18n/angular-locale_eu.js | 125 +
.../lib/angular-i18n/angular-locale_ewo-cm.js | 143 +
.../lib/angular-i18n/angular-locale_ewo.js | 143 +
.../lib/angular-i18n/angular-locale_fa-af.js | 125 +
.../lib/angular-i18n/angular-locale_fa-ir.js | 125 +
.../lib/angular-i18n/angular-locale_fa.js | 125 +
.../lib/angular-i18n/angular-locale_ff-cm.js | 143 +
.../lib/angular-i18n/angular-locale_ff-gn.js | 143 +
.../lib/angular-i18n/angular-locale_ff-mr.js | 143 +
.../lib/angular-i18n/angular-locale_ff-sn.js | 143 +
.../lib/angular-i18n/angular-locale_ff.js | 143 +
.../lib/angular-i18n/angular-locale_fi-fi.js | 143 +
.../lib/angular-i18n/angular-locale_fi.js | 143 +
.../lib/angular-i18n/angular-locale_fil-ph.js | 143 +
.../lib/angular-i18n/angular-locale_fil.js | 143 +
.../lib/angular-i18n/angular-locale_fo-dk.js | 143 +
.../lib/angular-i18n/angular-locale_fo-fo.js | 143 +
.../lib/angular-i18n/angular-locale_fo.js | 143 +
.../lib/angular-i18n/angular-locale_fr-be.js | 125 +
.../lib/angular-i18n/angular-locale_fr-bf.js | 125 +
.../lib/angular-i18n/angular-locale_fr-bi.js | 125 +
.../lib/angular-i18n/angular-locale_fr-bj.js | 125 +
.../lib/angular-i18n/angular-locale_fr-bl.js | 125 +
.../lib/angular-i18n/angular-locale_fr-ca.js | 125 +
.../lib/angular-i18n/angular-locale_fr-cd.js | 125 +
.../lib/angular-i18n/angular-locale_fr-cf.js | 125 +
.../lib/angular-i18n/angular-locale_fr-cg.js | 125 +
.../lib/angular-i18n/angular-locale_fr-ch.js | 125 +
.../lib/angular-i18n/angular-locale_fr-ci.js | 125 +
.../lib/angular-i18n/angular-locale_fr-cm.js | 125 +
.../lib/angular-i18n/angular-locale_fr-dj.js | 125 +
.../lib/angular-i18n/angular-locale_fr-dz.js | 125 +
.../lib/angular-i18n/angular-locale_fr-fr.js | 125 +
.../lib/angular-i18n/angular-locale_fr-ga.js | 125 +
.../lib/angular-i18n/angular-locale_fr-gf.js | 125 +
.../lib/angular-i18n/angular-locale_fr-gn.js | 125 +
.../lib/angular-i18n/angular-locale_fr-gp.js | 125 +
.../lib/angular-i18n/angular-locale_fr-gq.js | 125 +
.../lib/angular-i18n/angular-locale_fr-ht.js | 125 +
.../lib/angular-i18n/angular-locale_fr-km.js | 125 +
.../lib/angular-i18n/angular-locale_fr-lu.js | 125 +
.../lib/angular-i18n/angular-locale_fr-ma.js | 125 +
.../lib/angular-i18n/angular-locale_fr-mc.js | 125 +
.../lib/angular-i18n/angular-locale_fr-mf.js | 125 +
.../lib/angular-i18n/angular-locale_fr-mg.js | 125 +
.../lib/angular-i18n/angular-locale_fr-ml.js | 125 +
.../lib/angular-i18n/angular-locale_fr-mq.js | 125 +
.../lib/angular-i18n/angular-locale_fr-mr.js | 125 +
.../lib/angular-i18n/angular-locale_fr-mu.js | 125 +
.../lib/angular-i18n/angular-locale_fr-nc.js | 125 +
.../lib/angular-i18n/angular-locale_fr-ne.js | 125 +
.../lib/angular-i18n/angular-locale_fr-pf.js | 125 +
.../lib/angular-i18n/angular-locale_fr-pm.js | 125 +
.../lib/angular-i18n/angular-locale_fr-re.js | 125 +
.../lib/angular-i18n/angular-locale_fr-rw.js | 125 +
.../lib/angular-i18n/angular-locale_fr-sc.js | 125 +
.../lib/angular-i18n/angular-locale_fr-sn.js | 125 +
.../lib/angular-i18n/angular-locale_fr-sy.js | 125 +
.../lib/angular-i18n/angular-locale_fr-td.js | 125 +
.../lib/angular-i18n/angular-locale_fr-tg.js | 125 +
.../lib/angular-i18n/angular-locale_fr-tn.js | 125 +
.../lib/angular-i18n/angular-locale_fr-vu.js | 125 +
.../lib/angular-i18n/angular-locale_fr-wf.js | 125 +
.../lib/angular-i18n/angular-locale_fr-yt.js | 125 +
.../lib/angular-i18n/angular-locale_fr.js | 125 +
.../lib/angular-i18n/angular-locale_fur-it.js | 143 +
.../lib/angular-i18n/angular-locale_fur.js | 143 +
.../lib/angular-i18n/angular-locale_fy-nl.js | 143 +
.../lib/angular-i18n/angular-locale_fy.js | 143 +
.../lib/angular-i18n/angular-locale_ga-ie.js | 125 +
.../lib/angular-i18n/angular-locale_ga.js | 125 +
.../lib/angular-i18n/angular-locale_gd-gb.js | 143 +
.../lib/angular-i18n/angular-locale_gd.js | 143 +
.../lib/angular-i18n/angular-locale_gl-es.js | 143 +
.../lib/angular-i18n/angular-locale_gl.js | 143 +
.../lib/angular-i18n/angular-locale_gsw-ch.js | 125 +
.../lib/angular-i18n/angular-locale_gsw-fr.js | 125 +
.../lib/angular-i18n/angular-locale_gsw-li.js | 125 +
.../lib/angular-i18n/angular-locale_gsw.js | 125 +
.../lib/angular-i18n/angular-locale_gu-in.js | 125 +
.../lib/angular-i18n/angular-locale_gu.js | 125 +
.../lib/angular-i18n/angular-locale_guz-ke.js | 143 +
.../lib/angular-i18n/angular-locale_guz.js | 143 +
.../lib/angular-i18n/angular-locale_gv-im.js | 143 +
.../lib/angular-i18n/angular-locale_gv.js | 143 +
.../lib/angular-i18n/angular-locale_ha-gh.js | 143 +
.../angular-i18n/angular-locale_ha-latn-gh.js | 143 +
.../angular-i18n/angular-locale_ha-latn-ne.js | 143 +
.../angular-i18n/angular-locale_ha-latn-ng.js | 143 +
.../angular-i18n/angular-locale_ha-latn.js | 143 +
.../lib/angular-i18n/angular-locale_ha-ne.js | 143 +
.../lib/angular-i18n/angular-locale_ha-ng.js | 143 +
.../lib/angular-i18n/angular-locale_ha.js | 143 +
.../lib/angular-i18n/angular-locale_haw-us.js | 125 +
.../lib/angular-i18n/angular-locale_haw.js | 125 +
.../lib/angular-i18n/angular-locale_he-il.js | 143 +
.../lib/angular-i18n/angular-locale_he.js | 143 +
.../lib/angular-i18n/angular-locale_hi-in.js | 125 +
.../lib/angular-i18n/angular-locale_hi.js | 125 +
.../lib/angular-i18n/angular-locale_hr-ba.js | 143 +
.../lib/angular-i18n/angular-locale_hr-hr.js | 143 +
.../lib/angular-i18n/angular-locale_hr.js | 143 +
.../lib/angular-i18n/angular-locale_hsb-de.js | 143 +
.../lib/angular-i18n/angular-locale_hsb.js | 143 +
.../lib/angular-i18n/angular-locale_hu-hu.js | 125 +
.../lib/angular-i18n/angular-locale_hu.js | 125 +
.../lib/angular-i18n/angular-locale_hy-am.js | 125 +
.../lib/angular-i18n/angular-locale_hy.js | 125 +
.../lib/angular-i18n/angular-locale_ia-fr.js | 128 +
.../lib/angular-i18n/angular-locale_ia.js | 128 +
.../lib/angular-i18n/angular-locale_id-id.js | 125 +
.../lib/angular-i18n/angular-locale_id.js | 125 +
.../lib/angular-i18n/angular-locale_ig-ng.js | 143 +
.../lib/angular-i18n/angular-locale_ig.js | 143 +
.../lib/angular-i18n/angular-locale_ii-cn.js | 143 +
.../lib/angular-i18n/angular-locale_ii.js | 143 +
.../lib/angular-i18n/angular-locale_in.js | 125 +
.../lib/angular-i18n/angular-locale_is-is.js | 156 +
.../lib/angular-i18n/angular-locale_is.js | 156 +
.../lib/angular-i18n/angular-locale_it-ch.js | 143 +
.../lib/angular-i18n/angular-locale_it-it.js | 143 +
.../lib/angular-i18n/angular-locale_it-sm.js | 143 +
.../lib/angular-i18n/angular-locale_it-va.js | 143 +
.../lib/angular-i18n/angular-locale_it.js | 143 +
.../lib/angular-i18n/angular-locale_iw.js | 143 +
.../lib/angular-i18n/angular-locale_ja-jp.js | 125 +
.../lib/angular-i18n/angular-locale_ja.js | 125 +
.../lib/angular-i18n/angular-locale_jgo-cm.js | 143 +
.../lib/angular-i18n/angular-locale_jgo.js | 143 +
.../lib/angular-i18n/angular-locale_jmc-tz.js | 143 +
.../lib/angular-i18n/angular-locale_jmc.js | 143 +
.../lib/angular-i18n/angular-locale_ka-ge.js | 125 +
.../lib/angular-i18n/angular-locale_ka.js | 125 +
.../lib/angular-i18n/angular-locale_kab-dz.js | 143 +
.../lib/angular-i18n/angular-locale_kab.js | 143 +
.../lib/angular-i18n/angular-locale_kam-ke.js | 143 +
.../lib/angular-i18n/angular-locale_kam.js | 143 +
.../lib/angular-i18n/angular-locale_kde-tz.js | 143 +
.../lib/angular-i18n/angular-locale_kde.js | 143 +
.../lib/angular-i18n/angular-locale_kea-cv.js | 143 +
.../lib/angular-i18n/angular-locale_kea.js | 143 +
.../lib/angular-i18n/angular-locale_khq-ml.js | 143 +
.../lib/angular-i18n/angular-locale_khq.js | 143 +
.../lib/angular-i18n/angular-locale_ki-ke.js | 143 +
.../lib/angular-i18n/angular-locale_ki.js | 143 +
.../angular-i18n/angular-locale_kk-cyrl-kz.js | 125 +
.../angular-i18n/angular-locale_kk-cyrl.js | 125 +
.../lib/angular-i18n/angular-locale_kk-kz.js | 125 +
.../lib/angular-i18n/angular-locale_kk.js | 125 +
.../lib/angular-i18n/angular-locale_kkj-cm.js | 143 +
.../lib/angular-i18n/angular-locale_kkj.js | 143 +
.../lib/angular-i18n/angular-locale_kl-gl.js | 143 +
.../lib/angular-i18n/angular-locale_kl.js | 143 +
.../lib/angular-i18n/angular-locale_kln-ke.js | 143 +
.../lib/angular-i18n/angular-locale_kln.js | 143 +
.../lib/angular-i18n/angular-locale_km-kh.js | 125 +
.../lib/angular-i18n/angular-locale_km.js | 125 +
.../lib/angular-i18n/angular-locale_kn-in.js | 125 +
.../lib/angular-i18n/angular-locale_kn.js | 125 +
.../lib/angular-i18n/angular-locale_ko-kp.js | 125 +
.../lib/angular-i18n/angular-locale_ko-kr.js | 125 +
.../lib/angular-i18n/angular-locale_ko.js | 125 +
.../lib/angular-i18n/angular-locale_kok-in.js | 143 +
.../lib/angular-i18n/angular-locale_kok.js | 143 +
.../angular-i18n/angular-locale_ks-arab-in.js | 143 +
.../angular-i18n/angular-locale_ks-arab.js | 143 +
.../lib/angular-i18n/angular-locale_ks-in.js | 143 +
.../lib/angular-i18n/angular-locale_ks.js | 143 +
.../lib/angular-i18n/angular-locale_ksb-tz.js | 143 +
.../lib/angular-i18n/angular-locale_ksb.js | 143 +
.../lib/angular-i18n/angular-locale_ksf-cm.js | 143 +
.../lib/angular-i18n/angular-locale_ksf.js | 143 +
.../lib/angular-i18n/angular-locale_ksh-de.js | 143 +
.../lib/angular-i18n/angular-locale_ksh.js | 143 +
.../lib/angular-i18n/angular-locale_kw-gb.js | 143 +
.../lib/angular-i18n/angular-locale_kw.js | 143 +
.../angular-i18n/angular-locale_ky-cyrl-kg.js | 125 +
.../angular-i18n/angular-locale_ky-cyrl.js | 125 +
.../lib/angular-i18n/angular-locale_ky-kg.js | 125 +
.../lib/angular-i18n/angular-locale_ky.js | 125 +
.../lib/angular-i18n/angular-locale_lag-tz.js | 143 +
.../lib/angular-i18n/angular-locale_lag.js | 143 +
.../lib/angular-i18n/angular-locale_lb-lu.js | 143 +
.../lib/angular-i18n/angular-locale_lb.js | 143 +
.../lib/angular-i18n/angular-locale_lg-ug.js | 143 +
.../lib/angular-i18n/angular-locale_lg.js | 143 +
.../lib/angular-i18n/angular-locale_lkt-us.js | 143 +
.../lib/angular-i18n/angular-locale_lkt.js | 143 +
.../lib/angular-i18n/angular-locale_ln-ao.js | 125 +
.../lib/angular-i18n/angular-locale_ln-cd.js | 125 +
.../lib/angular-i18n/angular-locale_ln-cf.js | 125 +
.../lib/angular-i18n/angular-locale_ln-cg.js | 125 +
.../lib/angular-i18n/angular-locale_ln.js | 125 +
.../lib/angular-i18n/angular-locale_lo-la.js | 125 +
.../lib/angular-i18n/angular-locale_lo.js | 125 +
.../lib/angular-i18n/angular-locale_lrc-iq.js | 143 +
.../lib/angular-i18n/angular-locale_lrc-ir.js | 143 +
.../lib/angular-i18n/angular-locale_lrc.js | 143 +
.../lib/angular-i18n/angular-locale_lt-lt.js | 143 +
.../lib/angular-i18n/angular-locale_lt.js | 143 +
.../lib/angular-i18n/angular-locale_lu-cd.js | 143 +
.../lib/angular-i18n/angular-locale_lu.js | 143 +
.../lib/angular-i18n/angular-locale_luo-ke.js | 143 +
.../lib/angular-i18n/angular-locale_luo.js | 143 +
.../lib/angular-i18n/angular-locale_luy-ke.js | 143 +
.../lib/angular-i18n/angular-locale_luy.js | 143 +
.../lib/angular-i18n/angular-locale_lv-lv.js | 143 +
.../lib/angular-i18n/angular-locale_lv.js | 143 +
.../lib/angular-i18n/angular-locale_mas-ke.js | 143 +
.../lib/angular-i18n/angular-locale_mas-tz.js | 143 +
.../lib/angular-i18n/angular-locale_mas.js | 143 +
.../lib/angular-i18n/angular-locale_mer-ke.js | 143 +
.../lib/angular-i18n/angular-locale_mer.js | 143 +
.../lib/angular-i18n/angular-locale_mfe-mu.js | 143 +
.../lib/angular-i18n/angular-locale_mfe.js | 143 +
.../lib/angular-i18n/angular-locale_mg-mg.js | 143 +
.../lib/angular-i18n/angular-locale_mg.js | 143 +
.../lib/angular-i18n/angular-locale_mgh-mz.js | 143 +
.../lib/angular-i18n/angular-locale_mgh.js | 143 +
.../lib/angular-i18n/angular-locale_mgo-cm.js | 143 +
.../lib/angular-i18n/angular-locale_mgo.js | 143 +
.../lib/angular-i18n/angular-locale_mk-mk.js | 143 +
.../lib/angular-i18n/angular-locale_mk.js | 143 +
.../lib/angular-i18n/angular-locale_ml-in.js | 125 +
.../lib/angular-i18n/angular-locale_ml.js | 125 +
.../angular-i18n/angular-locale_mn-cyrl-mn.js | 125 +
.../angular-i18n/angular-locale_mn-cyrl.js | 125 +
.../lib/angular-i18n/angular-locale_mn-mn.js | 125 +
.../lib/angular-i18n/angular-locale_mn.js | 125 +
.../lib/angular-i18n/angular-locale_mo.js | 143 +
.../lib/angular-i18n/angular-locale_mr-in.js | 125 +
.../lib/angular-i18n/angular-locale_mr.js | 125 +
.../lib/angular-i18n/angular-locale_ms-bn.js | 125 +
.../angular-i18n/angular-locale_ms-latn-bn.js | 125 +
.../angular-i18n/angular-locale_ms-latn-my.js | 125 +
.../angular-i18n/angular-locale_ms-latn-sg.js | 125 +
.../angular-i18n/angular-locale_ms-latn.js | 125 +
.../lib/angular-i18n/angular-locale_ms-my.js | 125 +
.../lib/angular-i18n/angular-locale_ms-sg.js | 125 +
.../lib/angular-i18n/angular-locale_ms.js | 125 +
.../lib/angular-i18n/angular-locale_mt-mt.js | 125 +
.../lib/angular-i18n/angular-locale_mt.js | 125 +
.../lib/angular-i18n/angular-locale_mua-cm.js | 143 +
.../lib/angular-i18n/angular-locale_mua.js | 143 +
.../lib/angular-i18n/angular-locale_my-mm.js | 125 +
.../lib/angular-i18n/angular-locale_my.js | 125 +
.../lib/angular-i18n/angular-locale_mzn-ir.js | 143 +
.../lib/angular-i18n/angular-locale_mzn.js | 143 +
.../lib/angular-i18n/angular-locale_naq-na.js | 143 +
.../lib/angular-i18n/angular-locale_naq.js | 143 +
.../lib/angular-i18n/angular-locale_nb-no.js | 125 +
.../lib/angular-i18n/angular-locale_nb-sj.js | 125 +
.../lib/angular-i18n/angular-locale_nb.js | 125 +
.../lib/angular-i18n/angular-locale_nd-zw.js | 143 +
.../lib/angular-i18n/angular-locale_nd.js | 143 +
.../lib/angular-i18n/angular-locale_nds-de.js | 143 +
.../lib/angular-i18n/angular-locale_nds-nl.js | 143 +
.../lib/angular-i18n/angular-locale_nds.js | 143 +
.../lib/angular-i18n/angular-locale_ne-in.js | 125 +
.../lib/angular-i18n/angular-locale_ne-np.js | 125 +
.../lib/angular-i18n/angular-locale_ne.js | 125 +
.../lib/angular-i18n/angular-locale_nl-aw.js | 143 +
.../lib/angular-i18n/angular-locale_nl-be.js | 143 +
.../lib/angular-i18n/angular-locale_nl-bq.js | 143 +
.../lib/angular-i18n/angular-locale_nl-cw.js | 143 +
.../lib/angular-i18n/angular-locale_nl-nl.js | 143 +
.../lib/angular-i18n/angular-locale_nl-sr.js | 143 +
.../lib/angular-i18n/angular-locale_nl-sx.js | 143 +
.../lib/angular-i18n/angular-locale_nl.js | 143 +
.../lib/angular-i18n/angular-locale_nmg-cm.js | 143 +
.../lib/angular-i18n/angular-locale_nmg.js | 143 +
.../lib/angular-i18n/angular-locale_nn-no.js | 143 +
.../lib/angular-i18n/angular-locale_nn.js | 143 +
.../lib/angular-i18n/angular-locale_nnh-cm.js | 143 +
.../lib/angular-i18n/angular-locale_nnh.js | 143 +
.../lib/angular-i18n/angular-locale_no-no.js | 125 +
.../lib/angular-i18n/angular-locale_no.js | 125 +
.../lib/angular-i18n/angular-locale_nr-za.js | 128 +
.../lib/angular-i18n/angular-locale_nr.js | 128 +
.../lib/angular-i18n/angular-locale_nso-za.js | 128 +
.../lib/angular-i18n/angular-locale_nso.js | 128 +
.../lib/angular-i18n/angular-locale_nus-sd.js | 143 +
.../lib/angular-i18n/angular-locale_nus-ss.js | 143 +
.../lib/angular-i18n/angular-locale_nus.js | 143 +
.../lib/angular-i18n/angular-locale_nyn-ug.js | 143 +
.../lib/angular-i18n/angular-locale_nyn.js | 143 +
.../lib/angular-i18n/angular-locale_om-et.js | 143 +
.../lib/angular-i18n/angular-locale_om-ke.js | 143 +
.../lib/angular-i18n/angular-locale_om.js | 143 +
.../lib/angular-i18n/angular-locale_or-in.js | 125 +
.../lib/angular-i18n/angular-locale_or.js | 125 +
.../lib/angular-i18n/angular-locale_os-ge.js | 143 +
.../lib/angular-i18n/angular-locale_os-ru.js | 143 +
.../lib/angular-i18n/angular-locale_os.js | 143 +
.../angular-i18n/angular-locale_pa-arab-pk.js | 125 +
.../angular-i18n/angular-locale_pa-arab.js | 125 +
.../angular-i18n/angular-locale_pa-guru-in.js | 125 +
.../angular-i18n/angular-locale_pa-guru.js | 125 +
.../lib/angular-i18n/angular-locale_pa.js | 125 +
.../lib/angular-i18n/angular-locale_pl-pl.js | 143 +
.../lib/angular-i18n/angular-locale_pl.js | 143 +
.../angular-i18n/angular-locale_prg-001.js | 143 +
.../lib/angular-i18n/angular-locale_prg.js | 143 +
.../lib/angular-i18n/angular-locale_ps-af.js | 143 +
.../lib/angular-i18n/angular-locale_ps.js | 143 +
.../lib/angular-i18n/angular-locale_pt-ao.js | 125 +
.../lib/angular-i18n/angular-locale_pt-br.js | 125 +
.../lib/angular-i18n/angular-locale_pt-ch.js | 125 +
.../lib/angular-i18n/angular-locale_pt-cv.js | 125 +
.../lib/angular-i18n/angular-locale_pt-gq.js | 125 +
.../lib/angular-i18n/angular-locale_pt-gw.js | 125 +
.../lib/angular-i18n/angular-locale_pt-lu.js | 125 +
.../lib/angular-i18n/angular-locale_pt-mo.js | 125 +
.../lib/angular-i18n/angular-locale_pt-mz.js | 125 +
.../lib/angular-i18n/angular-locale_pt-pt.js | 125 +
.../lib/angular-i18n/angular-locale_pt-st.js | 125 +
.../lib/angular-i18n/angular-locale_pt-tl.js | 125 +
.../lib/angular-i18n/angular-locale_pt.js | 125 +
.../lib/angular-i18n/angular-locale_qu-bo.js | 143 +
.../lib/angular-i18n/angular-locale_qu-ec.js | 143 +
.../lib/angular-i18n/angular-locale_qu-pe.js | 143 +
.../lib/angular-i18n/angular-locale_qu.js | 143 +
.../lib/angular-i18n/angular-locale_rm-ch.js | 143 +
.../lib/angular-i18n/angular-locale_rm.js | 143 +
.../lib/angular-i18n/angular-locale_rn-bi.js | 143 +
.../lib/angular-i18n/angular-locale_rn.js | 143 +
.../lib/angular-i18n/angular-locale_ro-md.js | 143 +
.../lib/angular-i18n/angular-locale_ro-ro.js | 143 +
.../lib/angular-i18n/angular-locale_ro.js | 143 +
.../lib/angular-i18n/angular-locale_rof-tz.js | 143 +
.../lib/angular-i18n/angular-locale_rof.js | 143 +
.../lib/angular-i18n/angular-locale_ru-by.js | 143 +
.../lib/angular-i18n/angular-locale_ru-kg.js | 143 +
.../lib/angular-i18n/angular-locale_ru-kz.js | 143 +
.../lib/angular-i18n/angular-locale_ru-md.js | 143 +
.../lib/angular-i18n/angular-locale_ru-ru.js | 143 +
.../lib/angular-i18n/angular-locale_ru-ua.js | 143 +
.../lib/angular-i18n/angular-locale_ru.js | 143 +
.../lib/angular-i18n/angular-locale_rw-rw.js | 143 +
.../lib/angular-i18n/angular-locale_rw.js | 143 +
.../lib/angular-i18n/angular-locale_rwk-tz.js | 143 +
.../lib/angular-i18n/angular-locale_rwk.js | 143 +
.../lib/angular-i18n/angular-locale_sah-ru.js | 143 +
.../lib/angular-i18n/angular-locale_sah.js | 143 +
.../lib/angular-i18n/angular-locale_saq-ke.js | 143 +
.../lib/angular-i18n/angular-locale_saq.js | 143 +
.../lib/angular-i18n/angular-locale_sbp-tz.js | 143 +
.../lib/angular-i18n/angular-locale_sbp.js | 143 +
.../lib/angular-i18n/angular-locale_se-fi.js | 143 +
.../lib/angular-i18n/angular-locale_se-no.js | 143 +
.../lib/angular-i18n/angular-locale_se-se.js | 143 +
.../lib/angular-i18n/angular-locale_se.js | 143 +
.../lib/angular-i18n/angular-locale_seh-mz.js | 143 +
.../lib/angular-i18n/angular-locale_seh.js | 143 +
.../lib/angular-i18n/angular-locale_ses-ml.js | 143 +
.../lib/angular-i18n/angular-locale_ses.js | 143 +
.../lib/angular-i18n/angular-locale_sg-cf.js | 143 +
.../lib/angular-i18n/angular-locale_sg.js | 143 +
.../lib/angular-i18n/angular-locale_sh.js | 143 +
.../angular-locale_shi-latn-ma.js | 143 +
.../angular-i18n/angular-locale_shi-latn.js | 143 +
.../angular-locale_shi-tfng-ma.js | 143 +
.../angular-i18n/angular-locale_shi-tfng.js | 143 +
.../lib/angular-i18n/angular-locale_shi.js | 143 +
.../lib/angular-i18n/angular-locale_si-lk.js | 143 +
.../lib/angular-i18n/angular-locale_si.js | 143 +
.../lib/angular-i18n/angular-locale_sk-sk.js | 143 +
.../lib/angular-i18n/angular-locale_sk.js | 143 +
.../lib/angular-i18n/angular-locale_sl-si.js | 143 +
.../lib/angular-i18n/angular-locale_sl.js | 143 +
.../lib/angular-i18n/angular-locale_smn-fi.js | 143 +
.../lib/angular-i18n/angular-locale_smn.js | 143 +
.../lib/angular-i18n/angular-locale_sn-zw.js | 143 +
.../lib/angular-i18n/angular-locale_sn.js | 143 +
.../lib/angular-i18n/angular-locale_so-dj.js | 143 +
.../lib/angular-i18n/angular-locale_so-et.js | 143 +
.../lib/angular-i18n/angular-locale_so-ke.js | 143 +
.../lib/angular-i18n/angular-locale_so-so.js | 143 +
.../lib/angular-i18n/angular-locale_so.js | 143 +
.../lib/angular-i18n/angular-locale_sq-al.js | 125 +
.../lib/angular-i18n/angular-locale_sq-mk.js | 125 +
.../lib/angular-i18n/angular-locale_sq-xk.js | 125 +
.../lib/angular-i18n/angular-locale_sq.js | 125 +
.../angular-i18n/angular-locale_sr-cyrl-ba.js | 143 +
.../angular-i18n/angular-locale_sr-cyrl-me.js | 143 +
.../angular-i18n/angular-locale_sr-cyrl-rs.js | 143 +
.../angular-i18n/angular-locale_sr-cyrl-xk.js | 143 +
.../angular-i18n/angular-locale_sr-cyrl.js | 143 +
.../angular-i18n/angular-locale_sr-latn-ba.js | 143 +
.../angular-i18n/angular-locale_sr-latn-me.js | 143 +
.../angular-i18n/angular-locale_sr-latn-rs.js | 143 +
.../angular-i18n/angular-locale_sr-latn-xk.js | 143 +
.../angular-i18n/angular-locale_sr-latn.js | 143 +
.../lib/angular-i18n/angular-locale_sr.js | 143 +
.../lib/angular-i18n/angular-locale_ss-sz.js | 128 +
.../lib/angular-i18n/angular-locale_ss-za.js | 128 +
.../lib/angular-i18n/angular-locale_ss.js | 128 +
.../lib/angular-i18n/angular-locale_ssy-er.js | 128 +
.../lib/angular-i18n/angular-locale_ssy.js | 128 +
.../lib/angular-i18n/angular-locale_st-ls.js | 115 +
.../lib/angular-i18n/angular-locale_st-za.js | 115 +
.../lib/angular-i18n/angular-locale_st.js | 115 +
.../lib/angular-i18n/angular-locale_sv-ax.js | 143 +
.../lib/angular-i18n/angular-locale_sv-fi.js | 143 +
.../lib/angular-i18n/angular-locale_sv-se.js | 143 +
.../lib/angular-i18n/angular-locale_sv.js | 143 +
.../lib/angular-i18n/angular-locale_sw-cd.js | 143 +
.../lib/angular-i18n/angular-locale_sw-ke.js | 143 +
.../lib/angular-i18n/angular-locale_sw-tz.js | 143 +
.../lib/angular-i18n/angular-locale_sw-ug.js | 143 +
.../lib/angular-i18n/angular-locale_sw.js | 143 +
.../lib/angular-i18n/angular-locale_swc-cd.js | 128 +
.../lib/angular-i18n/angular-locale_swc.js | 128 +
.../lib/angular-i18n/angular-locale_ta-in.js | 125 +
.../lib/angular-i18n/angular-locale_ta-lk.js | 125 +
.../lib/angular-i18n/angular-locale_ta-my.js | 125 +
.../lib/angular-i18n/angular-locale_ta-sg.js | 125 +
.../lib/angular-i18n/angular-locale_ta.js | 125 +
.../lib/angular-i18n/angular-locale_te-in.js | 125 +
.../lib/angular-i18n/angular-locale_te.js | 125 +
.../lib/angular-i18n/angular-locale_teo-ke.js | 143 +
.../lib/angular-i18n/angular-locale_teo-ug.js | 143 +
.../lib/angular-i18n/angular-locale_teo.js | 143 +
.../angular-i18n/angular-locale_tg-cyrl-tj.js | 115 +
.../angular-i18n/angular-locale_tg-cyrl.js | 115 +
.../lib/angular-i18n/angular-locale_tg.js | 115 +
.../lib/angular-i18n/angular-locale_th-th.js | 125 +
.../lib/angular-i18n/angular-locale_th.js | 125 +
.../lib/angular-i18n/angular-locale_ti-er.js | 143 +
.../lib/angular-i18n/angular-locale_ti-et.js | 143 +
.../lib/angular-i18n/angular-locale_ti.js | 143 +
.../lib/angular-i18n/angular-locale_tig-er.js | 115 +
.../lib/angular-i18n/angular-locale_tig.js | 115 +
.../lib/angular-i18n/angular-locale_tk-tm.js | 143 +
.../lib/angular-i18n/angular-locale_tk.js | 143 +
.../lib/angular-i18n/angular-locale_tl.js | 143 +
.../lib/angular-i18n/angular-locale_tn-bw.js | 128 +
.../lib/angular-i18n/angular-locale_tn-za.js | 128 +
.../lib/angular-i18n/angular-locale_tn.js | 128 +
.../lib/angular-i18n/angular-locale_to-to.js | 143 +
.../lib/angular-i18n/angular-locale_to.js | 143 +
.../lib/angular-i18n/angular-locale_tr-cy.js | 125 +
.../lib/angular-i18n/angular-locale_tr-tr.js | 125 +
.../lib/angular-i18n/angular-locale_tr.js | 125 +
.../lib/angular-i18n/angular-locale_ts-za.js | 128 +
.../lib/angular-i18n/angular-locale_ts.js | 128 +
.../lib/angular-i18n/angular-locale_twq-ne.js | 143 +
.../lib/angular-i18n/angular-locale_twq.js | 143 +
.../angular-locale_tzm-latn-ma.js | 143 +
.../angular-i18n/angular-locale_tzm-latn.js | 143 +
.../lib/angular-i18n/angular-locale_tzm-ma.js | 143 +
.../lib/angular-i18n/angular-locale_tzm.js | 143 +
.../angular-i18n/angular-locale_ug-arab-cn.js | 143 +
.../angular-i18n/angular-locale_ug-arab.js | 143 +
.../lib/angular-i18n/angular-locale_ug-cn.js | 143 +
.../lib/angular-i18n/angular-locale_ug.js | 143 +
.../lib/angular-i18n/angular-locale_uk-ua.js | 143 +
.../lib/angular-i18n/angular-locale_uk.js | 143 +
.../lib/angular-i18n/angular-locale_ur-in.js | 143 +
.../lib/angular-i18n/angular-locale_ur-pk.js | 143 +
.../lib/angular-i18n/angular-locale_ur.js | 143 +
.../angular-i18n/angular-locale_uz-arab-af.js | 125 +
.../angular-i18n/angular-locale_uz-arab.js | 125 +
.../angular-i18n/angular-locale_uz-cyrl-uz.js | 125 +
.../angular-i18n/angular-locale_uz-cyrl.js | 125 +
.../angular-i18n/angular-locale_uz-latn-uz.js | 125 +
.../angular-i18n/angular-locale_uz-latn.js | 125 +
.../lib/angular-i18n/angular-locale_uz.js | 125 +
.../angular-locale_vai-latn-lr.js | 143 +
.../angular-i18n/angular-locale_vai-latn.js | 143 +
.../angular-locale_vai-vaii-lr.js | 143 +
.../angular-i18n/angular-locale_vai-vaii.js | 143 +
.../lib/angular-i18n/angular-locale_vai.js | 143 +
.../lib/angular-i18n/angular-locale_ve-za.js | 128 +
.../lib/angular-i18n/angular-locale_ve.js | 128 +
.../lib/angular-i18n/angular-locale_vi-vn.js | 125 +
.../lib/angular-i18n/angular-locale_vi.js | 125 +
.../lib/angular-i18n/angular-locale_vo-001.js | 143 +
.../lib/angular-i18n/angular-locale_vo.js | 143 +
.../lib/angular-i18n/angular-locale_vun-tz.js | 143 +
.../lib/angular-i18n/angular-locale_vun.js | 143 +
.../lib/angular-i18n/angular-locale_wae-ch.js | 143 +
.../lib/angular-i18n/angular-locale_wae.js | 143 +
.../lib/angular-i18n/angular-locale_wal-et.js | 115 +
.../lib/angular-i18n/angular-locale_wal.js | 115 +
.../lib/angular-i18n/angular-locale_xh-za.js | 115 +
.../lib/angular-i18n/angular-locale_xh.js | 115 +
.../lib/angular-i18n/angular-locale_xog-ug.js | 143 +
.../lib/angular-i18n/angular-locale_xog.js | 143 +
.../lib/angular-i18n/angular-locale_yav-cm.js | 143 +
.../lib/angular-i18n/angular-locale_yav.js | 143 +
.../lib/angular-i18n/angular-locale_yi-001.js | 143 +
.../lib/angular-i18n/angular-locale_yi.js | 143 +
.../lib/angular-i18n/angular-locale_yo-bj.js | 143 +
.../lib/angular-i18n/angular-locale_yo-ng.js | 143 +
.../lib/angular-i18n/angular-locale_yo.js | 143 +
.../lib/angular-i18n/angular-locale_yue-hk.js | 143 +
.../lib/angular-i18n/angular-locale_yue.js | 143 +
.../lib/angular-i18n/angular-locale_zgh-ma.js | 143 +
.../lib/angular-i18n/angular-locale_zgh.js | 143 +
.../lib/angular-i18n/angular-locale_zh-cn.js | 125 +
.../angular-i18n/angular-locale_zh-hans-cn.js | 125 +
.../angular-i18n/angular-locale_zh-hans-hk.js | 125 +
.../angular-i18n/angular-locale_zh-hans-mo.js | 125 +
.../angular-i18n/angular-locale_zh-hans-sg.js | 125 +
.../angular-i18n/angular-locale_zh-hans.js | 125 +
.../angular-i18n/angular-locale_zh-hant-hk.js | 125 +
.../angular-i18n/angular-locale_zh-hant-mo.js | 125 +
.../angular-i18n/angular-locale_zh-hant-tw.js | 125 +
.../angular-i18n/angular-locale_zh-hant.js | 125 +
.../lib/angular-i18n/angular-locale_zh-hk.js | 125 +
.../lib/angular-i18n/angular-locale_zh-tw.js | 125 +
.../lib/angular-i18n/angular-locale_zh.js | 125 +
.../lib/angular-i18n/angular-locale_zu-za.js | 125 +
.../lib/angular-i18n/angular-locale_zu.js | 125 +
.../angular-local-storage.min.js | 9 +
.../angular-local-storage.min.js.map | 1 +
.../lib/angular-messages/angular-messages.js | 829 +
.../lib/angular-mocks/angular-mocks.js | 3757 ++
.../lib/angular-route/angular-route.js | 1266 +
.../lib/angular-sanitize/angular-sanitize.js | 913 +
.../lib/angular-touch/angular-touch.js | 368 +
.../lib/angular-ui-sortable/sortable.js | 695 +
.../Umbraco/lib/angular/angular.js | 36221 ++++++++++++++++
.../Umbraco/lib/animejs/anime.min.js | 33 +
.../lib/bootstrap-social/bootstrap-social.css | 147 +
.../bootstrap/css/bootstrap-responsive.css | 1036 +
.../css/bootstrap-responsive.min.css | 9 +
.../Umbraco/lib/bootstrap/css/bootstrap.css | 9 +
.../lib/bootstrap/css/bootstrap.min.3.0.1.css | 9 +
.../lib/bootstrap/css/bootstrap.min.css | 9 +
.../Umbraco/lib/bootstrap/css/responsive.css | 9 +
.../img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes
.../bootstrap/img/glyphicons-halflings.png | Bin 0 -> 12799 bytes
.../Umbraco/lib/bootstrap/less/accordion.less | 34 +
.../Umbraco/lib/bootstrap/less/alerts.less | 79 +
.../Umbraco/lib/bootstrap/less/bootstrap.less | 63 +
.../lib/bootstrap/less/breadcrumbs.less | 23 +
.../lib/bootstrap/less/button-groups.less | 226 +
.../Umbraco/lib/bootstrap/less/buttons.less | 208 +
.../Umbraco/lib/bootstrap/less/carousel.less | 158 +
.../Umbraco/lib/bootstrap/less/close.less | 32 +
.../Umbraco/lib/bootstrap/less/code.less | 60 +
.../bootstrap/less/component-animations.less | 22 +
.../Umbraco/lib/bootstrap/less/dropdowns.less | 225 +
.../Umbraco/lib/bootstrap/less/forms.less | 675 +
.../Umbraco/lib/bootstrap/less/grid.less | 21 +
.../Umbraco/lib/bootstrap/less/hero-unit.less | 25 +
.../lib/bootstrap/less/labels-badges.less | 84 +
.../Umbraco/lib/bootstrap/less/layouts.less | 16 +
.../Umbraco/lib/bootstrap/less/media.less | 55 +
.../Umbraco/lib/bootstrap/less/mixins.less | 611 +
.../Umbraco/lib/bootstrap/less/modals.less | 95 +
.../Umbraco/lib/bootstrap/less/navbar.less | 491 +
.../Umbraco/lib/bootstrap/less/navs.less | 409 +
.../Umbraco/lib/bootstrap/less/pager.less | 43 +
.../lib/bootstrap/less/pagination.less | 122 +
.../Umbraco/lib/bootstrap/less/popovers.less | 131 +
.../lib/bootstrap/less/progress-bars.less | 94 +
.../Umbraco/lib/bootstrap/less/reset.less | 215 +
.../bootstrap/less/responsive-1200px-min.less | 28 +
.../bootstrap/less/responsive-767px-max.less | 193 +
.../less/responsive-768px-979px.less | 19 +
.../lib/bootstrap/less/responsive-navbar.less | 189 +
.../bootstrap/less/responsive-utilities.less | 59 +
.../lib/bootstrap/less/responsive.less | 48 +
.../lib/bootstrap/less/scaffolding.less | 58 +
.../Umbraco/lib/bootstrap/less/sprites.less | 196 +
.../Umbraco/lib/bootstrap/less/tables.less | 243 +
.../lib/bootstrap/less/tests/buttons.html | 139 +
.../lib/bootstrap/less/tests/css-tests.css | 144 +
.../lib/bootstrap/less/tests/css-tests.html | 1399 +
.../less/tests/forms-responsive.html | 71 +
.../lib/bootstrap/less/tests/forms.html | 179 +
.../less/tests/navbar-fixed-top.html | 104 +
.../less/tests/navbar-static-top.html | 107 +
.../lib/bootstrap/less/tests/navbar.html | 107 +
.../lib/bootstrap/less/thumbnails.less | 58 +
.../Umbraco/lib/bootstrap/less/tooltip.less | 70 +
.../Umbraco/lib/bootstrap/less/type.less | 246 +
.../Umbraco/lib/bootstrap/less/utilities.less | 30 +
.../Umbraco/lib/bootstrap/less/variables.less | 301 +
.../Umbraco/lib/bootstrap/less/wells.less | 29 +
.../Umbraco/lib/chart.js/chart.min.js | 10 +
.../Umbraco/lib/clipboard/clipboard.min.js | 7 +
.../Umbraco/lib/flatpickr/flatpickr.css | 741 +
.../Umbraco/lib/flatpickr/flatpickr.js | 2174 +
.../Umbraco/lib/flatpickr/l10n/ar.js | 29 +
.../Umbraco/lib/flatpickr/l10n/at.js | 34 +
.../Umbraco/lib/flatpickr/l10n/be.js | 39 +
.../Umbraco/lib/flatpickr/l10n/bg.js | 29 +
.../Umbraco/lib/flatpickr/l10n/bn.js | 29 +
.../Umbraco/lib/flatpickr/l10n/cat.js | 51 +
.../Umbraco/lib/flatpickr/l10n/cs.js | 39 +
.../Umbraco/lib/flatpickr/l10n/cy.js | 40 +
.../Umbraco/lib/flatpickr/l10n/da.js | 35 +
.../Umbraco/lib/flatpickr/l10n/de.js | 34 +
.../Umbraco/lib/flatpickr/l10n/default.js | 50 +
.../Umbraco/lib/flatpickr/l10n/eo.js | 37 +
.../Umbraco/lib/flatpickr/l10n/es.js | 34 +
.../Umbraco/lib/flatpickr/l10n/et.js | 37 +
.../Umbraco/lib/flatpickr/l10n/fa.js | 33 +
.../Umbraco/lib/flatpickr/l10n/fi.js | 33 +
.../Umbraco/lib/flatpickr/l10n/fr.js | 38 +
.../Umbraco/lib/flatpickr/l10n/gr.js | 38 +
.../Umbraco/lib/flatpickr/l10n/he.js | 29 +
.../Umbraco/lib/flatpickr/l10n/hi.js | 29 +
.../Umbraco/lib/flatpickr/l10n/hr.js | 30 +
.../Umbraco/lib/flatpickr/l10n/hu.js | 36 +
.../Umbraco/lib/flatpickr/l10n/id.js | 33 +
.../Umbraco/lib/flatpickr/l10n/index.js | 1180 +
.../Umbraco/lib/flatpickr/l10n/it.js | 37 +
.../Umbraco/lib/flatpickr/l10n/ja.js | 29 +
.../Umbraco/lib/flatpickr/l10n/km.js | 38 +
.../Umbraco/lib/flatpickr/l10n/ko.js | 32 +
.../Umbraco/lib/flatpickr/l10n/kz.js | 39 +
.../Umbraco/lib/flatpickr/l10n/lt.js | 36 +
.../Umbraco/lib/flatpickr/l10n/lv.js | 31 +
.../Umbraco/lib/flatpickr/l10n/mk.js | 32 +
.../Umbraco/lib/flatpickr/l10n/mn.js | 31 +
.../Umbraco/lib/flatpickr/l10n/ms.js | 32 +
.../Umbraco/lib/flatpickr/l10n/my.js | 33 +
.../Umbraco/lib/flatpickr/l10n/nl.js | 38 +
.../Umbraco/lib/flatpickr/l10n/no.js | 37 +
.../Umbraco/lib/flatpickr/l10n/pa.js | 29 +
.../Umbraco/lib/flatpickr/l10n/pl.js | 37 +
.../Umbraco/lib/flatpickr/l10n/pt.js | 30 +
.../Umbraco/lib/flatpickr/l10n/ro.js | 33 +
.../Umbraco/lib/flatpickr/l10n/ru.js | 39 +
.../Umbraco/lib/flatpickr/l10n/si.js | 29 +
.../Umbraco/lib/flatpickr/l10n/sk.js | 34 +
.../Umbraco/lib/flatpickr/l10n/sl.js | 34 +
.../Umbraco/lib/flatpickr/l10n/sq.js | 29 +
.../Umbraco/lib/flatpickr/l10n/sr.js | 32 +
.../Umbraco/lib/flatpickr/l10n/sv.js | 34 +
.../Umbraco/lib/flatpickr/l10n/th.js | 36 +
.../Umbraco/lib/flatpickr/l10n/tr.js | 38 +
.../Umbraco/lib/flatpickr/l10n/uk.js | 30 +
.../Umbraco/lib/flatpickr/l10n/vn.js | 30 +
.../Umbraco/lib/flatpickr/l10n/zh.js | 33 +
.../lib/font-awesome/css/font-awesome.min.css | 4 +
.../lib/font-awesome/fonts/FontAwesome.otf | Bin 0 -> 134808 bytes
.../fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
.../fonts/fontawesome-webfont.svg | 2671 ++
.../fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
.../fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
.../jquery.ui.touch-punch.min.js | 11 +
.../Umbraco/lib/jquery-ui/jquery-ui.min.js | 13 +
.../Umbraco/lib/jquery/jquery.min.js | 2 +
.../Umbraco/lib/jquery/jquery.min.map | 1 +
.../Umbraco/lib/jsdiff/diff.min.js | 416 +
.../Umbraco/lib/lazyload-js/lazyload.min.js | 1 +
.../lib/markdown/markdown.converter.js | 1344 +
.../Umbraco/lib/markdown/markdown.css | 79 +
.../Umbraco/lib/markdown/markdown.editor.js | 2110 +
.../lib/markdown/markdown.sanitizer.js | 111 +
UmbracoPackages/Umbraco/lib/markdown/red.css | 6 +
UmbracoPackages/Umbraco/lib/moment/af.js | 72 +
UmbracoPackages/Umbraco/lib/moment/ar-dz.js | 58 +
UmbracoPackages/Umbraco/lib/moment/ar-kw.js | 58 +
UmbracoPackages/Umbraco/lib/moment/ar-ly.js | 121 +
UmbracoPackages/Umbraco/lib/moment/ar-ma.js | 58 +
UmbracoPackages/Umbraco/lib/moment/ar-sa.js | 103 +
UmbracoPackages/Umbraco/lib/moment/ar-tn.js | 58 +
UmbracoPackages/Umbraco/lib/moment/ar.js | 134 +
UmbracoPackages/Umbraco/lib/moment/az.js | 104 +
UmbracoPackages/Umbraco/lib/moment/be.js | 131 +
UmbracoPackages/Umbraco/lib/moment/bg.js | 89 +
UmbracoPackages/Umbraco/lib/moment/bm.js | 57 +
UmbracoPackages/Umbraco/lib/moment/bn.js | 118 +
UmbracoPackages/Umbraco/lib/moment/bo.js | 118 +
UmbracoPackages/Umbraco/lib/moment/br.js | 107 +
UmbracoPackages/Umbraco/lib/moment/bs.js | 150 +
UmbracoPackages/Umbraco/lib/moment/ca.js | 87 +
UmbracoPackages/Umbraco/lib/moment/cs.js | 178 +
UmbracoPackages/Umbraco/lib/moment/cv.js | 62 +
UmbracoPackages/Umbraco/lib/moment/cy.js | 79 +
UmbracoPackages/Umbraco/lib/moment/da.js | 59 +
UmbracoPackages/Umbraco/lib/moment/de-at.js | 75 +
UmbracoPackages/Umbraco/lib/moment/de-ch.js | 75 +
UmbracoPackages/Umbraco/lib/moment/de.js | 75 +
UmbracoPackages/Umbraco/lib/moment/dv.js | 98 +
UmbracoPackages/Umbraco/lib/moment/el.js | 99 +
UmbracoPackages/Umbraco/lib/moment/en-au.js | 66 +
UmbracoPackages/Umbraco/lib/moment/en-ca.js | 62 +
UmbracoPackages/Umbraco/lib/moment/en-gb.js | 66 +
UmbracoPackages/Umbraco/lib/moment/en-ie.js | 66 +
UmbracoPackages/Umbraco/lib/moment/en-il.js | 61 +
UmbracoPackages/Umbraco/lib/moment/en-nz.js | 66 +
UmbracoPackages/Umbraco/lib/moment/eo.js | 70 +
UmbracoPackages/Umbraco/lib/moment/es-do.js | 91 +
UmbracoPackages/Umbraco/lib/moment/es-us.js | 82 +
UmbracoPackages/Umbraco/lib/moment/es.js | 91 +
UmbracoPackages/Umbraco/lib/moment/et.js | 79 +
UmbracoPackages/Umbraco/lib/moment/eu.js | 65 +
UmbracoPackages/Umbraco/lib/moment/fa.js | 105 +
UmbracoPackages/Umbraco/lib/moment/fi.js | 108 +
UmbracoPackages/Umbraco/lib/moment/fo.js | 59 +
UmbracoPackages/Umbraco/lib/moment/fr-ca.js | 73 +
UmbracoPackages/Umbraco/lib/moment/fr-ch.js | 77 +
UmbracoPackages/Umbraco/lib/moment/fr.js | 82 +
UmbracoPackages/Umbraco/lib/moment/fy.js | 74 +
UmbracoPackages/Umbraco/lib/moment/gd.js | 75 +
UmbracoPackages/Umbraco/lib/moment/gl.js | 76 +
.../Umbraco/lib/moment/gom-latn.js | 122 +
UmbracoPackages/Umbraco/lib/moment/gu.js | 123 +
UmbracoPackages/Umbraco/lib/moment/he.js | 96 +
UmbracoPackages/Umbraco/lib/moment/hi.js | 123 +
UmbracoPackages/Umbraco/lib/moment/hr.js | 153 +
UmbracoPackages/Umbraco/lib/moment/hu.js | 109 +
UmbracoPackages/Umbraco/lib/moment/hy-am.js | 94 +
UmbracoPackages/Umbraco/lib/moment/id.js | 81 +
UmbracoPackages/Umbraco/lib/moment/is.js | 131 +
UmbracoPackages/Umbraco/lib/moment/it.js | 68 +
UmbracoPackages/Umbraco/lib/moment/ja.js | 91 +
UmbracoPackages/Umbraco/lib/moment/jv.js | 81 +
UmbracoPackages/Umbraco/lib/moment/ka.js | 88 +
UmbracoPackages/Umbraco/lib/moment/kk.js | 86 +
UmbracoPackages/Umbraco/lib/moment/km.js | 109 +
UmbracoPackages/Umbraco/lib/moment/kn.js | 125 +
UmbracoPackages/Umbraco/lib/moment/ko.js | 80 +
UmbracoPackages/Umbraco/lib/moment/ky.js | 86 +
UmbracoPackages/Umbraco/lib/moment/lb.js | 135 +
UmbracoPackages/Umbraco/lib/moment/lo.js | 69 +
UmbracoPackages/Umbraco/lib/moment/lt.js | 117 +
UmbracoPackages/Umbraco/lib/moment/lv.js | 96 +
UmbracoPackages/Umbraco/lib/moment/me.js | 111 +
UmbracoPackages/Umbraco/lib/moment/mi.js | 63 +
UmbracoPackages/Umbraco/lib/moment/mk.js | 89 +
UmbracoPackages/Umbraco/lib/moment/ml.js | 80 +
UmbracoPackages/Umbraco/lib/moment/mn.js | 103 +
.../Umbraco/lib/moment/moment.min.js | 1 +
UmbracoPackages/Umbraco/lib/moment/mr.js | 159 +
UmbracoPackages/Umbraco/lib/moment/ms-my.js | 81 +
UmbracoPackages/Umbraco/lib/moment/ms.js | 81 +
UmbracoPackages/Umbraco/lib/moment/mt.js | 59 +
UmbracoPackages/Umbraco/lib/moment/my.js | 92 +
UmbracoPackages/Umbraco/lib/moment/nb.js | 61 +
UmbracoPackages/Umbraco/lib/moment/ne.js | 122 +
UmbracoPackages/Umbraco/lib/moment/nl-be.js | 86 +
UmbracoPackages/Umbraco/lib/moment/nl.js | 86 +
UmbracoPackages/Umbraco/lib/moment/nn.js | 59 +
UmbracoPackages/Umbraco/lib/moment/pa-in.js | 123 +
UmbracoPackages/Umbraco/lib/moment/pl.js | 125 +
UmbracoPackages/Umbraco/lib/moment/pt-br.js | 60 +
UmbracoPackages/Umbraco/lib/moment/pt.js | 64 +
UmbracoPackages/Umbraco/lib/moment/ro.js | 74 +
UmbracoPackages/Umbraco/lib/moment/ru.js | 181 +
UmbracoPackages/Umbraco/lib/moment/sd.js | 97 +
UmbracoPackages/Umbraco/lib/moment/se.js | 59 +
UmbracoPackages/Umbraco/lib/moment/si.js | 70 +
UmbracoPackages/Umbraco/lib/moment/sk.js | 155 +
UmbracoPackages/Umbraco/lib/moment/sl.js | 172 +
UmbracoPackages/Umbraco/lib/moment/sq.js | 67 +
UmbracoPackages/Umbraco/lib/moment/sr-cyrl.js | 110 +
UmbracoPackages/Umbraco/lib/moment/sr.js | 110 +
UmbracoPackages/Umbraco/lib/moment/ss.js | 87 +
UmbracoPackages/Umbraco/lib/moment/sv.js | 68 +
UmbracoPackages/Umbraco/lib/moment/sw.js | 58 +
UmbracoPackages/Umbraco/lib/moment/ta.js | 128 +
UmbracoPackages/Umbraco/lib/moment/te.js | 88 +
UmbracoPackages/Umbraco/lib/moment/tet.js | 66 +
UmbracoPackages/Umbraco/lib/moment/tg.js | 115 +
UmbracoPackages/Umbraco/lib/moment/th.js | 66 +
UmbracoPackages/Umbraco/lib/moment/tl-ph.js | 61 +
UmbracoPackages/Umbraco/lib/moment/tlh.js | 121 +
UmbracoPackages/Umbraco/lib/moment/tr.js | 93 +
UmbracoPackages/Umbraco/lib/moment/tzl.js | 90 +
.../Umbraco/lib/moment/tzm-latn.js | 57 +
UmbracoPackages/Umbraco/lib/moment/tzm.js | 57 +
UmbracoPackages/Umbraco/lib/moment/ug-cn.js | 118 +
UmbracoPackages/Umbraco/lib/moment/uk.js | 150 +
UmbracoPackages/Umbraco/lib/moment/ur.js | 97 +
UmbracoPackages/Umbraco/lib/moment/uz-latn.js | 57 +
UmbracoPackages/Umbraco/lib/moment/uz.js | 57 +
UmbracoPackages/Umbraco/lib/moment/vi.js | 78 +
.../Umbraco/lib/moment/x-pseudo.js | 67 +
UmbracoPackages/Umbraco/lib/moment/yo.js | 59 +
UmbracoPackages/Umbraco/lib/moment/zh-cn.js | 109 +
UmbracoPackages/Umbraco/lib/moment/zh-hk.js | 102 +
UmbracoPackages/Umbraco/lib/moment/zh-tw.js | 102 +
.../lib/ng-file-upload/ng-file-upload.min.js | 3 +
.../Umbraco/lib/nouislider/nouislider.min.css | 2 +
.../Umbraco/lib/nouislider/nouislider.min.js | 2 +
.../Umbraco/lib/signalr/jquery.signalR.js | 3119 ++
.../Umbraco/lib/spectrum/spectrum.css | 507 +
.../Umbraco/lib/spectrum/spectrum.js | 2323 +
.../Umbraco/lib/tinymce/langs/da.js | 219 +
.../Umbraco/lib/tinymce/langs/de.js | 219 +
.../Umbraco/lib/tinymce/langs/en.js | 1 +
.../Umbraco/lib/tinymce/langs/en_us.js | 1 +
.../Umbraco/lib/tinymce/langs/fi.js | 219 +
.../Umbraco/lib/tinymce/langs/fr.js | 1 +
.../Umbraco/lib/tinymce/langs/he.js | 1 +
.../Umbraco/lib/tinymce/langs/it.js | 219 +
.../Umbraco/lib/tinymce/langs/ja.js | 219 +
.../Umbraco/lib/tinymce/langs/nl.js | 219 +
.../Umbraco/lib/tinymce/langs/no.js | 1 +
.../Umbraco/lib/tinymce/langs/pl.js | 219 +
.../Umbraco/lib/tinymce/langs/pt.js | 1 +
.../Umbraco/lib/tinymce/langs/ru.js | 219 +
.../Umbraco/lib/tinymce/langs/sv.js | 1 +
.../Umbraco/lib/tinymce/langs/zh.js | 1 +
.../lib/tinymce/plugins/advlist/index.js | 7 +
.../lib/tinymce/plugins/advlist/plugin.js | 160 +
.../lib/tinymce/plugins/advlist/plugin.min.js | 1 +
.../lib/tinymce/plugins/anchor/index.js | 7 +
.../lib/tinymce/plugins/anchor/plugin.js | 118 +
.../lib/tinymce/plugins/anchor/plugin.min.js | 1 +
.../lib/tinymce/plugins/autolink/index.js | 7 +
.../lib/tinymce/plugins/autolink/plugin.js | 180 +
.../tinymce/plugins/autolink/plugin.min.js | 1 +
.../lib/tinymce/plugins/autoresize/index.js | 7 +
.../lib/tinymce/plugins/autoresize/plugin.js | 169 +
.../tinymce/plugins/autoresize/plugin.min.js | 1 +
.../lib/tinymce/plugins/autosave/index.js | 7 +
.../lib/tinymce/plugins/autosave/plugin.js | 216 +
.../tinymce/plugins/autosave/plugin.min.js | 1 +
.../lib/tinymce/plugins/bbcode/index.js | 7 +
.../lib/tinymce/plugins/bbcode/plugin.js | 101 +
.../lib/tinymce/plugins/bbcode/plugin.min.js | 1 +
.../lib/tinymce/plugins/charmap/index.js | 7 +
.../lib/tinymce/plugins/charmap/plugin.js | 1275 +
.../lib/tinymce/plugins/charmap/plugin.min.js | 1 +
.../Umbraco/lib/tinymce/plugins/code/index.js | 7 +
.../lib/tinymce/plugins/code/plugin.js | 94 +
.../lib/tinymce/plugins/code/plugin.min.js | 1 +
.../tinymce/plugins/codesample/css/prism.css | 138 +
.../lib/tinymce/plugins/codesample/index.js | 7 +
.../lib/tinymce/plugins/codesample/plugin.js | 967 +
.../tinymce/plugins/codesample/plugin.min.js | 1 +
.../lib/tinymce/plugins/colorpicker/index.js | 7 +
.../lib/tinymce/plugins/colorpicker/plugin.js | 126 +
.../tinymce/plugins/colorpicker/plugin.min.js | 1 +
.../lib/tinymce/plugins/contextmenu/index.js | 7 +
.../lib/tinymce/plugins/contextmenu/plugin.js | 168 +
.../tinymce/plugins/contextmenu/plugin.min.js | 1 +
.../tinymce/plugins/directionality/index.js | 7 +
.../tinymce/plugins/directionality/plugin.js | 66 +
.../plugins/directionality/plugin.min.js | 1 +
.../plugins/emoticons/img/smiley-cool.gif | Bin 0 -> 354 bytes
.../plugins/emoticons/img/smiley-cry.gif | Bin 0 -> 329 bytes
.../emoticons/img/smiley-embarassed.gif | Bin 0 -> 331 bytes
.../emoticons/img/smiley-foot-in-mouth.gif | Bin 0 -> 342 bytes
.../plugins/emoticons/img/smiley-frown.gif | Bin 0 -> 340 bytes
.../plugins/emoticons/img/smiley-innocent.gif | Bin 0 -> 336 bytes
.../plugins/emoticons/img/smiley-kiss.gif | Bin 0 -> 338 bytes
.../plugins/emoticons/img/smiley-laughing.gif | Bin 0 -> 343 bytes
.../emoticons/img/smiley-money-mouth.gif | Bin 0 -> 321 bytes
.../plugins/emoticons/img/smiley-sealed.gif | Bin 0 -> 323 bytes
.../plugins/emoticons/img/smiley-smile.gif | Bin 0 -> 344 bytes
.../emoticons/img/smiley-surprised.gif | Bin 0 -> 338 bytes
.../emoticons/img/smiley-tongue-out.gif | Bin 0 -> 328 bytes
.../emoticons/img/smiley-undecided.gif | Bin 0 -> 337 bytes
.../plugins/emoticons/img/smiley-wink.gif | Bin 0 -> 350 bytes
.../plugins/emoticons/img/smiley-yell.gif | Bin 0 -> 336 bytes
.../lib/tinymce/plugins/emoticons/index.js | 7 +
.../lib/tinymce/plugins/emoticons/plugin.js | 87 +
.../tinymce/plugins/emoticons/plugin.min.js | 1 +
.../lib/tinymce/plugins/fullpage/index.js | 7 +
.../lib/tinymce/plugins/fullpage/plugin.js | 519 +
.../tinymce/plugins/fullpage/plugin.min.js | 1 +
.../lib/tinymce/plugins/fullscreen/index.js | 7 +
.../lib/tinymce/plugins/fullscreen/plugin.js | 177 +
.../tinymce/plugins/fullscreen/plugin.min.js | 1 +
.../lib/tinymce/plugins/help/img/logo.png | Bin 0 -> 13208 bytes
.../Umbraco/lib/tinymce/plugins/help/index.js | 7 +
.../lib/tinymce/plugins/help/plugin.js | 688 +
.../lib/tinymce/plugins/help/plugin.min.js | 1 +
.../Umbraco/lib/tinymce/plugins/hr/index.js | 7 +
.../Umbraco/lib/tinymce/plugins/hr/plugin.js | 39 +
.../lib/tinymce/plugins/hr/plugin.min.js | 1 +
.../lib/tinymce/plugins/image/index.js | 7 +
.../lib/tinymce/plugins/image/plugin.js | 1204 +
.../lib/tinymce/plugins/image/plugin.min.js | 1 +
.../lib/tinymce/plugins/imagetools/index.js | 7 +
.../lib/tinymce/plugins/imagetools/plugin.js | 3653 ++
.../tinymce/plugins/imagetools/plugin.min.js | 1 +
.../lib/tinymce/plugins/importcss/index.js | 7 +
.../lib/tinymce/plugins/importcss/plugin.js | 264 +
.../tinymce/plugins/importcss/plugin.min.js | 1 +
.../tinymce/plugins/insertdatetime/index.js | 7 +
.../tinymce/plugins/insertdatetime/plugin.js | 173 +
.../plugins/insertdatetime/plugin.min.js | 1 +
.../lib/tinymce/plugins/legacyoutput/index.js | 7 +
.../tinymce/plugins/legacyoutput/plugin.js | 220 +
.../plugins/legacyoutput/plugin.min.js | 1 +
.../Umbraco/lib/tinymce/plugins/link/index.js | 7 +
.../lib/tinymce/plugins/link/plugin.js | 713 +
.../lib/tinymce/plugins/link/plugin.min.js | 1 +
.../lib/tinymce/plugins/lists/index.js | 7 +
.../lib/tinymce/plugins/lists/plugin.js | 2181 +
.../lib/tinymce/plugins/lists/plugin.min.js | 1 +
.../lib/tinymce/plugins/media/index.js | 7 +
.../lib/tinymce/plugins/media/plugin.js | 1166 +
.../lib/tinymce/plugins/media/plugin.min.js | 1 +
.../lib/tinymce/plugins/nonbreaking/index.js | 7 +
.../lib/tinymce/plugins/nonbreaking/plugin.js | 85 +
.../tinymce/plugins/nonbreaking/plugin.min.js | 1 +
.../lib/tinymce/plugins/noneditable/index.js | 7 +
.../lib/tinymce/plugins/noneditable/plugin.js | 118 +
.../tinymce/plugins/noneditable/plugin.min.js | 1 +
.../lib/tinymce/plugins/pagebreak/index.js | 7 +
.../lib/tinymce/plugins/pagebreak/plugin.js | 109 +
.../tinymce/plugins/pagebreak/plugin.min.js | 1 +
.../lib/tinymce/plugins/paste/index.js | 7 +
.../lib/tinymce/plugins/paste/plugin.js | 1858 +
.../lib/tinymce/plugins/paste/plugin.min.js | 1 +
.../lib/tinymce/plugins/preview/index.js | 7 +
.../lib/tinymce/plugins/preview/plugin.js | 123 +
.../lib/tinymce/plugins/preview/plugin.min.js | 1 +
.../lib/tinymce/plugins/print/index.js | 7 +
.../lib/tinymce/plugins/print/plugin.js | 38 +
.../lib/tinymce/plugins/print/plugin.min.js | 1 +
.../Umbraco/lib/tinymce/plugins/save/index.js | 7 +
.../lib/tinymce/plugins/save/plugin.js | 120 +
.../lib/tinymce/plugins/save/plugin.min.js | 1 +
.../tinymce/plugins/searchreplace/index.js | 7 +
.../tinymce/plugins/searchreplace/plugin.js | 601 +
.../plugins/searchreplace/plugin.min.js | 1 +
.../lib/tinymce/plugins/spellchecker/index.js | 7 +
.../tinymce/plugins/spellchecker/plugin.js | 759 +
.../plugins/spellchecker/plugin.min.js | 1 +
.../lib/tinymce/plugins/tabfocus/index.js | 7 +
.../lib/tinymce/plugins/tabfocus/plugin.js | 124 +
.../tinymce/plugins/tabfocus/plugin.min.js | 1 +
.../lib/tinymce/plugins/table/index.js | 7 +
.../lib/tinymce/plugins/table/plugin.js | 9266 ++++
.../lib/tinymce/plugins/table/plugin.min.js | 1 +
.../lib/tinymce/plugins/template/index.js | 7 +
.../lib/tinymce/plugins/template/plugin.js | 339 +
.../tinymce/plugins/template/plugin.min.js | 1 +
.../lib/tinymce/plugins/textcolor/index.js | 7 +
.../lib/tinymce/plugins/textcolor/plugin.js | 346 +
.../tinymce/plugins/textcolor/plugin.min.js | 1 +
.../lib/tinymce/plugins/textpattern/index.js | 7 +
.../lib/tinymce/plugins/textpattern/plugin.js | 616 +
.../tinymce/plugins/textpattern/plugin.min.js | 1 +
.../Umbraco/lib/tinymce/plugins/toc/index.js | 7 +
.../Umbraco/lib/tinymce/plugins/toc/plugin.js | 228 +
.../lib/tinymce/plugins/toc/plugin.min.js | 1 +
.../plugins/visualblocks/css/visualblocks.css | 154 +
.../lib/tinymce/plugins/visualblocks/index.js | 7 +
.../tinymce/plugins/visualblocks/plugin.js | 135 +
.../plugins/visualblocks/plugin.min.js | 1 +
.../lib/tinymce/plugins/visualchars/index.js | 7 +
.../lib/tinymce/plugins/visualchars/plugin.js | 453 +
.../tinymce/plugins/visualchars/plugin.min.js | 1 +
.../lib/tinymce/plugins/wordcount/index.js | 7 +
.../lib/tinymce/plugins/wordcount/plugin.js | 406 +
.../tinymce/plugins/wordcount/plugin.min.js | 1 +
.../skins/lightgray/content.inline.min.css | 1 +
.../tinymce/skins/lightgray/content.min.css | 1 +
.../skins/lightgray/content.mobile.min.css | 1 +
.../skins/lightgray/fonts/tinymce-mobile.woff | Bin 0 -> 4624 bytes
.../skins/lightgray/fonts/tinymce-small.eot | Bin 0 -> 9492 bytes
.../skins/lightgray/fonts/tinymce-small.svg | 63 +
.../skins/lightgray/fonts/tinymce-small.ttf | Bin 0 -> 9304 bytes
.../skins/lightgray/fonts/tinymce-small.woff | Bin 0 -> 9380 bytes
.../tinymce/skins/lightgray/fonts/tinymce.eot | Bin 0 -> 18912 bytes
.../tinymce/skins/lightgray/fonts/tinymce.svg | 132 +
.../tinymce/skins/lightgray/fonts/tinymce.ttf | Bin 0 -> 18748 bytes
.../skins/lightgray/fonts/tinymce.woff | Bin 0 -> 18824 bytes
.../tinymce/skins/lightgray/img/anchor.gif | Bin 0 -> 53 bytes
.../tinymce/skins/lightgray/img/loader.gif | Bin 0 -> 2608 bytes
.../tinymce/skins/lightgray/img/object.gif | Bin 0 -> 152 bytes
.../lib/tinymce/skins/lightgray/img/trans.gif | Bin 0 -> 43 bytes
.../lib/tinymce/skins/lightgray/skin.min.css | 1 +
.../skins/lightgray/skin.mobile.min.css | 2 +
.../lib/tinymce/themes/inlite/index.js | 7 +
.../lib/tinymce/themes/inlite/theme.js | 9821 +++++
.../lib/tinymce/themes/inlite/theme.min.js | 1 +
.../lib/tinymce/themes/mobile/index.js | 7 +
.../lib/tinymce/themes/mobile/theme.js | 12634 ++++++
.../lib/tinymce/themes/mobile/theme.min.js | 1 +
.../lib/tinymce/themes/modern/index.js | 7 +
.../lib/tinymce/themes/modern/theme.js | 9627 ++++
.../lib/tinymce/themes/modern/theme.min.js | 1 +
.../Umbraco/lib/tinymce/tinymce.min.js | 2 +
.../lib/typeahead.js/typeahead.bundle.min.js | 8 +
.../Umbraco/lib/umbraco/Extensions.js | 347 +
.../Umbraco/lib/umbraco/LegacySpeechBubble.js | 76 +
.../Umbraco/lib/umbraco/NamespaceManager.js | 17 +
.../Umbraco/lib/umbraco/legacytreeicons.css | 38 +
.../Umbraco/lib/underscore/underscore-min.js | 5 +
UmbracoPackages/UmbracoPackages.csproj | 555 +
UmbracoPackages/Views/Blog.cshtml | 22 +
UmbracoPackages/Views/Blogpost.cshtml | 22 +
.../MacroPartials/FeaturedProducts.cshtml | 22 +
.../MacroPartials/LatestBlogposts.cshtml | 96 +
.../Views/Partials/CategoryLinks.cshtml | 7 +
.../Partials/Grid/Bootstrap3-Fluid.cshtml | 88 +
.../Views/Partials/Grid/Bootstrap3.cshtml | 88 +
.../Views/Partials/Grid/Editors/Base.cshtml | 24 +
.../Views/Partials/Grid/Editors/Embed.cshtml | 7 +
.../Views/Partials/Grid/Editors/Macro.cshtml | 17 +
.../Views/Partials/Grid/Editors/Media.cshtml | 25 +
.../Views/Partials/Grid/Editors/Rte.cshtml | 5 +
.../Partials/Grid/Editors/Textstring.cshtml | 24 +
.../Partials/Navigation/SubNavigation.cshtml | 11 +
.../Partials/Navigation/TopNavigation.cshtml | 12 +
.../Views/Partials/SectionHeader.cshtml | 6 +
UmbracoPackages/Views/Person.cshtml | 4 +
UmbracoPackages/Views/Product.cshtml | 45 +
UmbracoPackages/Views/Products.cshtml | 37 +
UmbracoPackages/Views/Web.config | 69 +
UmbracoPackages/Views/contact.cshtml | 55 +
UmbracoPackages/Views/contentPage.cshtml | 26 +
UmbracoPackages/Views/home.cshtml | 44 +
UmbracoPackages/Views/master.cshtml | 80 +
UmbracoPackages/Views/people.cshtml | 53 +
UmbracoPackages/Web.config | 245 +
.../BackOfficeTours/getting-started.json | 457 +
.../config/ClientDependency.config | 56 +
UmbracoPackages/config/HealthChecks.config | 26 +
UmbracoPackages/config/Lang/cs-CZ.user.xml | 3 +
UmbracoPackages/config/Lang/da-DK.user.xml | 3 +
UmbracoPackages/config/Lang/de-DE.user.xml | 3 +
UmbracoPackages/config/Lang/en-GB.user.xml | 3 +
UmbracoPackages/config/Lang/en-US.user.xml | 3 +
UmbracoPackages/config/Lang/es-ES.user.xml | 3 +
UmbracoPackages/config/Lang/fr-FR.user.xml | 3 +
UmbracoPackages/config/Lang/he-IL.user.xml | 3 +
UmbracoPackages/config/Lang/it-IT.user.xml | 3 +
UmbracoPackages/config/Lang/ja-JP.user.xml | 3 +
UmbracoPackages/config/Lang/ko-KR.user.xml | 3 +
UmbracoPackages/config/Lang/nb-NO.user.xml | 3 +
UmbracoPackages/config/Lang/nl-NL.user.xml | 3 +
UmbracoPackages/config/Lang/pl-PL.user.xml | 3 +
UmbracoPackages/config/Lang/pt-BR.user.xml | 3 +
UmbracoPackages/config/Lang/ru-RU.user.xml | 3 +
UmbracoPackages/config/Lang/sv-SE.user.xml | 3 +
UmbracoPackages/config/Lang/zh-CN.user.xml | 3 +
UmbracoPackages/config/grid.editors.config.js | 46 +
.../config/imageprocessor/cache.config | 10 +
.../config/imageprocessor/processing.config | 67 +
.../config/imageprocessor/security.config | 24 +
.../config/logviewer.searches.config.js | 42 +
UmbracoPackages/config/serilog.config | 41 +
UmbracoPackages/config/serilog.user.config | 38 +
UmbracoPackages/config/splashes/noNodes.aspx | 61 +
UmbracoPackages/config/tinyMceConfig.config | 74 +
UmbracoPackages/config/umbracoSettings.config | 114 +
.../css/umbraco-starterkit-style.css | 2904 ++
UmbracoPackages/packages.config | 109 +
.../scripts/umbraco-starterkit-app.js | 54 +
1923 files changed, 385873 insertions(+)
create mode 100644 .gitattributes
create mode 100644 .gitignore
create mode 100644 UmbracoPackages.sln
create mode 100644 UmbracoPackages/App_Plugins/Cultiv.Tabify/directives/ct-tabbed-content.html
create mode 100644 UmbracoPackages/App_Plugins/Cultiv.Tabify/directives/cttabbedcontent.directive.js
create mode 100644 UmbracoPackages/App_Plugins/Cultiv.Tabify/directives/ctvaltab.directive.js
create mode 100644 UmbracoPackages/App_Plugins/Cultiv.Tabify/interceptor.js
create mode 100644 UmbracoPackages/App_Plugins/Cultiv.Tabify/package.manifest
create mode 100644 UmbracoPackages/App_Plugins/Cultiv.Tabify/tabify.css
create mode 100644 UmbracoPackages/App_Plugins/Cultiv.Tabify/tabify.html
create mode 100644 UmbracoPackages/App_Plugins/ModelsBuilder/modelsbuilder.controller.js
create mode 100644 UmbracoPackages/App_Plugins/ModelsBuilder/modelsbuilder.html
create mode 100644 UmbracoPackages/App_Plugins/ModelsBuilder/modelsbuilder.resource.js
create mode 100644 UmbracoPackages/App_Plugins/ModelsBuilder/package.manifest
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/OsmMaps.controller.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/OsmMaps.html
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/assets/css/osmmaps.css
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/images/layers-2x.png
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/images/layers.png
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/images/marker-icon-2x.png
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/images/marker-icon.png
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/images/marker-shadow.png
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/leaflet-src.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/leaflet.css
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/leaflet.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/da-dk.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/de-de.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/en-gb.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/en-us.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/es-es.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/fr-fr.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/he-il.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/it-it.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/ja-jp.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/ko-kr.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/nb-no.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/nl-nl.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/pl-pl.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/pt-br.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/ru-ru.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/sv-se.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/langs/zh-cn.js
create mode 100644 UmbracoPackages/App_Plugins/OsmMaps/package.manifest
create mode 100644 UmbracoPackages/App_Plugins/StarterKit/StarterKitHelp.Controller.js
create mode 100644 UmbracoPackages/App_Plugins/StarterKit/backoffice/tours/create-content.json
create mode 100644 UmbracoPackages/App_Plugins/StarterKit/backoffice/tours/data-structure.json
create mode 100644 UmbracoPackages/App_Plugins/StarterKit/lang/en-GB.xml
create mode 100644 UmbracoPackages/App_Plugins/StarterKit/lang/en-US.xml
create mode 100644 UmbracoPackages/App_Plugins/StarterKit/lessons.service.js
create mode 100644 UmbracoPackages/App_Plugins/StarterKit/package.manifest
create mode 100644 UmbracoPackages/App_Plugins/StarterKit/starterkithelp.html
create mode 100644 UmbracoPackages/App_Plugins/StarterKit/tours/views/medialibrary/uploadimages.controller.js
create mode 100644 UmbracoPackages/App_Plugins/StarterKit/tours/views/medialibrary/uploadimages.html
create mode 100644 UmbracoPackages/App_Plugins/StarterKit/tours/views/validatetext.controller.js
create mode 100644 UmbracoPackages/App_Plugins/StarterKit/tours/views/validatetext.html
create mode 100644 UmbracoPackages/App_Plugins/brothers.uNesting/_nc.js
create mode 100644 UmbracoPackages/App_Plugins/brothers.uNesting/interceptor.js
create mode 100644 UmbracoPackages/App_Plugins/brothers.uNesting/package.manifest
create mode 100644 UmbracoPackages/App_Plugins/brothers.uNesting/uNesting.controller.js
create mode 100644 UmbracoPackages/App_Plugins/brothers.uNesting/uNesting.css
create mode 100644 UmbracoPackages/App_Plugins/brothers.uNesting/uNesting.html
create mode 100644 UmbracoPackages/Global.asax
create mode 100644 UmbracoPackages/Properties/AssemblyInfo.cs
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/cs.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/da.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/de.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/en.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/en_us.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/es.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/fr.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/he.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/it.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/ja.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/ko.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/nb.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/nl.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/pl.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/pt.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/ru.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/sv.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/tr.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/zh.xml
create mode 100644 UmbracoPackages/Umbraco/Config/Lang/zh_tw.xml
create mode 100644 UmbracoPackages/Umbraco/Js/UmbracoSpeechBubbleBackEnd.js
create mode 100644 UmbracoPackages/Umbraco/Js/app.js
create mode 100644 UmbracoPackages/Umbraco/Js/dualSelectBox.js
create mode 100644 UmbracoPackages/Umbraco/Js/guiFunctions.js
create mode 100644 UmbracoPackages/Umbraco/Js/init.js
create mode 100644 UmbracoPackages/Umbraco/Js/install.loader.js
create mode 100644 UmbracoPackages/Umbraco/Js/installer.app.js
create mode 100644 UmbracoPackages/Umbraco/Js/routes.js
create mode 100644 UmbracoPackages/Umbraco/Js/umbraco.controllers.js
create mode 100644 UmbracoPackages/Umbraco/Js/umbraco.directives.js
create mode 100644 UmbracoPackages/Umbraco/Js/umbraco.filters.js
create mode 100644 UmbracoPackages/Umbraco/Js/umbraco.installer.js
create mode 100644 UmbracoPackages/Umbraco/Js/umbraco.interceptors.js
create mode 100644 UmbracoPackages/Umbraco/Js/umbraco.preview.js
create mode 100644 UmbracoPackages/Umbraco/Js/umbraco.resources.js
create mode 100644 UmbracoPackages/Umbraco/Js/umbraco.services.js
create mode 100644 UmbracoPackages/Umbraco/Js/umbracoCheckKeys.js
create mode 100644 UmbracoPackages/Umbraco/Js/web.config
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/Breadcrumb.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/EditProfile.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/Empty.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/Gallery.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/ListAncestorsFromCurrentPage.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/ListChildPagesFromChangeableSource.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/ListChildPagesFromCurrentPage.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByDate.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByName.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByProperty.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/ListChildPagesWithDoctype.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/ListDescendantsFromCurrentPage.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/ListImagesFromMediaFolder.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/Login.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/LoginStatus.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/MultinodeTree-picker.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/Navigation.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/RegisterMember.cshtml
create mode 100644 UmbracoPackages/Umbraco/PartialViewMacros/Templates/SiteMap.cshtml
create mode 100644 UmbracoPackages/Umbraco/Views/AuthorizeUpgrade.cshtml
create mode 100644 UmbracoPackages/Umbraco/Views/Default.cshtml
create mode 100644 UmbracoPackages/Umbraco/Views/Preview/Index.cshtml
create mode 100644 UmbracoPackages/Umbraco/Views/common/dashboard.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/drawers/help/help.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/compositions/compositions.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/copy/copy.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/datatypepicker/datatypepicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/datatypesettings/datatypesettings.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/embed/embed.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/iconpicker/iconpicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/insertcodesnippet/insertcodesnippet.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/insertfield/insertfield.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/itempicker/itempicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/linkpicker/linkpicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/macropicker/macropicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/mediapicker/mediapicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/membergrouppicker/membergrouppicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/move/move.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/nodepermissions/nodepermissions.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/propertysettings/propertysettings.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/querybuilder/querybuilder.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/rollback/rollback.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/sectionpicker/sectionpicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/templatesections/templatesections.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/treepicker/treepicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/usergrouppicker/usergrouppicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/infiniteeditors/userpicker/userpicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/legacy.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/login.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/notifications/confirmroutechange.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/notifications/confirmunpublish.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/overlays/default/default.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/overlays/itempicker/itempicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/overlays/keyboardshortcuts/keyboardshortcuts.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/overlays/logviewersearch/logviewersearch.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/overlays/mediatypepicker/mediatypepicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/overlays/user/user.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/overlays/ysod/ysod.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/tours/umbintrocreatecontent/nodename/nodename.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/tours/umbintrocreatedoctype/doctypename/doctypename.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/tours/umbintrocreatedoctype/propertyname/propertyname.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/tours/umbintrocreatedoctype/tabname/tabname.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/tours/umbintromediasection/foldername/foldername.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/tours/umbintromediasection/uploadimages/uploadimages.html
create mode 100644 UmbracoPackages/Umbraco/Views/common/tours/umbintrorenderintemplate/templatetree/templatetree.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umb-app-header.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umb-backdrop.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umb-contextmenu.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umb-login.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umb-navigation.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umb-search.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umb-sections.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umb-tour.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umbdrawer/umb-drawer-content.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umbdrawer/umb-drawer-footer.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umbdrawer/umb-drawer-header.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umbdrawer/umb-drawer-view.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umbdrawer/umb-drawer.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umbtour/umb-tour-step-content.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umbtour/umb-tour-step-counter.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umbtour/umb-tour-step-footer.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umbtour/umb-tour-step-header.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/application/umbtour/umb-tour-step.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/buttons/umb-button-group.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/buttons/umb-button.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/buttons/umb-toggle-group.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/buttons/umb-toggle.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/content/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/content/umb-content-node-info.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/content/umb-tabbed-content.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/content/umb-variant-content-editors.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/content/umb-variant-content.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/content/umb-variant-notification-list.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/content/umb-variant-state.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/subheader/umb-editor-sub-header-content-left.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/subheader/umb-editor-sub-header-content-right.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/subheader/umb-editor-sub-header-section.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/subheader/umb-editor-sub-header.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/umb-breadcrumbs.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/umb-editor-container.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/umb-editor-content-header.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/umb-editor-footer-content-left.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/umb-editor-footer-content-right.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/umb-editor-footer.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/umb-editor-header.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/umb-editor-menu.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/umb-editor-navigation-item.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/umb-editor-navigation.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/umb-editor-sub-view.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/umb-editor-sub-views.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/umb-editor-view.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/umb-editor.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/editor/umb-editors.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/forms/umb-checkbox.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/forms/umb-radiobutton.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/grid/grid-rte.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/html/umb-box/umb-box-content.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/html/umb-box/umb-box-header.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/html/umb-box/umb-box.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/html/umb-control-group.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/html/umb-pane.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/html/umb-panel.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/imaging/umb-image-crop.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/imaging/umb-image-gravity.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/imaging/umb-image-thumbnail.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/media/umb-media-node-info.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/member/umb-membergroup-node-info.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/notifications/umb-notifications.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/overlays/umb-overlay-backdrop.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/overlays/umb-overlay.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/property/umb-property-editor.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/property/umb-property-group.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/property/umb-property.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/tabs/umb-tab-content.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/tabs/umb-tabs-nav.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/tags/umb-tags-editor.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/tree/umb-tree-item.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/tree/umb-tree-search-box.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/tree/umb-tree-search-results.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/tree/umb-tree.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/tree/umbcontextdialog/umb-context-dialog.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-avatar.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-badge.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-checkmark.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-child-selector.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-color-swatches.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-confirm-action.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-confirm.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-content-grid.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-date-time-picker.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-dropdown-item.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-dropdown.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-empty-state.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-folder-grid.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-generate-alias.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-grid-selector.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-groups-builder.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-keyboard-shortcuts-overview.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-layout-selector.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-lightbox.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-list-view-layout.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-list-view-settings.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-load-indicator.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-locked-field.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-media-grid.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-mini-list-view.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-node-preview.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-pagination.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-progress-bar.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-progress-circle.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-table.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/umb-tooltip.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/upload/umb-file-dropzone.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/upload/umb-property-file-upload.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/users/change-password.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/users/umb-user-group-preview.html
create mode 100644 UmbracoPackages/Umbraco/Views/components/users/umb-user-preview.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/apps/content/content.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/apps/info/info.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/apps/listview/listview.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/assigndomain.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/copy.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/create.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/createblueprint.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/emptyrecyclebin.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/move.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/notify.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/overlays/publish.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/overlays/publishdescendants.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/overlays/save.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/overlays/schedule.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/overlays/sendtopublish.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/overlays/unpublish.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/protect.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/recyclebin.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/restore.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/rights.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/sort.html
create mode 100644 UmbracoPackages/Umbraco/Views/content/umbpreview.html
create mode 100644 UmbracoPackages/Umbraco/Views/contentblueprints/create.html
create mode 100644 UmbracoPackages/Umbraco/Views/contentblueprints/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/contentblueprints/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/contentblueprints/intro.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/ChangePassword.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/content/overlays/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/content/overlays/disable.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/content/redirecturls.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/default/StartupDashboardIntro.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/default/StartupDashboardKits.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/default/StartupDashboardLastEdits.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/default/StartupDashboardVideos.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/default/ourumbraco.jpg
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/default/umbracotv.jpg
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/forms/formsdashboardintro.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/media/desktopmediauploader.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/media/mediadashboardintro.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/media/mediadashboardvideos.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/media/mediafolderbrowser.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/members/membersdashboardintro.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/members/membersdashboardvideos.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/settings/examinemanagement.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/settings/examinemanagementresults.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/settings/healthcheck.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/settings/nucache.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/settings/overlays/examinemanagement.rebuild.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/settings/overlays/nucache.rebuild.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/settings/overlays/nucache.reload.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/settings/profiler.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/settings/publishedstatus.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/settings/settingsdashboardintro.html
create mode 100644 UmbracoPackages/Umbraco/Views/dashboard/settings/settingsdashboardvideos.html
create mode 100644 UmbracoPackages/Umbraco/Views/datatypes/create.html
create mode 100644 UmbracoPackages/Umbraco/Views/datatypes/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/datatypes/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/datatypes/move.html
create mode 100644 UmbracoPackages/Umbraco/Views/datatypes/rename.html
create mode 100644 UmbracoPackages/Umbraco/Views/dictionary/create.html
create mode 100644 UmbracoPackages/Umbraco/Views/dictionary/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/dictionary/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/dictionary/list.html
create mode 100644 UmbracoPackages/Umbraco/Views/documenttypes/copy.html
create mode 100644 UmbracoPackages/Umbraco/Views/documenttypes/create.html
create mode 100644 UmbracoPackages/Umbraco/Views/documenttypes/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/documenttypes/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/documenttypes/export.html
create mode 100644 UmbracoPackages/Umbraco/Views/documenttypes/importdocumenttype.html
create mode 100644 UmbracoPackages/Umbraco/Views/documenttypes/move.html
create mode 100644 UmbracoPackages/Umbraco/Views/documenttypes/property.html
create mode 100644 UmbracoPackages/Umbraco/Views/documenttypes/propertygroup.html
create mode 100644 UmbracoPackages/Umbraco/Views/documenttypes/rename.html
create mode 100644 UmbracoPackages/Umbraco/Views/documenttypes/views/design/design.html
create mode 100644 UmbracoPackages/Umbraco/Views/documenttypes/views/listview/listview.html
create mode 100644 UmbracoPackages/Umbraco/Views/documenttypes/views/permissions/permissions.html
create mode 100644 UmbracoPackages/Umbraco/Views/documenttypes/views/templates/templates.html
create mode 100644 UmbracoPackages/Umbraco/Views/languages/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/languages/overlays/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/languages/overview.html
create mode 100644 UmbracoPackages/Umbraco/Views/logviewer/overview.html
create mode 100644 UmbracoPackages/Umbraco/Views/logviewer/search.html
create mode 100644 UmbracoPackages/Umbraco/Views/macros/create.html
create mode 100644 UmbracoPackages/Umbraco/Views/macros/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/macros/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/macros/infiniteeditors/parameter.html
create mode 100644 UmbracoPackages/Umbraco/Views/macros/views/parameters.html
create mode 100644 UmbracoPackages/Umbraco/Views/macros/views/settings.html
create mode 100644 UmbracoPackages/Umbraco/Views/media/apps/content/content.html
create mode 100644 UmbracoPackages/Umbraco/Views/media/apps/info/info.html
create mode 100644 UmbracoPackages/Umbraco/Views/media/apps/listview/listview.html
create mode 100644 UmbracoPackages/Umbraco/Views/media/create.html
create mode 100644 UmbracoPackages/Umbraco/Views/media/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/media/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/media/emptyrecyclebin.html
create mode 100644 UmbracoPackages/Umbraco/Views/media/move.html
create mode 100644 UmbracoPackages/Umbraco/Views/media/recyclebin.html
create mode 100644 UmbracoPackages/Umbraco/Views/media/restore.html
create mode 100644 UmbracoPackages/Umbraco/Views/media/sort.html
create mode 100644 UmbracoPackages/Umbraco/Views/mediatypes/copy.html
create mode 100644 UmbracoPackages/Umbraco/Views/mediatypes/create.html
create mode 100644 UmbracoPackages/Umbraco/Views/mediatypes/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/mediatypes/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/mediatypes/move.html
create mode 100644 UmbracoPackages/Umbraco/Views/mediatypes/rename.html
create mode 100644 UmbracoPackages/Umbraco/Views/mediatypes/views/design/design.html
create mode 100644 UmbracoPackages/Umbraco/Views/mediatypes/views/listview/listview.html
create mode 100644 UmbracoPackages/Umbraco/Views/mediatypes/views/permissions/permissions.html
create mode 100644 UmbracoPackages/Umbraco/Views/member/create.html
create mode 100644 UmbracoPackages/Umbraco/Views/member/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/member/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/member/list.html
create mode 100644 UmbracoPackages/Umbraco/Views/member/listview/listview.html
create mode 100644 UmbracoPackages/Umbraco/Views/membergroups/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/membergroups/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/membertypes/create.html
create mode 100644 UmbracoPackages/Umbraco/Views/membertypes/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/membertypes/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/membertypes/move.html
create mode 100644 UmbracoPackages/Umbraco/Views/membertypes/views/design/design.html
create mode 100644 UmbracoPackages/Umbraco/Views/partialviewmacros/create.html
create mode 100644 UmbracoPackages/Umbraco/Views/partialviewmacros/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/partialviewmacros/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/partialviews/create.html
create mode 100644 UmbracoPackages/Umbraco/Views/partialviews/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/partialviews/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/boolean.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/colorpicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/contenttypepicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/decimal.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/hidden.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/imagepicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/mediapicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/multivalues.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/nodetype.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/number.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/radiobuttonlist.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/readonlykeyvalues.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/requiredfield.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/textarea.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/textstring.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/textstringlimited.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/treepicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/treesource.html
create mode 100644 UmbracoPackages/Umbraco/Views/prevalueeditors/valuetype.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/boolean/boolean.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/changepassword/changepassword.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/checkboxlist/checkboxlist.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/colorpicker/colorpicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/colorpicker/colorpicker.prevalues.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/contentpicker/contentpicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/datepicker/datepicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/decimal/decimal.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/dropdownFlexible/dropdownFlexible.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/email/email.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/entitypicker/entitypicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/fileupload/fileupload.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/folderbrowser/folderbrowser.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/grid/config/grid.default.config.js
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/grid/dialogs/config.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/grid/dialogs/editconfig.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/grid/dialogs/layoutconfig.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/grid/dialogs/rowconfig.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/grid/dialogs/rowdeleteconfirm.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/grid/editors/embed.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/grid/editors/error.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/grid/editors/macro.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/grid/editors/media.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/grid/editors/rte.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/grid/editors/textstring.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/grid/grid.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/grid/grid.prevalues.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/idwithguid/idwithguid.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/imagecropper/imagecropper.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/imagecropper/imagecropper.prevalues.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/integer/integer.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/listview/bulkActionPermissions.prevalues.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/listview/includeproperties.prevalues.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/listview/layouts.prevalues.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/listview/layouts/grid/grid.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/listview/layouts/list/list.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/listview/listview.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/listview/orderDirection.prevalues.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/listview/overlays/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/listview/overlays/listviewpublish.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/listview/overlays/listviewunpublish.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/listview/sortby.prevalues.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/macrocontainer/macrocontainer.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/macrocontainer/macrolist.prevalues.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/markdowneditor/markdowneditor.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/mediapicker/mediapicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/membergrouppicker/membergrouppicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/membergroups/membergroups.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/memberpicker/memberpicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/multipletextbox/multipletextbox.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/multiurlpicker/multiurlpicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/nestedcontent/nestedcontent.doctypepicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/nestedcontent/nestedcontent.editor.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/nestedcontent/nestedcontent.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/radiobuttons/radiobuttons.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/readonlyvalue/readonlyvalue.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/relatedlinks/relatedlinks.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/rte/codeeditor.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/rte/rte.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/rte/rte.prevalues.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/sensitivevalue/sensitivevalue.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/slider/slider.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/tags/tags.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/tags/tags.prevalues.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/templatepicker/templatepicker.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/textarea/textarea.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/textbox/textbox.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/urllist/urllist.html
create mode 100644 UmbracoPackages/Umbraco/Views/propertyeditors/validationtest/validationtest.html
create mode 100644 UmbracoPackages/Umbraco/Views/relationtypes/create.html
create mode 100644 UmbracoPackages/Umbraco/Views/relationtypes/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/relationtypes/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/relationtypes/views/relationType.html
create mode 100644 UmbracoPackages/Umbraco/Views/relationtypes/views/relations.html
create mode 100644 UmbracoPackages/Umbraco/Views/scripts/create.html
create mode 100644 UmbracoPackages/Umbraco/Views/scripts/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/scripts/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/stylesheets/create.html
create mode 100644 UmbracoPackages/Umbraco/Views/stylesheets/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/stylesheets/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/stylesheets/infiniteeditors/richtextrule/richtextrule.html
create mode 100644 UmbracoPackages/Umbraco/Views/stylesheets/views/code/code.html
create mode 100644 UmbracoPackages/Umbraco/Views/stylesheets/views/rules/rules.html
create mode 100644 UmbracoPackages/Umbraco/Views/templates/delete.html
create mode 100644 UmbracoPackages/Umbraco/Views/templates/edit.html
create mode 100644 UmbracoPackages/Umbraco/Views/users/group.html
create mode 100644 UmbracoPackages/Umbraco/Views/users/overview.html
create mode 100644 UmbracoPackages/Umbraco/Views/users/user.html
create mode 100644 UmbracoPackages/Umbraco/Views/users/views/groups/groups.html
create mode 100644 UmbracoPackages/Umbraco/Views/users/views/user/details.html
create mode 100644 UmbracoPackages/Umbraco/Views/users/views/users/users.html
create mode 100644 UmbracoPackages/Umbraco/Views/web.config
create mode 100644 UmbracoPackages/Umbraco/assets/css/canvasdesigner.css
create mode 100644 UmbracoPackages/Umbraco/assets/css/installer.css
create mode 100644 UmbracoPackages/Umbraco/assets/css/nonodes.style.min.css
create mode 100644 UmbracoPackages/Umbraco/assets/css/umbraco.css
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/helveticons/helveticons.eot
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/helveticons/helveticons.svg
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/helveticons/helveticons.ttf
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/helveticons/helveticons.woff
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-Black.woff
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-Black.woff2
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-BlackItalic.woff
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-BlackItalic.woff2
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-Bold.woff
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-Bold.woff2
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-BoldItalic.woff
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-BoldItalic.woff2
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-Italic.woff
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-Italic.woff2
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-Light.woff
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-Light.woff2
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-LightItalic.woff
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-LightItalic.woff2
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-Regular.woff
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/lato/LatoLatin-Regular.woff2
create mode 100644 UmbracoPackages/Umbraco/assets/fonts/web.config
create mode 100644 UmbracoPackages/Umbraco/assets/img/application/logo.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/application/logo@2x.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/application/logo@3x.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/application/logo_black.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/application/logo_white.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/application/umbraco_logo_white.svg
create mode 100644 UmbracoPackages/Umbraco/assets/img/applicationIcons/content.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/applicationIcons/default.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/applicationIcons/developer.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/applicationIcons/help.svg
create mode 100644 UmbracoPackages/Umbraco/assets/img/applicationIcons/hlvticons-umbraco.svg
create mode 100644 UmbracoPackages/Umbraco/assets/img/applicationIcons/media.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/applicationIcons/members.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/applicationIcons/search.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/applicationIcons/settings.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/applicationIcons/tree-arrow.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/applicationIcons/users.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/checkered-background-20.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/checkered-background.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/forms/installer-background.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/installer.jpg
create mode 100644 UmbracoPackages/Umbraco/assets/img/loader.gif
create mode 100644 UmbracoPackages/Umbraco/assets/img/login.jpg
create mode 100644 UmbracoPackages/Umbraco/assets/img/logo.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/nonodesbg.jpg
create mode 100644 UmbracoPackages/Umbraco/assets/img/preview-mode-badge.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/transparent.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/uploader/upload-illustration.png
create mode 100644 UmbracoPackages/Umbraco/assets/img/uploader/upload-illustration.svg
create mode 100644 UmbracoPackages/Umbraco/lib/ace-builds/src-min-noconflict/ace.js
create mode 100644 UmbracoPackages/Umbraco/lib/ace-builds/src-min-noconflict/ext-language_tools.js
create mode 100644 UmbracoPackages/Umbraco/lib/ace-builds/src-min-noconflict/ext-searchbox.js
create mode 100644 UmbracoPackages/Umbraco/lib/ace-builds/src-min-noconflict/ext-settings_menu.js
create mode 100644 UmbracoPackages/Umbraco/lib/ace-builds/src-min-noconflict/mode-css.js
create mode 100644 UmbracoPackages/Umbraco/lib/ace-builds/src-min-noconflict/mode-javascript.js
create mode 100644 UmbracoPackages/Umbraco/lib/ace-builds/src-min-noconflict/mode-razor.js
create mode 100644 UmbracoPackages/Umbraco/lib/ace-builds/src-min-noconflict/snippets/css.js
create mode 100644 UmbracoPackages/Umbraco/lib/ace-builds/src-min-noconflict/snippets/javascript.js
create mode 100644 UmbracoPackages/Umbraco/lib/ace-builds/src-min-noconflict/snippets/text.js
create mode 100644 UmbracoPackages/Umbraco/lib/ace-builds/src-min-noconflict/theme-chrome.js
create mode 100644 UmbracoPackages/Umbraco/lib/ace-builds/src-min-noconflict/worker-css.js
create mode 100644 UmbracoPackages/Umbraco/lib/ace-builds/src-min-noconflict/worker-javascript.js
create mode 100644 UmbracoPackages/Umbraco/lib/ace-razor-mode/theme/razor_chrome.css
create mode 100644 UmbracoPackages/Umbraco/lib/angular-animate/angular-animate.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-chart.js/angular-chart.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-cookies/angular-cookies.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-dynamic-locale/tmhDynamicLocale.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-dynamic-locale/tmhDynamicLocale.min.js.map
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_aa-dj.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_aa-er.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_aa-et.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_aa.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_af-na.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_af-za.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_af.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_agq-cm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_agq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ak-gh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ak.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_am-et.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_am.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-001.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-ae.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-bh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-dj.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-dz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-eg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-eh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-er.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-il.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-iq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-jo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-km.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-kw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-lb.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-ly.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-ma.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-mr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-om.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-ps.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-qa.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-sa.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-sd.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-so.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-ss.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-sy.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-td.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-tn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-xb.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar-ye.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ar.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_as-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_as.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_asa-tz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_asa.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ast-es.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ast.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_az-cyrl-az.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_az-cyrl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_az-latn-az.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_az-latn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_az.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bas-cm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bas.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_be-by.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_be.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bem-zm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bem.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bez-tz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bez.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bg-bg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bm-latn-ml.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bm-latn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bm-ml.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bn-bd.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bn-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bo-cn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bo-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_br-fr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_br.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_brx-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_brx.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bs-cyrl-ba.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bs-cyrl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bs-latn-ba.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bs-latn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_bs.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_byn-er.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_byn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ca-ad.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ca-es-valencia.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ca-es.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ca-fr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ca-it.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ca.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ce-ru.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ce.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_cgg-ug.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_cgg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_chr-us.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_chr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ckb-arab-iq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ckb-arab-ir.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ckb-arab.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ckb-iq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ckb-ir.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ckb-latn-iq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ckb-latn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ckb.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_cs-cz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_cs.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_cu-ru.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_cu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_cy-gb.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_cy.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_da-dk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_da-gl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_da.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_dav-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_dav.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_de-at.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_de-be.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_de-ch.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_de-de.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_de-it.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_de-li.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_de-lu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_de.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_dje-ne.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_dje.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_dsb-de.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_dsb.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_dua-cm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_dua.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_dyo-sn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_dyo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_dz-bt.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_dz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ebu-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ebu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ee-gh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ee-tg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ee.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_el-cy.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_el-gr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_el.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-001.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-150.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ag.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ai.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-as.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-at.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-au.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-bb.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-be.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-bi.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-bm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-bs.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-bw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-bz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ca.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-cc.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ch.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ck.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-cm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-cx.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-cy.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-de.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-dg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-dk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-dm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-dsrt-us.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-dsrt.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-er.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-fi.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-fj.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-fk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-fm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-gb.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-gd.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-gg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-gh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-gi.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-gm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-gu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-gy.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-hk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ie.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-il.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-im.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-io.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-iso.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-je.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-jm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ki.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-kn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ky.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-lc.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-lr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ls.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-mg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-mh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-mo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-mp.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ms.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-mt.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-mu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-mw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-my.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-na.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-nf.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ng.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-nl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-nr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-nu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-nz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-pg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ph.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-pk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-pn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-pr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-pw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-rw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-sb.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-sc.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-sd.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-se.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-sg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-sh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-si.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-sl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ss.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-sx.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-sz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-tc.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-tk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-to.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-tt.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-tv.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-tz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ug.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-um.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-us-posix.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-us.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-vc.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-vg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-vi.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-vu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-ws.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-xa.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-za.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-zm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en-zw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_en.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_eo-001.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_eo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-419.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-ar.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-bo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-br.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-bz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-cl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-co.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-cr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-cu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-do.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-ea.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-ec.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-es.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-gq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-gt.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-hn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-ic.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-mx.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-ni.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-pa.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-pe.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-ph.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-pr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-py.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-sv.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-us.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-uy.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es-ve.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_es.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_et-ee.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_et.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_eu-es.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_eu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ewo-cm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ewo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fa-af.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fa-ir.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fa.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ff-cm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ff-gn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ff-mr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ff-sn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ff.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fi-fi.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fi.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fil-ph.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fil.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fo-dk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fo-fo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-be.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-bf.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-bi.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-bj.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-bl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-ca.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-cd.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-cf.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-cg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-ch.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-ci.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-cm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-dj.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-dz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-fr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-ga.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-gf.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-gn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-gp.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-gq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-ht.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-km.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-lu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-ma.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-mc.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-mf.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-mg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-ml.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-mq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-mr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-mu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-nc.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-ne.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-pf.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-pm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-re.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-rw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-sc.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-sn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-sy.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-td.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-tg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-tn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-vu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-wf.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr-yt.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fur-it.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fur.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fy-nl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_fy.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ga-ie.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ga.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_gd-gb.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_gd.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_gl-es.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_gl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_gsw-ch.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_gsw-fr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_gsw-li.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_gsw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_gu-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_gu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_guz-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_guz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_gv-im.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_gv.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ha-gh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ha-latn-gh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ha-latn-ne.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ha-latn-ng.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ha-latn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ha-ne.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ha-ng.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ha.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_haw-us.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_haw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_he-il.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_he.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_hi-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_hi.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_hr-ba.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_hr-hr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_hr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_hsb-de.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_hsb.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_hu-hu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_hu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_hy-am.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_hy.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ia-fr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ia.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_id-id.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_id.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ig-ng.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ig.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ii-cn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ii.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_is-is.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_is.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_it-ch.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_it-it.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_it-sm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_it-va.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_it.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_iw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ja-jp.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ja.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_jgo-cm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_jgo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_jmc-tz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_jmc.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ka-ge.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ka.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kab-dz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kab.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kam-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kam.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kde-tz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kde.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kea-cv.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kea.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_khq-ml.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_khq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ki-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ki.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kk-cyrl-kz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kk-cyrl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kk-kz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kkj-cm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kkj.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kl-gl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kln-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kln.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_km-kh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_km.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kn-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ko-kp.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ko-kr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ko.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kok-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kok.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ks-arab-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ks-arab.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ks-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ks.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ksb-tz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ksb.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ksf-cm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ksf.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ksh-de.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ksh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kw-gb.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_kw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ky-cyrl-kg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ky-cyrl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ky-kg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ky.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lag-tz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lag.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lb-lu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lb.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lg-ug.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lkt-us.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lkt.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ln-ao.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ln-cd.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ln-cf.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ln-cg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ln.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lo-la.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lrc-iq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lrc-ir.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lrc.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lt-lt.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lt.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lu-cd.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_luo-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_luo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_luy-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_luy.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lv-lv.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_lv.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mas-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mas-tz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mas.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mer-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mer.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mfe-mu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mfe.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mg-mg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mgh-mz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mgh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mgo-cm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mgo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mk-mk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ml-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ml.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mn-cyrl-mn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mn-cyrl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mn-mn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mr-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ms-bn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ms-latn-bn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ms-latn-my.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ms-latn-sg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ms-latn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ms-my.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ms-sg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ms.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mt-mt.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mt.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mua-cm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mua.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_my-mm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_my.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mzn-ir.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_mzn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_naq-na.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_naq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nb-no.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nb-sj.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nb.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nd-zw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nd.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nds-de.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nds-nl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nds.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ne-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ne-np.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ne.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nl-aw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nl-be.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nl-bq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nl-cw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nl-nl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nl-sr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nl-sx.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nmg-cm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nmg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nn-no.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nnh-cm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nnh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_no-no.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_no.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nr-za.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nso-za.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nso.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nus-sd.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nus-ss.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nus.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nyn-ug.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_nyn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_om-et.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_om-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_om.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_or-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_or.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_os-ge.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_os-ru.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_os.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pa-arab-pk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pa-arab.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pa-guru-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pa-guru.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pa.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pl-pl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_prg-001.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_prg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ps-af.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ps.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pt-ao.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pt-br.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pt-ch.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pt-cv.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pt-gq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pt-gw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pt-lu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pt-mo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pt-mz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pt-pt.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pt-st.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pt-tl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_pt.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_qu-bo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_qu-ec.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_qu-pe.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_qu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_rm-ch.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_rm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_rn-bi.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_rn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ro-md.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ro-ro.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ro.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_rof-tz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_rof.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ru-by.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ru-kg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ru-kz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ru-md.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ru-ru.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ru-ua.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ru.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_rw-rw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_rw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_rwk-tz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_rwk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sah-ru.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sah.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_saq-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_saq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sbp-tz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sbp.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_se-fi.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_se-no.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_se-se.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_se.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_seh-mz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_seh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ses-ml.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ses.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sg-cf.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_shi-latn-ma.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_shi-latn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_shi-tfng-ma.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_shi-tfng.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_shi.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_si-lk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_si.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sk-sk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sl-si.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_smn-fi.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_smn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sn-zw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_so-dj.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_so-et.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_so-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_so-so.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_so.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sq-al.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sq-mk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sq-xk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sr-cyrl-ba.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sr-cyrl-me.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sr-cyrl-rs.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sr-cyrl-xk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sr-cyrl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sr-latn-ba.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sr-latn-me.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sr-latn-rs.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sr-latn-xk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sr-latn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ss-sz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ss-za.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ss.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ssy-er.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ssy.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_st-ls.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_st-za.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_st.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sv-ax.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sv-fi.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sv-se.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sv.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sw-cd.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sw-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sw-tz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sw-ug.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_sw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_swc-cd.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_swc.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ta-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ta-lk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ta-my.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ta-sg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ta.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_te-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_te.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_teo-ke.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_teo-ug.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_teo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tg-cyrl-tj.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tg-cyrl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_th-th.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_th.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ti-er.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ti-et.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ti.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tig-er.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tig.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tk-tm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tn-bw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tn-za.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_to-to.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_to.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tr-cy.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tr-tr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ts-za.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ts.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_twq-ne.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_twq.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tzm-latn-ma.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tzm-latn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tzm-ma.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_tzm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ug-arab-cn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ug-arab.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ug-cn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ug.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_uk-ua.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_uk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ur-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ur-pk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ur.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_uz-arab-af.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_uz-arab.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_uz-cyrl-uz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_uz-cyrl.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_uz-latn-uz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_uz-latn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_uz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_vai-latn-lr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_vai-latn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_vai-vaii-lr.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_vai-vaii.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_vai.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ve-za.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_ve.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_vi-vn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_vi.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_vo-001.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_vo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_vun-tz.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_vun.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_wae-ch.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_wae.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_wal-et.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_wal.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_xh-za.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_xh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_xog-ug.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_xog.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_yav-cm.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_yav.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_yi-001.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_yi.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_yo-bj.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_yo-ng.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_yo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_yue-hk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_yue.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zgh-ma.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zgh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zh-cn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zh-hans-cn.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zh-hans-hk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zh-hans-mo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zh-hans-sg.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zh-hans.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zh-hant-hk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zh-hant-mo.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zh-hant-tw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zh-hant.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zh-hk.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zh-tw.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zh.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zu-za.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-i18n/angular-locale_zu.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-local-storage/angular-local-storage.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-local-storage/angular-local-storage.min.js.map
create mode 100644 UmbracoPackages/Umbraco/lib/angular-messages/angular-messages.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-mocks/angular-mocks.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-route/angular-route.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-sanitize/angular-sanitize.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-touch/angular-touch.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular-ui-sortable/sortable.js
create mode 100644 UmbracoPackages/Umbraco/lib/angular/angular.js
create mode 100644 UmbracoPackages/Umbraco/lib/animejs/anime.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap-social/bootstrap-social.css
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/css/bootstrap-responsive.css
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/css/bootstrap-responsive.min.css
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/css/bootstrap.css
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/css/bootstrap.min.3.0.1.css
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/css/bootstrap.min.css
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/css/responsive.css
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/img/glyphicons-halflings-white.png
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/img/glyphicons-halflings.png
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/accordion.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/alerts.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/bootstrap.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/breadcrumbs.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/button-groups.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/buttons.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/carousel.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/close.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/code.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/component-animations.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/dropdowns.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/forms.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/grid.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/hero-unit.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/labels-badges.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/layouts.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/media.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/mixins.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/modals.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/navbar.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/navs.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/pager.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/pagination.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/popovers.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/progress-bars.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/reset.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/responsive-1200px-min.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/responsive-767px-max.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/responsive-768px-979px.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/responsive-navbar.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/responsive-utilities.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/responsive.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/scaffolding.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/sprites.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/tables.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/tests/buttons.html
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/tests/css-tests.css
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/tests/css-tests.html
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/tests/forms-responsive.html
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/tests/forms.html
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/tests/navbar-fixed-top.html
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/tests/navbar-static-top.html
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/tests/navbar.html
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/thumbnails.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/tooltip.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/type.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/utilities.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/variables.less
create mode 100644 UmbracoPackages/Umbraco/lib/bootstrap/less/wells.less
create mode 100644 UmbracoPackages/Umbraco/lib/chart.js/chart.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/clipboard/clipboard.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/flatpickr.css
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/flatpickr.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/ar.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/at.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/be.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/bg.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/bn.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/cat.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/cs.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/cy.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/da.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/de.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/default.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/eo.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/es.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/et.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/fa.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/fi.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/fr.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/gr.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/he.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/hi.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/hr.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/hu.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/id.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/it.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/ja.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/km.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/ko.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/kz.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/lt.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/lv.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/mk.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/mn.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/ms.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/my.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/nl.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/no.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/pa.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/pl.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/pt.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/ro.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/ru.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/si.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/sk.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/sl.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/sq.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/sr.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/sv.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/th.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/tr.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/uk.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/vn.js
create mode 100644 UmbracoPackages/Umbraco/lib/flatpickr/l10n/zh.js
create mode 100644 UmbracoPackages/Umbraco/lib/font-awesome/css/font-awesome.min.css
create mode 100644 UmbracoPackages/Umbraco/lib/font-awesome/fonts/FontAwesome.otf
create mode 100644 UmbracoPackages/Umbraco/lib/font-awesome/fonts/fontawesome-webfont.eot
create mode 100644 UmbracoPackages/Umbraco/lib/font-awesome/fonts/fontawesome-webfont.svg
create mode 100644 UmbracoPackages/Umbraco/lib/font-awesome/fonts/fontawesome-webfont.ttf
create mode 100644 UmbracoPackages/Umbraco/lib/font-awesome/fonts/fontawesome-webfont.woff
create mode 100644 UmbracoPackages/Umbraco/lib/font-awesome/fonts/fontawesome-webfont.woff2
create mode 100644 UmbracoPackages/Umbraco/lib/jquery-ui-touch-punch/jquery.ui.touch-punch.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/jquery-ui/jquery-ui.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/jquery/jquery.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/jquery/jquery.min.map
create mode 100644 UmbracoPackages/Umbraco/lib/jsdiff/diff.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/lazyload-js/lazyload.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/markdown/markdown.converter.js
create mode 100644 UmbracoPackages/Umbraco/lib/markdown/markdown.css
create mode 100644 UmbracoPackages/Umbraco/lib/markdown/markdown.editor.js
create mode 100644 UmbracoPackages/Umbraco/lib/markdown/markdown.sanitizer.js
create mode 100644 UmbracoPackages/Umbraco/lib/markdown/red.css
create mode 100644 UmbracoPackages/Umbraco/lib/moment/af.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ar-dz.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ar-kw.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ar-ly.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ar-ma.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ar-sa.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ar-tn.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ar.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/az.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/be.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/bg.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/bm.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/bn.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/bo.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/br.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/bs.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ca.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/cs.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/cv.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/cy.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/da.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/de-at.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/de-ch.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/de.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/dv.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/el.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/en-au.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/en-ca.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/en-gb.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/en-ie.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/en-il.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/en-nz.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/eo.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/es-do.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/es-us.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/es.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/et.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/eu.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/fa.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/fi.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/fo.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/fr-ca.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/fr-ch.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/fr.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/fy.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/gd.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/gl.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/gom-latn.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/gu.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/he.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/hi.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/hr.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/hu.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/hy-am.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/id.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/is.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/it.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ja.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/jv.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ka.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/kk.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/km.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/kn.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ko.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ky.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/lb.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/lo.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/lt.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/lv.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/me.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/mi.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/mk.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ml.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/mn.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/moment.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/mr.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ms-my.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ms.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/mt.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/my.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/nb.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ne.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/nl-be.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/nl.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/nn.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/pa-in.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/pl.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/pt-br.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/pt.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ro.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ru.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/sd.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/se.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/si.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/sk.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/sl.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/sq.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/sr-cyrl.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/sr.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ss.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/sv.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/sw.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ta.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/te.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/tet.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/tg.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/th.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/tl-ph.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/tlh.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/tr.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/tzl.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/tzm-latn.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/tzm.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ug-cn.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/uk.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/ur.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/uz-latn.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/uz.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/vi.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/x-pseudo.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/yo.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/zh-cn.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/zh-hk.js
create mode 100644 UmbracoPackages/Umbraco/lib/moment/zh-tw.js
create mode 100644 UmbracoPackages/Umbraco/lib/ng-file-upload/ng-file-upload.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/nouislider/nouislider.min.css
create mode 100644 UmbracoPackages/Umbraco/lib/nouislider/nouislider.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/signalr/jquery.signalR.js
create mode 100644 UmbracoPackages/Umbraco/lib/spectrum/spectrum.css
create mode 100644 UmbracoPackages/Umbraco/lib/spectrum/spectrum.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/da.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/de.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/en.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/en_us.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/fi.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/fr.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/he.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/it.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/ja.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/nl.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/no.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/pl.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/pt.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/ru.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/sv.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/langs/zh.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/advlist/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/advlist/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/advlist/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/anchor/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/anchor/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/anchor/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/autolink/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/autolink/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/autolink/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/autoresize/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/autoresize/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/autoresize/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/autosave/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/autosave/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/autosave/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/bbcode/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/bbcode/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/bbcode/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/charmap/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/charmap/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/charmap/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/code/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/code/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/code/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/codesample/css/prism.css
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/codesample/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/codesample/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/codesample/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/colorpicker/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/colorpicker/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/colorpicker/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/contextmenu/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/contextmenu/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/contextmenu/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/directionality/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/directionality/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/directionality/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-cool.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-cry.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-embarassed.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-frown.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-innocent.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-kiss.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-laughing.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-money-mouth.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-sealed.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-smile.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-surprised.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-tongue-out.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-undecided.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-wink.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/img/smiley-yell.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/emoticons/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/fullpage/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/fullpage/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/fullpage/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/fullscreen/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/fullscreen/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/fullscreen/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/help/img/logo.png
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/help/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/help/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/help/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/hr/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/hr/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/hr/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/image/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/image/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/image/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/imagetools/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/imagetools/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/imagetools/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/importcss/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/importcss/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/importcss/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/insertdatetime/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/insertdatetime/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/insertdatetime/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/legacyoutput/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/legacyoutput/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/legacyoutput/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/link/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/link/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/link/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/lists/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/lists/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/lists/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/media/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/media/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/media/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/nonbreaking/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/nonbreaking/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/nonbreaking/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/noneditable/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/noneditable/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/noneditable/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/pagebreak/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/pagebreak/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/pagebreak/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/paste/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/paste/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/paste/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/preview/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/preview/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/preview/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/print/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/print/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/print/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/save/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/save/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/save/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/searchreplace/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/searchreplace/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/searchreplace/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/spellchecker/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/spellchecker/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/spellchecker/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/tabfocus/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/tabfocus/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/tabfocus/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/table/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/table/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/table/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/template/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/template/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/template/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/textcolor/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/textcolor/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/textcolor/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/textpattern/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/textpattern/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/textpattern/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/toc/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/toc/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/toc/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/visualblocks/css/visualblocks.css
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/visualblocks/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/visualblocks/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/visualblocks/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/visualchars/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/visualchars/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/visualchars/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/wordcount/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/wordcount/plugin.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/plugins/wordcount/plugin.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/content.inline.min.css
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/content.min.css
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/content.mobile.min.css
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/fonts/tinymce-mobile.woff
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/fonts/tinymce-small.eot
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/fonts/tinymce-small.svg
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/fonts/tinymce-small.ttf
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/fonts/tinymce-small.woff
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/fonts/tinymce.eot
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/fonts/tinymce.svg
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/fonts/tinymce.ttf
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/fonts/tinymce.woff
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/img/anchor.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/img/loader.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/img/object.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/img/trans.gif
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/skin.min.css
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/skins/lightgray/skin.mobile.min.css
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/themes/inlite/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/themes/inlite/theme.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/themes/inlite/theme.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/themes/mobile/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/themes/mobile/theme.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/themes/mobile/theme.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/themes/modern/index.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/themes/modern/theme.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/themes/modern/theme.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/tinymce/tinymce.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/typeahead.js/typeahead.bundle.min.js
create mode 100644 UmbracoPackages/Umbraco/lib/umbraco/Extensions.js
create mode 100644 UmbracoPackages/Umbraco/lib/umbraco/LegacySpeechBubble.js
create mode 100644 UmbracoPackages/Umbraco/lib/umbraco/NamespaceManager.js
create mode 100644 UmbracoPackages/Umbraco/lib/umbraco/legacytreeicons.css
create mode 100644 UmbracoPackages/Umbraco/lib/underscore/underscore-min.js
create mode 100644 UmbracoPackages/UmbracoPackages.csproj
create mode 100644 UmbracoPackages/Views/Blog.cshtml
create mode 100644 UmbracoPackages/Views/Blogpost.cshtml
create mode 100644 UmbracoPackages/Views/MacroPartials/FeaturedProducts.cshtml
create mode 100644 UmbracoPackages/Views/MacroPartials/LatestBlogposts.cshtml
create mode 100644 UmbracoPackages/Views/Partials/CategoryLinks.cshtml
create mode 100644 UmbracoPackages/Views/Partials/Grid/Bootstrap3-Fluid.cshtml
create mode 100644 UmbracoPackages/Views/Partials/Grid/Bootstrap3.cshtml
create mode 100644 UmbracoPackages/Views/Partials/Grid/Editors/Base.cshtml
create mode 100644 UmbracoPackages/Views/Partials/Grid/Editors/Embed.cshtml
create mode 100644 UmbracoPackages/Views/Partials/Grid/Editors/Macro.cshtml
create mode 100644 UmbracoPackages/Views/Partials/Grid/Editors/Media.cshtml
create mode 100644 UmbracoPackages/Views/Partials/Grid/Editors/Rte.cshtml
create mode 100644 UmbracoPackages/Views/Partials/Grid/Editors/Textstring.cshtml
create mode 100644 UmbracoPackages/Views/Partials/Navigation/SubNavigation.cshtml
create mode 100644 UmbracoPackages/Views/Partials/Navigation/TopNavigation.cshtml
create mode 100644 UmbracoPackages/Views/Partials/SectionHeader.cshtml
create mode 100644 UmbracoPackages/Views/Person.cshtml
create mode 100644 UmbracoPackages/Views/Product.cshtml
create mode 100644 UmbracoPackages/Views/Products.cshtml
create mode 100644 UmbracoPackages/Views/Web.config
create mode 100644 UmbracoPackages/Views/contact.cshtml
create mode 100644 UmbracoPackages/Views/contentPage.cshtml
create mode 100644 UmbracoPackages/Views/home.cshtml
create mode 100644 UmbracoPackages/Views/master.cshtml
create mode 100644 UmbracoPackages/Views/people.cshtml
create mode 100644 UmbracoPackages/Web.config
create mode 100644 UmbracoPackages/config/BackOfficeTours/getting-started.json
create mode 100644 UmbracoPackages/config/ClientDependency.config
create mode 100644 UmbracoPackages/config/HealthChecks.config
create mode 100644 UmbracoPackages/config/Lang/cs-CZ.user.xml
create mode 100644 UmbracoPackages/config/Lang/da-DK.user.xml
create mode 100644 UmbracoPackages/config/Lang/de-DE.user.xml
create mode 100644 UmbracoPackages/config/Lang/en-GB.user.xml
create mode 100644 UmbracoPackages/config/Lang/en-US.user.xml
create mode 100644 UmbracoPackages/config/Lang/es-ES.user.xml
create mode 100644 UmbracoPackages/config/Lang/fr-FR.user.xml
create mode 100644 UmbracoPackages/config/Lang/he-IL.user.xml
create mode 100644 UmbracoPackages/config/Lang/it-IT.user.xml
create mode 100644 UmbracoPackages/config/Lang/ja-JP.user.xml
create mode 100644 UmbracoPackages/config/Lang/ko-KR.user.xml
create mode 100644 UmbracoPackages/config/Lang/nb-NO.user.xml
create mode 100644 UmbracoPackages/config/Lang/nl-NL.user.xml
create mode 100644 UmbracoPackages/config/Lang/pl-PL.user.xml
create mode 100644 UmbracoPackages/config/Lang/pt-BR.user.xml
create mode 100644 UmbracoPackages/config/Lang/ru-RU.user.xml
create mode 100644 UmbracoPackages/config/Lang/sv-SE.user.xml
create mode 100644 UmbracoPackages/config/Lang/zh-CN.user.xml
create mode 100644 UmbracoPackages/config/grid.editors.config.js
create mode 100644 UmbracoPackages/config/imageprocessor/cache.config
create mode 100644 UmbracoPackages/config/imageprocessor/processing.config
create mode 100644 UmbracoPackages/config/imageprocessor/security.config
create mode 100644 UmbracoPackages/config/logviewer.searches.config.js
create mode 100644 UmbracoPackages/config/serilog.config
create mode 100644 UmbracoPackages/config/serilog.user.config
create mode 100644 UmbracoPackages/config/splashes/noNodes.aspx
create mode 100644 UmbracoPackages/config/tinyMceConfig.config
create mode 100644 UmbracoPackages/config/umbracoSettings.config
create mode 100644 UmbracoPackages/css/umbraco-starterkit-style.css
create mode 100644 UmbracoPackages/packages.config
create mode 100644 UmbracoPackages/scripts/umbraco-starterkit-app.js
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..1ff0c42
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,63 @@
+###############################################################################
+# Set default behavior to automatically normalize line endings.
+###############################################################################
+* text=auto
+
+###############################################################################
+# Set default behavior for command prompt diff.
+#
+# This is need for earlier builds of msysgit that does not have it on by
+# default for csharp files.
+# Note: This is only used by command line
+###############################################################################
+#*.cs diff=csharp
+
+###############################################################################
+# Set the merge driver for project and solution files
+#
+# Merging from the command prompt will add diff markers to the files if there
+# are conflicts (Merging from VS is not affected by the settings below, in VS
+# the diff markers are never inserted). Diff markers may cause the following
+# file extensions to fail to load in VS. An alternative would be to treat
+# these files as binary and thus will always conflict and require user
+# intervention with every merge. To do so, just uncomment the entries below
+###############################################################################
+#*.sln merge=binary
+#*.csproj merge=binary
+#*.vbproj merge=binary
+#*.vcxproj merge=binary
+#*.vcproj merge=binary
+#*.dbproj merge=binary
+#*.fsproj merge=binary
+#*.lsproj merge=binary
+#*.wixproj merge=binary
+#*.modelproj merge=binary
+#*.sqlproj merge=binary
+#*.wwaproj merge=binary
+
+###############################################################################
+# behavior for image files
+#
+# image files are treated as binary by default.
+###############################################################################
+#*.jpg binary
+#*.png binary
+#*.gif binary
+
+###############################################################################
+# diff behavior for common document formats
+#
+# Convert binary document formats to text before diffing them. This feature
+# is only available from the command line. Turn it on by uncommenting the
+# entries below.
+###############################################################################
+#*.doc diff=astextplain
+#*.DOC diff=astextplain
+#*.docx diff=astextplain
+#*.DOCX diff=astextplain
+#*.dot diff=astextplain
+#*.DOT diff=astextplain
+#*.pdf diff=astextplain
+#*.PDF diff=astextplain
+#*.rtf diff=astextplain
+#*.RTF diff=astextplain
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..19fcfc4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,362 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding add-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- Backup*.rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# JetBrains Rider
+.idea/
+*.sln.iml
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# configuration
+Web.Release.config
+Web.Debug.config
+
+# umbraco
+*/log.txt
+Install/
+*/App_Data/TEMP/
+*/App_Data/Logs/
+*/App_Data/NuGetBackup/
+*/App_Data/preview
+*/App_Data/Import/
+*/App_Data/cache/
+*/App_Data/umbraco.config
+*/App_Data/ExamineIndexes/
+*/App_Data/Models/
+*/App_Data/Campaigns/
+*/uSync.Archive/
+*/media/
+
+# project
+package-lock.json
\ No newline at end of file
diff --git a/UmbracoPackages.sln b/UmbracoPackages.sln
new file mode 100644
index 0000000..eb2af96
--- /dev/null
+++ b/UmbracoPackages.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29201.188
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UmbracoPackages", "UmbracoPackages\UmbracoPackages.csproj", "{EEB8531B-A9F0-46FB-9532-ABB92743290A}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {EEB8531B-A9F0-46FB-9532-ABB92743290A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EEB8531B-A9F0-46FB-9532-ABB92743290A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EEB8531B-A9F0-46FB-9532-ABB92743290A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EEB8531B-A9F0-46FB-9532-ABB92743290A}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {2E78A066-D228-478B-8D9D-0FF6CA1AABB6}
+ EndGlobalSection
+EndGlobal
diff --git a/UmbracoPackages/App_Plugins/Cultiv.Tabify/directives/ct-tabbed-content.html b/UmbracoPackages/App_Plugins/Cultiv.Tabify/directives/ct-tabbed-content.html
new file mode 100644
index 0000000..6d85684
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/Cultiv.Tabify/directives/ct-tabbed-content.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+ {{group.label}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/UmbracoPackages/App_Plugins/Cultiv.Tabify/directives/cttabbedcontent.directive.js b/UmbracoPackages/App_Plugins/Cultiv.Tabify/directives/cttabbedcontent.directive.js
new file mode 100644
index 0000000..4faa639
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/Cultiv.Tabify/directives/cttabbedcontent.directive.js
@@ -0,0 +1,181 @@
+(function () {
+ 'use strict';
+
+ function tabbedContentDirective($timeout) {
+
+ function link($scope, $element, $attrs) {
+
+ var appRootNode = $element[0];
+ $scope.currentTab = "";
+ if ($scope.content.tabs[0]) {
+ $scope.currentTab = $scope.content.tabs[0].label;
+ }
+
+ // Directive for cached property groups.
+ var propertyGroupNodesDictionary = {};
+
+ var scrollableNode = appRootNode.closest(".umb-scrollable");
+ scrollableNode.addEventListener("scroll", onScroll);
+ scrollableNode.addEventListener("mousewheel", cancelScrollTween);
+
+ function onScroll(event) {
+
+ var viewFocusY = scrollableNode.scrollTop + scrollableNode.clientHeight * .5;
+
+ for (var i in $scope.content.tabs) {
+ var group = $scope.content.tabs[i];
+ var node = propertyGroupNodesDictionary[group.id];
+ if (viewFocusY >= node.offsetTop && viewFocusY <= node.offsetTop + node.clientHeight) {
+ setActiveAnchor(group);
+ return;
+ }
+ }
+
+ }
+
+ function setActiveAnchor(tab) {
+ if (tab.active !== true) {
+ var i = $scope.content.tabs.length;
+ while (i--) {
+ $scope.content.tabs[i].active = false;
+ }
+ tab.active = true;
+ }
+ }
+ function getActiveAnchor() {
+ var i = $scope.content.tabs.length;
+ while (i--) {
+ if ($scope.content.tabs[i].active === true)
+ return $scope.content.tabs[i];
+ }
+ return false;
+ }
+ function getScrollPositionFor(id) {
+ if (propertyGroupNodesDictionary[id]) {
+ return propertyGroupNodesDictionary[id].offsetTop - 20;// currently only relative to closest relatively positioned parent
+ }
+ return null;
+ }
+ function scrollTo(id) {
+ var y = getScrollPositionFor(id);
+ if (getScrollPositionFor !== null) {
+
+ var viewportHeight = scrollableNode.clientHeight;
+ var from = scrollableNode.scrollTop;
+ var to = Math.min(y, scrollableNode.scrollHeight - viewportHeight);
+
+ var animeObject = { _y: from };
+ $scope.scrollTween = anime({
+ targets: animeObject,
+ _y: to,
+ easing: 'easeOutExpo',
+ duration: 200 + Math.min(Math.abs(to - from) / viewportHeight * 100, 400),
+ update: () => {
+ scrollableNode.scrollTo(0, animeObject._y);
+ }
+ });
+
+ }
+ }
+ function jumpTo(id) {
+ var y = getScrollPositionFor(id);
+ if (getScrollPositionFor !== null) {
+ cancelScrollTween();
+ scrollableNode.scrollTo(0, y);
+ }
+ }
+ function cancelScrollTween() {
+ if ($scope.scrollTween) {
+ $scope.scrollTween.pause();
+ }
+ }
+
+ $scope.registerPropertyGroup = function (element, appAnchor) {
+ propertyGroupNodesDictionary[appAnchor] = element;
+ };
+
+ $scope.$on("editors.apps.appChanged", function ($event, $args) {
+ // if app changed to this app, then we want to scroll to the current anchor
+ if ($args.app.alias === "umbContent") {
+ var activeAnchor = getActiveAnchor();
+ $timeout(jumpTo.bind(null, [activeAnchor.id]));
+ }
+ });
+
+ $scope.$on("editors.apps.appAnchorChanged", function ($event, $args) {
+ if ($args.app.alias === "umbContent") {
+ setActiveAnchor($args.anchor);
+ scrollTo($args.anchor.id);
+ }
+ });
+
+ //ensure to unregister from all dom-events
+ $scope.$on('$destroy', function () {
+ cancelScrollTween();
+ scrollableNode.removeEventListener("scroll", onScroll);
+ scrollableNode.removeEventListener("mousewheel", cancelScrollTween);
+ });
+
+ }
+
+ function controller($scope, $element, $attrs) {
+
+
+ $scope.currentTab = $scope.content.tabs[0];
+
+ this.content = $scope.content;
+ this.activeVariant = _.find(this.content.variants, variant => {
+ return variant.active;
+ });
+
+
+ $scope.hide = function (label) {
+ if ($scope.currentTab === label) {
+ return false;
+ }
+ return true;
+ };
+
+ $scope.changeTab = function changeTab(label) {
+ $scope.currentTab = label;
+ };
+
+
+
+ $scope.activeVariant = this.activeVariant;
+
+ $scope.defaultVariant = _.find(this.content.variants, variant => {
+ return variant.language.isDefault;
+ });
+
+ $scope.unlockInvariantValue = function (property) {
+ property.unlockInvariantValue = !property.unlockInvariantValue;
+ };
+
+ $scope.$watch("tabbedContentForm.$dirty",
+ function (newValue, oldValue) {
+ if (newValue === true) {
+ $scope.content.isDirty = true;
+ }
+ }
+ );
+ }
+
+ var directive = {
+ restrict: 'E',
+ replace: true,
+ templateUrl: '/App_Plugins/Cultiv.Tabify/directives/ct-tabbed-content.html',
+ controller: controller,
+ link: link,
+ scope: {
+ content: "="
+ }
+ };
+
+ return directive;
+
+ }
+
+ angular.module('umbraco.directives').directive('ctTabbedContent', tabbedContentDirective);
+
+})();
diff --git a/UmbracoPackages/App_Plugins/Cultiv.Tabify/directives/ctvaltab.directive.js b/UmbracoPackages/App_Plugins/Cultiv.Tabify/directives/ctvaltab.directive.js
new file mode 100644
index 0000000..2ca4134
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/Cultiv.Tabify/directives/ctvaltab.directive.js
@@ -0,0 +1,36 @@
+function valTab(timeout) {
+ return {
+ require: ['^^form', '^^valFormManager'],
+ restrict: "A",
+ link: function (scope, element, attr, ctrs) {
+
+ var valFormManager = ctrs[1];
+
+ var tabAlias = scope.group.alias;
+ scope.tabHasError = false;
+
+ //listen for form validation changes
+ valFormManager.onValidationStatusChanged(function (evt, args) {
+
+ if (!args.form.$valid) {
+
+
+ var tabContent = element.closest(".umb-editor").find("[data-element='group-" + tabAlias + "']");
+ //check if the validation messages are contained inside of this tabs
+
+ if (tabContent.find(".ng-invalid").length > 0) {
+ scope.tabHasError = true;
+ } else {
+ scope.tabHasError = false;
+ }
+
+ }
+ else {
+ scope.tabHasError = false;
+ }
+
+ });
+ }
+ };
+}
+angular.module('umbraco.directives.validation').directive("ctValTab", ['$timeout',valTab]);
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/Cultiv.Tabify/interceptor.js b/UmbracoPackages/App_Plugins/Cultiv.Tabify/interceptor.js
new file mode 100644
index 0000000..8e8dff0
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/Cultiv.Tabify/interceptor.js
@@ -0,0 +1,23 @@
+angular.module('umbraco.services').config([
+ '$httpProvider',
+ function ($httpProvider) {
+
+ $httpProvider.interceptors.push(function ($q) {
+ return {
+ 'request': function (request) {
+
+ if (request.url.includes("views/content/apps/content/content.html")) {
+ var queryString = request.url.split("?");
+ var qs = "";
+ if (queryString[1]) {
+ qs = "?" + queryString[1];
+ }
+ request.url = "/App_Plugins/Cultiv.Tabify/tabify.html" + qs;
+ }
+
+ return request || $q.when(request);
+ }
+ };
+ });
+
+ }]);
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/Cultiv.Tabify/package.manifest b/UmbracoPackages/App_Plugins/Cultiv.Tabify/package.manifest
new file mode 100644
index 0000000..a1468ef
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/Cultiv.Tabify/package.manifest
@@ -0,0 +1,10 @@
+{
+ "javascript": [
+ "~/App_Plugins/Cultiv.Tabify/interceptor.js",
+ "~/App_Plugins/Cultiv.Tabify/directives/cttabbedcontent.directive.js",
+ "~/App_Plugins/Cultiv.Tabify/directives/ctvaltab.directive.js"
+ ],
+ "css": [
+ "~/App_Plugins/Cultiv.Tabify/tabify.css"
+ ]
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/Cultiv.Tabify/tabify.css b/UmbracoPackages/App_Plugins/Cultiv.Tabify/tabify.css
new file mode 100644
index 0000000..402b74a
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/Cultiv.Tabify/tabify.css
@@ -0,0 +1,145 @@
+
+#tabsList {
+ overflow: hidden;
+ margin: 0;
+ position: fixed;
+ z-index: 1;
+ background: #f6f4f4;
+ width: 100%;
+}
+
+.tabLink {
+ position: relative;
+ display: inline-block;
+ list-style: none;
+ cursor: pointer;
+ font-weight: 700;
+ font-size: 15px;
+ padding: 12px 20px;
+ background-color: rgba(255,255,255,1);
+ box-shadow: 0 1px 1px 0 rgba(0,0,0,0.16);
+ border-right: 2px solid #f6f4f4;
+ transition: background-color 0.2s ease-in-out 0s;
+}
+
+.tabLink:first-child {
+ border-radius: 3px 0 0 0;
+}
+
+.tabLink:last-child {
+ border: 0 none;
+ border-radius: 0 3px 0 0;
+}
+
+.tabLink:first-child:last-child {
+ border-radius: 3px 3px 0 0;
+}
+
+.tabLink::before {
+ content: "";
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: 2px;
+ background-color: #f6f4f4;
+ opacity: 1;
+ transition: all 0.3s ease-in-out 0s;
+}
+
+.tabLink:not(.active):hover {
+ color: #2152a3;
+ background-color: #ffffff;
+}
+
+.tabLink.active {
+ background-color: #ffffff;
+}
+
+.tabLink.active::before {
+ opacity: 1;
+ left: 12px;
+ right: 12px;
+ height: 4px;
+ border-radius: 3px 3px 0 0;
+ background-color: #f5c1bc;
+}
+
+/* Validation */
+
+.tabLink .icon {
+ display: none;
+}
+
+.show-validation .tabLink.hasError .icon {
+ display: inline;
+ position: absolute;
+ color: #d42054;
+}
+
+.show-validation .tabLink.hasError span {
+ margin-left: 20px;
+}
+
+.tabLink p {
+ margin: 0;
+}
+
+/* Validation */
+
+.tabLink .icon {
+ display: none;
+}
+
+.show-validation .tabLink.hasError .icon {
+ display: inline;
+ position: absolute;
+ color: #d42054;
+}
+
+.show-validation .tabLink.hasError span {
+ margin-left: 20px;
+}
+
+.tabLink p {
+ margin: 0;
+}
+
+/* Validation */
+
+.tabLink .icon {
+ display: none;
+}
+
+.show-validation .tabLink.hasError .icon {
+ display: inline;
+ position: absolute;
+ color: #d42054;
+}
+
+.show-validation .tabLink.hasError span {
+ margin-left: 20px;
+}
+
+/* Hides the panel header so that the title is not repeated */
+.umb-group-panel#tab-0 .umb-group-panel__header,
+.umb-group-panel[style*=display][style*=block] .umb-group-panel__header {
+ display: none;
+}
+
+.umb-group-panel {
+ margin-bottom: 0;
+}
+.tabbed-panel {
+ padding-top: 60px;
+}
+
+.fake-top-background {
+ margin-top: -20px;
+ background: #f6f4f4;
+ height: 20px;
+ position: fixed;
+ z-index: 1;
+ width: 100%;
+}
+
diff --git a/UmbracoPackages/App_Plugins/Cultiv.Tabify/tabify.html b/UmbracoPackages/App_Plugins/Cultiv.Tabify/tabify.html
new file mode 100644
index 0000000..e0edb36
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/Cultiv.Tabify/tabify.html
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/ModelsBuilder/modelsbuilder.controller.js b/UmbracoPackages/App_Plugins/ModelsBuilder/modelsbuilder.controller.js
new file mode 100644
index 0000000..b0e0c30
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/ModelsBuilder/modelsbuilder.controller.js
@@ -0,0 +1,38 @@
+function modelsBuilderController($scope, $http, umbRequestHelper, modelsBuilderResource) {
+
+ var vm = this;
+
+ vm.reload = reload;
+ vm.generate = generate;
+ vm.dashboard = null;
+
+ function generate() {
+ vm.generating = true;
+ umbRequestHelper.resourcePromise(
+ $http.post(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "BuildModels")),
+ 'Failed to generate.')
+ .then(function (result) {
+ vm.generating = false;
+ vm.dashboard = result;
+ });
+ }
+
+ function reload() {
+ vm.loading = true;
+ modelsBuilderResource.getDashboard().then(function (result) {
+ vm.dashboard = result;
+ vm.loading = false;
+ });
+ }
+
+ function init() {
+ vm.loading = true;
+ modelsBuilderResource.getDashboard().then(function (result) {
+ vm.dashboard = result;
+ vm.loading = false;
+ });
+ }
+
+ init();
+}
+angular.module("umbraco").controller("Umbraco.Dashboard.ModelsBuilderController", modelsBuilderController);
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/ModelsBuilder/modelsbuilder.html b/UmbracoPackages/App_Plugins/ModelsBuilder/modelsbuilder.html
new file mode 100644
index 0000000..0c10c33
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/ModelsBuilder/modelsbuilder.html
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+ Reload
+
+
+ Models Builder
+
+
+
+
+
+
+
+
Models are out-of-date .
+
+
+
+
+
Generating models will restart the application.
+
+
+
+ Generate models
+
+
+
+
+
+
+
Last generation failed with the following error:
+
{{vm.dashboard.lastError}}
+
+
+
+
+
+
+
diff --git a/UmbracoPackages/App_Plugins/ModelsBuilder/modelsbuilder.resource.js b/UmbracoPackages/App_Plugins/ModelsBuilder/modelsbuilder.resource.js
new file mode 100644
index 0000000..58ca77c
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/ModelsBuilder/modelsbuilder.resource.js
@@ -0,0 +1,23 @@
+function modelsBuilderResource($q, $http, umbRequestHelper) {
+
+ return {
+ getModelsOutOfDateStatus: function () {
+ return umbRequestHelper.resourcePromise(
+ $http.get(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "GetModelsOutOfDateStatus")),
+ "Failed to get models out-of-date status");
+ },
+
+ buildModels: function () {
+ return umbRequestHelper.resourcePromise(
+ $http.post(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "BuildModels")),
+ "Failed to build models");
+ },
+
+ getDashboard: function () {
+ return umbRequestHelper.resourcePromise(
+ $http.get(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "GetDashboard")),
+ "Failed to get dashboard");
+ }
+ };
+}
+angular.module("umbraco.resources").factory("modelsBuilderResource", modelsBuilderResource);
diff --git a/UmbracoPackages/App_Plugins/ModelsBuilder/package.manifest b/UmbracoPackages/App_Plugins/ModelsBuilder/package.manifest
new file mode 100644
index 0000000..5e64177
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/ModelsBuilder/package.manifest
@@ -0,0 +1,18 @@
+{
+ // array of files we want to inject into the application
+ "javascript": [
+ "~/App_Plugins/ModelsBuilder/modelsbuilder.controller.js",
+ "~/App_Plugins/ModelsBuilder/modelsbuilder.resource.js"
+ ],
+
+ // models builder dashboard
+ "dashboards": [
+ {
+ "alias": "settingsModelsBuilder",
+ "name": "Models Builder",
+ "view": "/App_Plugins/ModelsBuilder/modelsbuilder.html",
+ "sections": [ "settings" ],
+ "weight": 40
+ }
+ ]
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/OsmMaps.controller.js b/UmbracoPackages/App_Plugins/OsmMaps/OsmMaps.controller.js
new file mode 100644
index 0000000..7625f19
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/OsmMaps.controller.js
@@ -0,0 +1,81 @@
+angular.module("umbraco").controller("OsmMaps.PropertyEditorController",
+ function ($rootScope, $scope, notificationsService, assetsService, $timeout) {
+
+ var
+ place,
+ geocoder,
+ mapCenter,
+
+ //Getting prevalues - umbraco location by default if nothing has been set
+ defaultLat = $scope.model.config ? 55.406191899999996 : $scope.model.config.lat,
+ defaultLng = $scope.model.config ? 10.388192199999999 : $scope.model.config.lng;
+ defaultZoomLvl = parseInt($scope.model.config ? 30 : $scope.model.config.zoomlevel);
+ // key = $scope.model.config.key;
+ var self = this;
+ self.map = null;
+ self.marker = null;
+
+ $scope.model.uid = generateID();
+
+ self.mapElement = $scope.model.alias + "_" + $scope.model.uid + "_map";
+
+
+ //Loading the styles
+ assetsService.loadCss("/app_plugins/OsmMaps/assets/css/osmmaps.css");
+ assetsService.loadCss('/app_plugins/OsmMaps/assets/leaflet/leaflet.css');
+ assetsService.loadJs('/app_plugins/OsmMaps/assets/leaflet/leaflet.js')
+ .then(function () {
+ $timeout(function () {
+ initializeMap();
+ });
+ });
+
+ function generateID() {
+ var d = new Date().getTime();
+ var id = 'xxxxxxxx'.replace(/[xy]/g, function (c) {
+ var r = (d + Math.random() * 16) % 16 | 0;
+ d = Math.floor(d / 16);
+ return (c === "x" ? r : (r & 0x3 | 0x8)).toString(16);
+ });
+ return id;
+ };
+
+ function initializeMap() {
+ self.map = L.map(self.mapElement);
+
+ L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png', {
+ attribution: '© OpenStreetMap contributors'
+ }).addTo(self.map);
+
+ // Getting text for the reset button
+ $scope.resetTxt = $scope.model.config.resetTxt;
+
+ var location = $scope.model.value ? $scope.model.value.split(',') : null;
+
+ resetBtn = document.getElementById("umb-osmmaps-reset-" + $scope.model.uid);
+
+ if (location !== undefined && location !== null && location.length >= 2) {
+ var zoom = defaultZoomLvl;
+ if (location.length === 3) {
+ zoom = location[2];
+ }
+ self.map.setView([location[0], location[1]], zoom);
+ self.marker = L.marker(location).addTo(self.map);
+ }
+ else {
+ self.map.setView([defaultLat, defaultLng], defaultZoomLvl);
+ self.marker = L.marker([defaultLat, defaultLng]).addTo(self.map);
+ }
+
+ self.map.on('resize', function (e) {
+ var center = self.map.getCenter();
+ self.map.setView(center);
+ });
+
+ self.map.on('click', function (e) {
+ var center = e.latlng;
+ $scope.model.value = e.latlng.lat + "," + e.latlng.lng + "," + self.map.getZoom();
+ self.marker.setLatLng(e.latlng); // .update(); // we coude use .update() if we update the latlng object
+ });
+ }
+ });
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/OsmMaps.html b/UmbracoPackages/App_Plugins/OsmMaps/OsmMaps.html
new file mode 100644
index 0000000..aee32ae
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/OsmMaps.html
@@ -0,0 +1,25 @@
+
+
+
+ Oops! Having trouble geocoding specified address! Please try again.
+
+
+
+ Location set to
+
+
+
+
+
+ {{formattedAddress}}
+
+
+
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/assets/css/osmmaps.css b/UmbracoPackages/App_Plugins/OsmMaps/assets/css/osmmaps.css
new file mode 100644
index 0000000..846837f
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/assets/css/osmmaps.css
@@ -0,0 +1,11 @@
+.osmmaps .map{
+ height: 400px;
+}
+
+.osmmaps .btn{
+ margin-top:10px;
+}
+
+.osmmaps .hide{
+ display: none;
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/images/layers-2x.png b/UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/images/layers-2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..a2cf7f9efef65d2e021f382f47ef50d51d51a0df
GIT binary patch
literal 2898
zcmV-Y3$65tP)?AfzNU07Ji0>J$I
zyy*J%>jA&t|KY2zz8cz!dNXf;;xfzYhMv6otBB#?C3IqawZEtV)Ws@UgL!F(S
zVuQi(g3)MfC@U-DvZ*wkrlzJCm&-NacDq09>gq~l5}T2sGiS~m&}cNz)Ya8VDT)#l
zNC*+dVzFibkV>Wf6h#RdO+pCebUI^xzyIT7$BqeRmmotYPo7ln-o5)Lb#-+Wt4tB1
zL?WS%$KwYGA#wnqC~8q6kz5js#Q~u?=I7@{PN#EXe0=;bLfDnk&?-~(di{aQ%F2}6
z@Otq)pTDxQa)9Ug-O2u^X?k2HlU<@|dP!(bpU+2oJf2JG*tMadci(-tUaeLiZfIyI
zNXL}*ZH>iZbu7y^5kgWvyHOOC5Q#)KsZ{C&ASge}vh={fz(ODpIRDBkuQ-zCz2DG@
z6DQ<4o$iRqWHRj7u|x2JWLdT}9*;l4^Za(9F#tf*^mh`8#Vh4?g(dDVl2B@enN;WQv=CFQPhf9EWRp{
zNIXJgB9Vy5;c(oXn3y=%-rnw`&Ye4V)Mzv|l$VzaHo|e-_E;?T1kdxO*)=`2Xqpa6
zrP7NG!+a++W^!^;hrf`@B%%6jB1%hvEb
zFJ>4fL{U`QO=E0qtk7<^KSgzPbPxbBg+g)p>8GEbC@wBeYV3ZdJSwGQ*R5N(WS@NU
zNkupuZUrD^T3cIt2q6ce(P*R7=`5L>n_JN7bW0RVDKOzL<*owE|)*|
z=9_Ph+_P37C(~njkHQ666opafyd+FS(c>%d`Sp-
z`JH#(8C@+SS|9N2v(JVZh6&ubaf8_Hc6w-N2$PeOXliOgb#?V4H?UqKBO|ccY?z;)
zhfF4;&1N%EsZ;@u*D=RA~Dk?%tOA8c=4VUv}hGC8|TCMgUDwV34
zrs<>$B{w%0TCEl`nGC^T5K~iA2m}Ji&(FuUZQHiQ%*4b5KL7l4_AkZ2nK`j`Fyy2
z`!Kkw^p=FJ44nUmup2m!VRr@Z^(ELa9_@6(h;y^ZEL^ySv4Ui;H!u96I#v
zx8Iulet&Oyc{weSNRq-+EEYqhQlX@z1T!-;2nK`jdc6PurBeA&W*iO&zWVAbghCjHZwG}lrH7Pr5d3kyIv(G*o9v>e!1DK_0`Y=TZ!5eS9AzNHr{1t#-0$?jED{U<;
zEss+aCE6$%&+`}>8iL#H2FGzIEiJ{qefu&t77B&X)6;`sFbIZWU@#a^TU(oQjS@oG
zzP`RIKA*1%cXsNx<#PF3ufP8K%7z@u%gc+I&1Px31}-ctz-F@{6beBs7DKPs-EPOq$_fe#3sbV|KBl0tu@My&6)E$_Vlnjh
z_hWK$5)z37)z#HdDwY2N(B9V8Hu->|?(XjA0i48L4zVl?uh+Ylz+^I^s;VmG;!MXb
z0Ze&7gb<95j$&|d5UU-m)9D}*t*wS70KWlns;#Y!r7m2!Py^tP0KT6r;ljcKTrL+D
z7Z-)F0KkLns;#XB01OQc31!LydE|0Aj7DRsDR~{hPnqiK>c8#Sv12d8FgeLeNu^Sh
zm6bsvksuTb!RPZK8jWJ-&Yc@B++^&Uo}L!W6qaRSx7%T}*^o#iP*qh0qtOVNY~vSW
zj^pG`r&CXLbaW&DENHb_w??CRe8ULbna3WF2RCotL{3f)_U_#awOXAj1kq>|cDo$_
z(Ae0BoSdZnwx&QJfNR&Tt#z7SuTQ&vr>Cd;T`pHCA*77z=;&wz@E(9lu~_VEYHG@t
z%jK1+5`@EH3=a>lRcbbyk)NNRveI-~T3SMHZ|_=X)zs9aos!XLblPUKO-7?pGXNie
zmnlLBEEbClz$%C6l9G}ud-m*UVHjq^dBO8M{C+h5~JRXF@VdUrMqot)qFkC~S5c>N1u(Y%Ug+c+nUXQ%Iyp%EFaCp$+a7a0hs{-&P
zfS0XSYjO^)Gxi*S-vij0latfi)YMd-lasS6UE@YZMj(V;8!#oMkwhXfXSdsj78Vv-
z0n7mSxz%d@`~BrMJPNj0EQJ8N02~7lEh{Ut84QM$k3;F$C4ebO<@ft9kByDh0N4iL
z41i9n)jFT7Y}(rgi^bA>H%SA-Fr)SL^)ZD)VM-N~j9maSVG00XadFXSv)Pssi9{WM
z0RYFWR%?H%7(v%57K?=ea2&vI0musq3NAM`Hr9&8;tgM42_cxAoW$7J7
zXf#RRbXT>?E&v%b1;9T6{LE^#3O>ls>W
z1%Om4^+QKT$He~%>hA6?ZftBk<8ry0&1N$IV0CpB>2x|AjYe;Fc6L7h&!E1(zLV9}
z)u*ghYw33S?Ck9Fgo=++wEZ(=B3H#x{g#TB~MOH_MSa^
zc4|)`Ns{=6hK6>J$8)^2w3OYbQA&$)x!mgjU^1EhAcSN$>dVW^nk>r$u~@866vh0G
zpj)?YHF`XrckFh1+18Bm`FyRSC@qvyBLEOW)(i&25YO}DTWx1%W}eBi{Nw42!K@e0==o
zxpU{{$nD#=-|~9BZwP{5+EOON+S*#Ps;cz>Ufv`?=QwW6Xf%ciA<9N!VPPScOeTM2
z-EQ}HPN#E85Cpv-DvILC<#KQ7y6yx(c7Xr@(RKZxs;V`FkY$!-7Yf4T$B&Ed-o1N<
zZE9+oefaR<2dPx*`JqFH463TWsVGVi0KW&o*2Qa@R;_7TrK+m4y}iAba5&toD9UGq
zQi`6Qp4W6;?^|76J$~%iG2-=lUxD$@N+y%IckdoGo6Q3Z!?d42e}0ifqtTO;(yIXc
zOG`@#hr=i-DM4#%D-IkuurEL+lfmHNAXZjZ(A?Y%i^T!}aYD$4ti$2>-r;b#3kZ@&v(P5LT;o-DhrY4v|QNvMf8u^L+b-3m2Y|J9qB10=NpGer06^@pv5N<>feX
zg(&*Cs5aQjE#+9YHA8TpAUi{Y=lqVzkffYD9SGYK9?lv`KH@j6va9K
z-w1+$Kp+s{IIgtNqjWlrr%#_E5C{MOMn*5}%e7uUP19CmvDon3+#Ch)u_Q@<
z7GnSFJrYHc0C=AeBKmy3#j2{RmV%bcAKzn;9E(O
zHU-}Cg%w4y9Ke@Gqw#Ps7_=4_7gud(m(6BpB9X|WY&JU%;8RJG=C`xk_0J%RVjCgk
zE1S)hsjI7NVHm~;0F+WS9*+-BPfwdErJa%_gh876I}?PQWpJLz%)x;}A1s3+;FijJ6nrW+Pl4)+EiN1Z`Z};D5lx0BtvZnmddk_DqORVPG3@A
z|MUAQ5d8CyG`n3U%W5w|$1lmUI>14Eit;<8S?vK{s*?{-Ss+T)u_t92ZJTA8?H?iF
zR>;v&x7=gkU3dZlw!Q;_2%o}};F13pC@6@Z$Rj?JWwli(vf7`Uv_M3vmPaI6ZRyg?
zwr>!?ft(K4bi>Np0r=D2_w3@8-GdNOt_Q!(r!eStxP|AMG^4f1MRn*m6B>vlqxDrZ
z^e+Su+;WdVxV9T!t{sF|>)yKqtLo0f%X=)K?{|}VWzP^q==9)`cMLdQ#3#~>wy4qc
zkwZdrRrSA+s#>ZLK#*s&!Gi5)Vb$&-com)GuwvIBL{{}fScMrv%gqq1Gu;L{wqS=D
zA}ae~dCefKx&Wue^ipzWJZ7j
zXOrbS%~*l+4B-|15TG$lD8hF1;}EmhTVCA{%ItO^Ul121NsW&?6bK%9NRoQ!5CUZB
zO|YcG$Vgw>H3Xqp1%I_^QV@c+R-jF?y|mH7qa2-(C
z0ugQ8pDRw<4{n()NIJyegIV${HQGfO5|ixWN;7!nv;%PvB8%H$$MGRJ`}fQ6#kbes
z>h&MMcTZrm#Ts3`fhrQak0q-hmbwneh)8_kw~}aV#&vv&0DQ
zTMfe^L}O-h6u4_rJ&^vk4ik*_)7p25=@J%{bu-Se@_xIv$v4hVrK*YPiWBP+oJ5Ir
zr3moEi=@SPav_d;H&n2Pu<`*W>zjWJNOw_DD_r~j28`tsSACjsxMemoPU@AB>{HW|
ztXJMqrYlUW(>mdwMq$Dp@GE$mom`;n2e&N-yI52)$YiOCq+5IXJdE|zd*KS>5aSRb
z&c)UdVb4DKNOFD!$C<8h{hnqg;riV@!i3$}=UGTOZpIU)>0{iquGsT|d?Y#Yne-5SPQrxRe+$>w;#JvMh{Q|>l$k-X
z*)S}8wwajRf-*gjo*13Ddi{I2mrq!J6XOcRiG#RlA-3m(|8_HzBcDkRaoI^2U;8Bj
zLQ1_>oIw~*j8y0k)gb88Fw%SV$TO(&Ik0F^e6@=
zLHw>E1o&f_sL`n+G87&T9yqi}E?j2>(j)xilP|{{#Ely_L7r5{ctW;yF>b25Js}>`iO75R6BpgcE9|%%7ZRzD#1@K!W4(uK@LfLHB`NAX3qZf^YwSvp;i9@cqQ*)vIMW(V~k@y^(GFR
zk?hjYBY8Jfi-jYuvcKGw#YY%vDItj}3
z7Q|uPsUF8INEZfRw#oQYFK+5{*aoL3O>O}4)g`9<@EtcFTw-*g{8$|m2r9KG(G1~;
z5e{y}MqI4=Zwu&dpd`7ElAEf=5>(R5d?a55G39=D1mdJp{meN=dkKNp1|7_pf2kQ<
za(hP&%AULsujtTO-x4$UA&=)46DW!dAjWf}ei8-FW91wTuZPe2cpnffC0y4@sv2)Mw;_ci|bZ`gPMKR{MfO
zKlGq*A1TRFnjioxLQU_S-3#-w^pgr|akh3F*-@`3{jraTr2X0$DxU9J6
zonZ#3S7xR6ObDnNWJ8&AnybbQ=UC0Wae1hQ7p*{c(l)9RmncZ49Yhd#w`%)
zJK~gOp5Ur+-DQnt#)LdUN8^=@2-enu2QF9ys>*XI-S-6QHw&K;_-m@Idn%23!X5>r
z@k-;CZ74HNf_oumFy8=wOzyrX$n%YiOPc-`SB%=YvR_CYcdtRU%#lH0jzd^#(k@-di-hx~al>I_R&DnN#rm07DYJ+aF!NQPu(
zbl)m=2e-pbn6kGOq%ozxMkhXFRl&@1RiUgum3Vj1u#)6jsv%5j<*IR6^t$emDShpN
z7o|>QRl&?k@XAh_XN1|9@o5QNcLkjz8A*rcE*n}g+c*p5
z7~m;%`pNaTgO1TTk`ZiZ=Bn}0^D(8ryf5D9p^RE?AC-e7yN3;(S*bnf{JGme)u3~(
zS$ORcqqFvg`t|$f)g;O&W!6%aW^l!m_k7b2$D02GPgh9AD1`()~cZ8Oj2AQyau(pP%|J;>TN`^P;r=4@@A|s=UjbU%Sr&
zOCYBon0Iw=*%^D@^5cwU6_3(-JaBP001cn1^@s6z>|W`000J>NklgF+#9zZY7a#;@J(5X0e&McXK2n7+jhR}<0i-1U5t`>D@
zJSJ*^swjdwq0keUf9!BETXZhVyjqS4&z|?2HdJnOU-HYF_xSyu=XsCkdtVv=(53>u
zME@3F*5J;OHwJNJdWK(ivQ??rr&t7M)1yRas=d_yYH>g+p#{(
zm+NoyW%|8bNfUkAMrabri(FY#Dqr5%zhZA&e^iALHXiJOFYA7Qt##L_a?_z6SW{&J
zVeyp#G&snW>SO{*%d9CGVM}xic~V`MU$)*JU1Nbw2YX?ywi}|VZ4g;$g)p^+DoLHR
zZ^Zr$S_=f^oU`+!4K^?NsU;H{;bhhex#H7(!s52U&FJ}OHQf-VvVd?Btj2MhF|zQI
z%l~jBr~6T7^_WIHC1>8j&bv`c18g|Z3*l-jgeoml1{oh++Y75JI)RgU>LEY<%)C)X
zI2rZ2kb>s^4cZuYeq3!A}DS`X~>Nd;+A$4e;ZwyD<1@2!8$ZKJ3w%!6)+sCALy+bKwyk
zqKCS6qEGWmJ)97b-QXY|`<0lS5THkEtGgjE>ojOvuftfM&Ugd-rQg9C+|FdGM)HXs
z(IxsA$&r(xg_j^4=hC;>s;1UF*Wp1I-2~sEF
zZYgb?&`4bM1qjM*hR`yr3qJ(;L>Kj2XpBUy+)t((6z;bIr@-ihFNVAl4<#?{TWIaQ
zIi>;YjXS_iIfNb?!N1t-!Y6vZvW5ZXE{%l7imzV9NvV4nf#G`Pcex;#@}?EINwsk7
z>UC=SlJC*b5a>-mgHP%q2+qF;cbNx
ztCV@{s&fPsSt#;i@#G-m$as&$gLaG}ebOrtS5*22&glbhMH_fz8(~qVVN!VIVCKzg
z1$U9^93(E%Ur9v_R*h#!t)Ce+#)+m(q^zCq%g&L-!E
zC&et9WrT(49pl0S`?=DK7=`+;`CB!wP3ta97b)XdJ8K=@`DXOk0Q0};7zNT!`k4t@
z+)=9S)4p(jEGm5!qq)PDTmXiw3qDM19|fiylc@LtiQ=}Kfb#w&ckv^7tBj;cfwtY$q?IdliYlg
zqh@4;IyW)OFPQPw4z|JsAEb7`+@yA@Q8SXQT#;upV`QNJ59Bg5m(jci3`0T4X-&^GU6)x7$Vi0XMWB(2hrdK^!hq0
zt!bDg$Hh)-9L62h`&{0PBf%7vM>69o`k4~kx^Wc)?lG!}=WgV2x-rq?HN#jMr^B0;
p5zMeb2q5MEX5{g&Aa%N&e*pr!t%ZZ}>w*9P002ovPDHLkV1gpUS8xCT
literal 0
HcmV?d00001
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/images/marker-shadow.png b/UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/images/marker-shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1e773c715a9b508ebea055c4bb4b0a2ad7f6e52
GIT binary patch
literal 797
zcmV+&1LFLNP)oNwbRQ6Eq$4M3RDU@$
z<4cV9zWLV=bA&uX9wCpA{{f^4$D#k>GcX53-UQqf>_LzMU@frMz|MwbfQGbY0?ccG
zBj_wh0?6Tv;HWR0`x;m^Bm<;sCm_85SGspFBn6|A!tDh$nR`wGorGkyL7j?F3#OJq
zIswLIz;iF7f|LMnF(pXPAY*GYpsw%&e_WjlnV`C$6@#Q7GZu1$Q8>&p8=(iJj8o|T~0u%hM*Yg_d(Av{WS$h&pM%nlEAonVL0;DkN|xc
zn)9F+aMDk#VtAMb0c=kIb1pU-$e4$3pwo&qVh(Umlw3_IU_dFcFe(In6*x}D4LHLhFZ4N=V2ZR+>XHU5D&uY$npJ7Eu?{iAK>UxC?4uyg4+iD
z!nst**H%2zhOBxc7C7Tv{f^`%hqT1KpU@Vf6+C2|bGaR(1~TU5D-1;&HXT~PMc2Lu
z{Q%^i6vvox&EMFT7I_)R$xq1779I8kE@?|D*cLWnP0a@a)xJA`o*^$^V(yN)b`kV7
z=o@jbFF4j{KeuQh
+ var sources = Array.prototype.slice.call(arguments, 1),
+ i, j, len, src;
+
+ for (j = 0, len = sources.length; j < len; j++) {
+ src = sources[j] || {};
+ for (i in src) {
+ if (src.hasOwnProperty(i)) {
+ dest[i] = src[i];
+ }
+ }
+ }
+ return dest;
+ },
+
+ bind: function (fn, obj) { // (Function, Object) -> Function
+ var args = arguments.length > 2 ? Array.prototype.slice.call(arguments, 2) : null;
+ return function () {
+ return fn.apply(obj, args || arguments);
+ };
+ },
+
+ stamp: (function () {
+ var lastId = 0,
+ key = '_leaflet_id';
+ return function (obj) {
+ obj[key] = obj[key] || ++lastId;
+ return obj[key];
+ };
+ }()),
+
+ invokeEach: function (obj, method, context) {
+ var i, args;
+
+ if (typeof obj === 'object') {
+ args = Array.prototype.slice.call(arguments, 3);
+
+ for (i in obj) {
+ method.apply(context, [i, obj[i]].concat(args));
+ }
+ return true;
+ }
+
+ return false;
+ },
+
+ limitExecByInterval: function (fn, time, context) {
+ var lock, execOnUnlock;
+
+ return function wrapperFn() {
+ var args = arguments;
+
+ if (lock) {
+ execOnUnlock = true;
+ return;
+ }
+
+ lock = true;
+
+ setTimeout(function () {
+ lock = false;
+
+ if (execOnUnlock) {
+ wrapperFn.apply(context, args);
+ execOnUnlock = false;
+ }
+ }, time);
+
+ fn.apply(context, args);
+ };
+ },
+
+ falseFn: function () {
+ return false;
+ },
+
+ formatNum: function (num, digits) {
+ var pow = Math.pow(10, digits || 5);
+ return Math.round(num * pow) / pow;
+ },
+
+ trim: function (str) {
+ return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
+ },
+
+ splitWords: function (str) {
+ return L.Util.trim(str).split(/\s+/);
+ },
+
+ setOptions: function (obj, options) {
+ obj.options = L.extend({}, obj.options, options);
+ return obj.options;
+ },
+
+ getParamString: function (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('&');
+ },
+ template: function (str, data) {
+ return str.replace(/\{ *([\w_]+) *\}/g, 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;
+ });
+ },
+
+ isArray: Array.isArray || function (obj) {
+ return (Object.prototype.toString.call(obj) === '[object Array]');
+ },
+
+ emptyImageUrl: 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='
+};
+
+(function () {
+
+ // inspired by http://paulirish.com/2011/requestanimationframe-for-smart-animating/
+
+ function getPrefixed(name) {
+ var i, fn,
+ prefixes = ['webkit', 'moz', 'o', 'ms'];
+
+ for (i = 0; i < prefixes.length && !fn; i++) {
+ fn = window[prefixes[i] + name];
+ }
+
+ return fn;
+ }
+
+ var lastTime = 0;
+
+ 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); };
+
+
+ L.Util.requestAnimFrame = function (fn, context, immediate, element) {
+ fn = L.bind(fn, context);
+
+ if (immediate && requestFn === timeoutDefer) {
+ fn();
+ } else {
+ return requestFn.call(window, fn, element);
+ }
+ };
+
+ L.Util.cancelAnimFrame = function (id) {
+ if (id) {
+ cancelFn.call(window, id);
+ }
+ };
+
+}());
+
+// shortcuts for most used utility functions
+L.extend = L.Util.extend;
+L.bind = L.Util.bind;
+L.stamp = L.Util.stamp;
+L.setOptions = L.Util.setOptions;
+
+
+/*
+ * L.Class powers the OOP facilities of the library.
+ * Thanks to John Resig and Dean Edwards for inspiration!
+ */
+
+L.Class = function () {};
+
+L.Class.extend = function (props) {
+
+ // extended class with the new prototype
+ var NewClass = function () {
+
+ // call the constructor
+ if (this.initialize) {
+ this.initialize.apply(this, arguments);
+ }
+
+ // call all constructor hooks
+ if (this._initHooks) {
+ this.callInitHooks();
+ }
+ };
+
+ // instantiate class without calling constructor
+ var F = function () {};
+ F.prototype = this.prototype;
+
+ var proto = new F();
+ proto.constructor = NewClass;
+
+ NewClass.prototype = proto;
+
+ //inherit parent's statics
+ for (var i in this) {
+ if (this.hasOwnProperty(i) && i !== 'prototype') {
+ NewClass[i] = this[i];
+ }
+ }
+
+ // mix static properties into the class
+ if (props.statics) {
+ L.extend(NewClass, props.statics);
+ delete props.statics;
+ }
+
+ // mix includes into the prototype
+ if (props.includes) {
+ L.Util.extend.apply(null, [proto].concat(props.includes));
+ delete props.includes;
+ }
+
+ // merge options
+ if (props.options && proto.options) {
+ props.options = L.extend({}, proto.options, props.options);
+ }
+
+ // mix given properties into the prototype
+ L.extend(proto, props);
+
+ proto._initHooks = [];
+
+ var parent = this;
+ // jshint camelcase: false
+ NewClass.__super__ = parent.prototype;
+
+ // add method for calling all hooks
+ proto.callInitHooks = function () {
+
+ if (this._initHooksCalled) { return; }
+
+ if (parent.prototype.callInitHooks) {
+ parent.prototype.callInitHooks.call(this);
+ }
+
+ this._initHooksCalled = true;
+
+ for (var i = 0, len = proto._initHooks.length; i < len; i++) {
+ proto._initHooks[i].call(this);
+ }
+ };
+
+ return NewClass;
+};
+
+
+// method for adding properties to prototype
+L.Class.include = function (props) {
+ L.extend(this.prototype, props);
+};
+
+// merge new default options to the Class
+L.Class.mergeOptions = function (options) {
+ L.extend(this.prototype.options, options);
+};
+
+// add a constructor hook
+L.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);
+};
+
+
+/*
+ * L.Mixin.Events is used to add custom events functionality to Leaflet classes.
+ */
+
+var eventsKey = '_leaflet_events';
+
+L.Mixin = {};
+
+L.Mixin.Events = {
+
+ addEventListener: function (types, fn, context) { // (String, Function[, Object]) or (Object[, Object])
+
+ // types can be a map of types/handlers
+ if (L.Util.invokeEach(types, this.addEventListener, this, fn, context)) { return this; }
+
+ var events = this[eventsKey] = this[eventsKey] || {},
+ contextId = context && context !== this && L.stamp(context),
+ i, len, event, type, indexKey, indexLenKey, typeIndex;
+
+ // types can be a string of space-separated words
+ types = L.Util.splitWords(types);
+
+ for (i = 0, len = types.length; i < len; i++) {
+ event = {
+ action: fn,
+ context: context || this
+ };
+ type = types[i];
+
+ if (contextId) {
+ // store listeners of a particular context in a separate hash (if it has an id)
+ // gives a major performance boost when removing thousands of map layers
+
+ indexKey = type + '_idx';
+ indexLenKey = indexKey + '_len';
+
+ typeIndex = events[indexKey] = events[indexKey] || {};
+
+ if (!typeIndex[contextId]) {
+ typeIndex[contextId] = [];
+
+ // keep track of the number of keys in the index to quickly check if it's empty
+ events[indexLenKey] = (events[indexLenKey] || 0) + 1;
+ }
+
+ typeIndex[contextId].push(event);
+
+
+ } else {
+ events[type] = events[type] || [];
+ events[type].push(event);
+ }
+ }
+
+ return this;
+ },
+
+ hasEventListeners: function (type) { // (String) -> Boolean
+ var events = this[eventsKey];
+ return !!events && ((type in events && events[type].length > 0) ||
+ (type + '_idx' in events && events[type + '_idx_len'] > 0));
+ },
+
+ removeEventListener: function (types, fn, context) { // ([String, Function, Object]) or (Object[, Object])
+
+ if (!this[eventsKey]) {
+ return this;
+ }
+
+ if (!types) {
+ return this.clearAllEventListeners();
+ }
+
+ if (L.Util.invokeEach(types, this.removeEventListener, this, fn, context)) { return this; }
+
+ var events = this[eventsKey],
+ contextId = context && context !== this && L.stamp(context),
+ i, len, type, listeners, j, indexKey, indexLenKey, typeIndex, removed;
+
+ types = L.Util.splitWords(types);
+
+ for (i = 0, len = types.length; i < len; i++) {
+ type = types[i];
+ indexKey = type + '_idx';
+ indexLenKey = indexKey + '_len';
+
+ typeIndex = events[indexKey];
+
+ if (!fn) {
+ // clear all listeners for a type if function isn't specified
+ delete events[type];
+ delete events[indexKey];
+ delete events[indexLenKey];
+
+ } else {
+ listeners = contextId && typeIndex ? typeIndex[contextId] : events[type];
+
+ if (listeners) {
+ for (j = listeners.length - 1; j >= 0; j--) {
+ if ((listeners[j].action === fn) && (!context || (listeners[j].context === context))) {
+ removed = listeners.splice(j, 1);
+ // set the old action to a no-op, because it is possible
+ // that the listener is being iterated over as part of a dispatch
+ removed[0].action = L.Util.falseFn;
+ }
+ }
+
+ if (context && typeIndex && (listeners.length === 0)) {
+ delete typeIndex[contextId];
+ events[indexLenKey]--;
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ clearAllEventListeners: function () {
+ delete this[eventsKey];
+ return this;
+ },
+
+ fireEvent: function (type, data) { // (String[, Object])
+ if (!this.hasEventListeners(type)) {
+ return this;
+ }
+
+ var event = L.Util.extend({}, data, { type: type, target: this });
+
+ var events = this[eventsKey],
+ listeners, i, len, typeIndex, contextId;
+
+ if (events[type]) {
+ // make sure adding/removing listeners inside other listeners won't cause infinite loop
+ listeners = events[type].slice();
+
+ for (i = 0, len = listeners.length; i < len; i++) {
+ listeners[i].action.call(listeners[i].context, event);
+ }
+ }
+
+ // fire event for the context-indexed listeners as well
+ typeIndex = events[type + '_idx'];
+
+ for (contextId in typeIndex) {
+ listeners = typeIndex[contextId].slice();
+
+ if (listeners) {
+ for (i = 0, len = listeners.length; i < len; i++) {
+ listeners[i].action.call(listeners[i].context, event);
+ }
+ }
+ }
+
+ return this;
+ },
+
+ addOneTimeEventListener: function (types, fn, context) {
+
+ if (L.Util.invokeEach(types, this.addOneTimeEventListener, this, fn, context)) { return this; }
+
+ var handler = L.bind(function () {
+ this
+ .removeEventListener(types, fn, context)
+ .removeEventListener(types, handler, context);
+ }, this);
+
+ return this
+ .addEventListener(types, fn, context)
+ .addEventListener(types, handler, context);
+ }
+};
+
+L.Mixin.Events.on = L.Mixin.Events.addEventListener;
+L.Mixin.Events.off = L.Mixin.Events.removeEventListener;
+L.Mixin.Events.once = L.Mixin.Events.addOneTimeEventListener;
+L.Mixin.Events.fire = L.Mixin.Events.fireEvent;
+
+
+/*
+ * L.Browser handles different browser and feature detections for internal Leaflet use.
+ */
+
+(function () {
+
+ var ie = 'ActiveXObject' in window,
+ ielt9 = ie && !document.addEventListener,
+
+ // terrible browser detection to work around Safari / iOS / Android browser bugs
+ ua = navigator.userAgent.toLowerCase(),
+ webkit = ua.indexOf('webkit') !== -1,
+ chrome = ua.indexOf('chrome') !== -1,
+ phantomjs = ua.indexOf('phantom') !== -1,
+ android = ua.indexOf('android') !== -1,
+ android23 = ua.search('android [23]') !== -1,
+ gecko = ua.indexOf('gecko') !== -1,
+
+ mobile = typeof orientation !== undefined + '',
+ msPointer = !window.PointerEvent && window.MSPointerEvent,
+ pointer = (window.PointerEvent && window.navigator.pointerEnabled) ||
+ msPointer,
+ retina = ('devicePixelRatio' in window && window.devicePixelRatio > 1) ||
+ ('matchMedia' in window && window.matchMedia('(min-resolution:144dpi)') &&
+ window.matchMedia('(min-resolution:144dpi)').matches),
+
+ doc = document.documentElement,
+ ie3d = ie && ('transition' in doc.style),
+ webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23,
+ gecko3d = 'MozPerspective' in doc.style,
+ opera3d = 'OTransition' in doc.style,
+ any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d || opera3d) && !phantomjs;
+
+ var touch = !window.L_NO_TOUCH && !phantomjs && (pointer || 'ontouchstart' in window ||
+ (window.DocumentTouch && document instanceof window.DocumentTouch));
+
+ L.Browser = {
+ ie: ie,
+ ielt9: ielt9,
+ webkit: webkit,
+ gecko: gecko && !webkit && !window.opera && !ie,
+
+ android: android,
+ android23: android23,
+
+ chrome: chrome,
+
+ ie3d: ie3d,
+ webkit3d: webkit3d,
+ gecko3d: gecko3d,
+ opera3d: opera3d,
+ any3d: any3d,
+
+ mobile: mobile,
+ mobileWebkit: mobile && webkit,
+ mobileWebkit3d: mobile && webkit3d,
+ mobileOpera: mobile && window.opera,
+
+ touch: touch,
+ msPointer: msPointer,
+ pointer: pointer,
+
+ retina: retina
+ };
+
+}());
+
+
+/*
+ * L.Point represents a point with x and y coordinates.
+ */
+
+L.Point = function (/*Number*/ x, /*Number*/ y, /*Boolean*/ round) {
+ this.x = (round ? Math.round(x) : x);
+ this.y = (round ? Math.round(y) : y);
+};
+
+L.Point.prototype = {
+
+ clone: function () {
+ return new L.Point(this.x, this.y);
+ },
+
+ // non-destructive, returns a new point
+ add: function (point) {
+ return this.clone()._add(L.point(point));
+ },
+
+ // destructive, used directly for performance in situations where it's safe to modify existing point
+ _add: function (point) {
+ this.x += point.x;
+ this.y += point.y;
+ return this;
+ },
+
+ subtract: function (point) {
+ return this.clone()._subtract(L.point(point));
+ },
+
+ _subtract: function (point) {
+ this.x -= point.x;
+ this.y -= point.y;
+ return this;
+ },
+
+ divideBy: function (num) {
+ return this.clone()._divideBy(num);
+ },
+
+ _divideBy: function (num) {
+ this.x /= num;
+ this.y /= num;
+ return this;
+ },
+
+ multiplyBy: function (num) {
+ return this.clone()._multiplyBy(num);
+ },
+
+ _multiplyBy: function (num) {
+ this.x *= num;
+ this.y *= num;
+ return this;
+ },
+
+ round: function () {
+ return this.clone()._round();
+ },
+
+ _round: function () {
+ this.x = Math.round(this.x);
+ this.y = Math.round(this.y);
+ return this;
+ },
+
+ floor: function () {
+ return this.clone()._floor();
+ },
+
+ _floor: function () {
+ this.x = Math.floor(this.x);
+ this.y = Math.floor(this.y);
+ return this;
+ },
+
+ distanceTo: function (point) {
+ point = L.point(point);
+
+ var x = point.x - this.x,
+ y = point.y - this.y;
+
+ return Math.sqrt(x * x + y * y);
+ },
+
+ equals: function (point) {
+ point = L.point(point);
+
+ return point.x === this.x &&
+ point.y === this.y;
+ },
+
+ contains: function (point) {
+ point = L.point(point);
+
+ return Math.abs(point.x) <= Math.abs(this.x) &&
+ Math.abs(point.y) <= Math.abs(this.y);
+ },
+
+ toString: function () {
+ return 'Point(' +
+ L.Util.formatNum(this.x) + ', ' +
+ L.Util.formatNum(this.y) + ')';
+ }
+};
+
+L.point = function (x, y, round) {
+ if (x instanceof L.Point) {
+ return x;
+ }
+ if (L.Util.isArray(x)) {
+ return new L.Point(x[0], x[1]);
+ }
+ if (x === undefined || x === null) {
+ return x;
+ }
+ return new L.Point(x, y, round);
+};
+
+
+/*
+ * L.Bounds represents a rectangular area on the screen in pixel coordinates.
+ */
+
+L.Bounds = function (a, b) { //(Point, Point) or Point[]
+ if (!a) { return; }
+
+ var points = b ? [a, b] : a;
+
+ for (var i = 0, len = points.length; i < len; i++) {
+ this.extend(points[i]);
+ }
+};
+
+L.Bounds.prototype = {
+ // extend the bounds to contain the given point
+ extend: function (point) { // (Point)
+ point = L.point(point);
+
+ if (!this.min && !this.max) {
+ this.min = point.clone();
+ this.max = point.clone();
+ } else {
+ this.min.x = Math.min(point.x, this.min.x);
+ this.max.x = Math.max(point.x, this.max.x);
+ this.min.y = Math.min(point.y, this.min.y);
+ this.max.y = Math.max(point.y, this.max.y);
+ }
+ return this;
+ },
+
+ getCenter: function (round) { // (Boolean) -> Point
+ return new L.Point(
+ (this.min.x + this.max.x) / 2,
+ (this.min.y + this.max.y) / 2, round);
+ },
+
+ getBottomLeft: function () { // -> Point
+ return new L.Point(this.min.x, this.max.y);
+ },
+
+ getTopRight: function () { // -> Point
+ return new L.Point(this.max.x, this.min.y);
+ },
+
+ getSize: function () {
+ return this.max.subtract(this.min);
+ },
+
+ contains: function (obj) { // (Bounds) or (Point) -> Boolean
+ var min, max;
+
+ if (typeof obj[0] === 'number' || obj instanceof L.Point) {
+ obj = L.point(obj);
+ } else {
+ obj = L.bounds(obj);
+ }
+
+ if (obj instanceof L.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);
+ },
+
+ intersects: function (bounds) { // (Bounds) -> Boolean
+ bounds = L.bounds(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;
+ },
+
+ isValid: function () {
+ return !!(this.min && this.max);
+ }
+};
+
+L.bounds = function (a, b) { // (Bounds) or (Point, Point) or (Point[])
+ if (!a || a instanceof L.Bounds) {
+ return a;
+ }
+ return new L.Bounds(a, b);
+};
+
+
+/*
+ * L.Transformation is an utility class to perform simple point transformations through a 2d-matrix.
+ */
+
+L.Transformation = function (a, b, c, d) {
+ this._a = a;
+ this._b = b;
+ this._c = c;
+ this._d = d;
+};
+
+L.Transformation.prototype = {
+ 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;
+ },
+
+ untransform: function (point, scale) {
+ scale = scale || 1;
+ return new L.Point(
+ (point.x / scale - this._b) / this._a,
+ (point.y / scale - this._d) / this._c);
+ }
+};
+
+
+/*
+ * L.DomUtil contains various utility functions for working with DOM.
+ */
+
+L.DomUtil = {
+ get: function (id) {
+ return (typeof id === 'string' ? document.getElementById(id) : id);
+ },
+
+ getStyle: function (el, style) {
+
+ var value = el.style[style];
+
+ if (!value && el.currentStyle) {
+ value = el.currentStyle[style];
+ }
+
+ if ((!value || value === 'auto') && document.defaultView) {
+ var css = document.defaultView.getComputedStyle(el, null);
+ value = css ? css[style] : null;
+ }
+
+ return value === 'auto' ? null : value;
+ },
+
+ getViewportOffset: function (element) {
+
+ var top = 0,
+ left = 0,
+ el = element,
+ docBody = document.body,
+ docEl = document.documentElement,
+ pos;
+
+ do {
+ top += el.offsetTop || 0;
+ left += el.offsetLeft || 0;
+
+ //add borders
+ top += parseInt(L.DomUtil.getStyle(el, 'borderTopWidth'), 10) || 0;
+ left += parseInt(L.DomUtil.getStyle(el, 'borderLeftWidth'), 10) || 0;
+
+ pos = L.DomUtil.getStyle(el, 'position');
+
+ if (el.offsetParent === docBody && pos === 'absolute') { break; }
+
+ if (pos === 'fixed') {
+ top += docBody.scrollTop || docEl.scrollTop || 0;
+ left += docBody.scrollLeft || docEl.scrollLeft || 0;
+ break;
+ }
+
+ if (pos === 'relative' && !el.offsetLeft) {
+ var width = L.DomUtil.getStyle(el, 'width'),
+ maxWidth = L.DomUtil.getStyle(el, 'max-width'),
+ r = el.getBoundingClientRect();
+
+ if (width !== 'none' || maxWidth !== 'none') {
+ left += r.left + el.clientLeft;
+ }
+
+ //calculate full y offset since we're breaking out of the loop
+ top += r.top + (docBody.scrollTop || docEl.scrollTop || 0);
+
+ break;
+ }
+
+ el = el.offsetParent;
+
+ } while (el);
+
+ el = element;
+
+ do {
+ if (el === docBody) { break; }
+
+ top -= el.scrollTop || 0;
+ left -= el.scrollLeft || 0;
+
+ el = el.parentNode;
+ } while (el);
+
+ return new L.Point(left, top);
+ },
+
+ documentIsLtr: function () {
+ if (!L.DomUtil._docIsLtrCached) {
+ L.DomUtil._docIsLtrCached = true;
+ L.DomUtil._docIsLtr = L.DomUtil.getStyle(document.body, 'direction') === 'ltr';
+ }
+ return L.DomUtil._docIsLtr;
+ },
+
+ create: function (tagName, className, container) {
+
+ var el = document.createElement(tagName);
+ el.className = className;
+
+ if (container) {
+ container.appendChild(el);
+ }
+
+ return el;
+ },
+
+ hasClass: function (el, name) {
+ if (el.classList !== undefined) {
+ return el.classList.contains(name);
+ }
+ var className = L.DomUtil._getClass(el);
+ return className.length > 0 && new RegExp('(^|\\s)' + name + '(\\s|$)').test(className);
+ },
+
+ addClass: function (el, name) {
+ if (el.classList !== undefined) {
+ var classes = L.Util.splitWords(name);
+ for (var i = 0, len = classes.length; i < len; i++) {
+ el.classList.add(classes[i]);
+ }
+ } else if (!L.DomUtil.hasClass(el, name)) {
+ var className = L.DomUtil._getClass(el);
+ L.DomUtil._setClass(el, (className ? className + ' ' : '') + name);
+ }
+ },
+
+ removeClass: function (el, name) {
+ if (el.classList !== undefined) {
+ el.classList.remove(name);
+ } else {
+ L.DomUtil._setClass(el, L.Util.trim((' ' + L.DomUtil._getClass(el) + ' ').replace(' ' + name + ' ', ' ')));
+ }
+ },
+
+ _setClass: function (el, name) {
+ if (el.className.baseVal === undefined) {
+ el.className = name;
+ } else {
+ // in case of SVG element
+ el.className.baseVal = name;
+ }
+ },
+
+ _getClass: function (el) {
+ return el.className.baseVal === undefined ? el.className : el.className.baseVal;
+ },
+
+ setOpacity: function (el, value) {
+
+ if ('opacity' in el.style) {
+ el.style.opacity = value;
+
+ } else if ('filter' in el.style) {
+
+ var filter = false,
+ filterName = 'DXImageTransform.Microsoft.Alpha';
+
+ // filters collection throws an error if we try to retrieve a filter that doesn't exist
+ try {
+ filter = el.filters.item(filterName);
+ } catch (e) {
+ // don't set opacity to 1 if we haven't already set an opacity,
+ // it isn't needed and breaks transparent pngs.
+ if (value === 1) { return; }
+ }
+
+ value = Math.round(value * 100);
+
+ if (filter) {
+ filter.Enabled = (value !== 100);
+ filter.Opacity = value;
+ } else {
+ el.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';
+ }
+ }
+ },
+
+ testProp: function (props) {
+
+ var style = document.documentElement.style;
+
+ for (var i = 0; i < props.length; i++) {
+ if (props[i] in style) {
+ return props[i];
+ }
+ }
+ return false;
+ },
+
+ getTranslateString: function (point) {
+ // on WebKit browsers (Chrome/Safari/iOS Safari/Android) using translate3d instead of translate
+ // makes animation smoother as it ensures HW accel is used. Firefox 13 doesn't care
+ // (same speed either way), Opera 12 doesn't support translate3d
+
+ var is3d = L.Browser.webkit3d,
+ open = 'translate' + (is3d ? '3d' : '') + '(',
+ close = (is3d ? ',0' : '') + ')';
+
+ return open + point.x + 'px,' + point.y + 'px' + close;
+ },
+
+ getScaleString: function (scale, origin) {
+
+ var preTranslateStr = L.DomUtil.getTranslateString(origin.add(origin.multiplyBy(-1 * scale))),
+ scaleStr = ' scale(' + scale + ') ';
+
+ return preTranslateStr + scaleStr;
+ },
+
+ setPosition: function (el, point, disable3D) { // (HTMLElement, Point[, Boolean])
+
+ // jshint camelcase: false
+ el._leaflet_pos = point;
+
+ if (!disable3D && L.Browser.any3d) {
+ el.style[L.DomUtil.TRANSFORM] = L.DomUtil.getTranslateString(point);
+ } else {
+ el.style.left = point.x + 'px';
+ el.style.top = point.y + 'px';
+ }
+ },
+
+ getPosition: function (el) {
+ // this method is only used for elements previously positioned using setPosition,
+ // so it's safe to cache the position for performance
+
+ // jshint camelcase: false
+ return el._leaflet_pos;
+ }
+};
+
+
+// prefix style property names
+
+L.DomUtil.TRANSFORM = L.DomUtil.testProp(
+ ['transform', 'WebkitTransform', 'OTransform', 'MozTransform', 'msTransform']);
+
+// webkitTransition comes first because some browser versions that drop vendor prefix don't do
+// the same for the transitionend event, in particular the Android 4.1 stock browser
+
+L.DomUtil.TRANSITION = L.DomUtil.testProp(
+ ['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);
+
+L.DomUtil.TRANSITION_END =
+ L.DomUtil.TRANSITION === 'webkitTransition' || L.DomUtil.TRANSITION === 'OTransition' ?
+ L.DomUtil.TRANSITION + 'End' : 'transitionend';
+
+(function () {
+ if ('onselectstart' in document) {
+ L.extend(L.DomUtil, {
+ disableTextSelection: function () {
+ L.DomEvent.on(window, 'selectstart', L.DomEvent.preventDefault);
+ },
+
+ enableTextSelection: function () {
+ L.DomEvent.off(window, 'selectstart', L.DomEvent.preventDefault);
+ }
+ });
+ } else {
+ var userSelectProperty = L.DomUtil.testProp(
+ ['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);
+
+ L.extend(L.DomUtil, {
+ disableTextSelection: function () {
+ if (userSelectProperty) {
+ var style = document.documentElement.style;
+ this._userSelect = style[userSelectProperty];
+ style[userSelectProperty] = 'none';
+ }
+ },
+
+ enableTextSelection: function () {
+ if (userSelectProperty) {
+ document.documentElement.style[userSelectProperty] = this._userSelect;
+ delete this._userSelect;
+ }
+ }
+ });
+ }
+
+ L.extend(L.DomUtil, {
+ disableImageDrag: function () {
+ L.DomEvent.on(window, 'dragstart', L.DomEvent.preventDefault);
+ },
+
+ enableImageDrag: function () {
+ L.DomEvent.off(window, 'dragstart', L.DomEvent.preventDefault);
+ }
+ });
+})();
+
+
+/*
+ * L.LatLng represents a geographical point with latitude and longitude coordinates.
+ */
+
+L.LatLng = function (lat, lng, alt) { // (Number, Number, Number)
+ lat = parseFloat(lat);
+ lng = parseFloat(lng);
+
+ if (isNaN(lat) || isNaN(lng)) {
+ throw new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');
+ }
+
+ this.lat = lat;
+ this.lng = lng;
+
+ if (alt !== undefined) {
+ this.alt = parseFloat(alt);
+ }
+};
+
+L.extend(L.LatLng, {
+ DEG_TO_RAD: Math.PI / 180,
+ RAD_TO_DEG: 180 / Math.PI,
+ MAX_MARGIN: 1.0E-9 // max margin of error for the "equals" check
+});
+
+L.LatLng.prototype = {
+ equals: function (obj) { // (LatLng) -> Boolean
+ if (!obj) { return false; }
+
+ obj = L.latLng(obj);
+
+ var margin = Math.max(
+ Math.abs(this.lat - obj.lat),
+ Math.abs(this.lng - obj.lng));
+
+ return margin <= L.LatLng.MAX_MARGIN;
+ },
+
+ toString: function (precision) { // (Number) -> String
+ return 'LatLng(' +
+ L.Util.formatNum(this.lat, precision) + ', ' +
+ L.Util.formatNum(this.lng, precision) + ')';
+ },
+
+ // Haversine distance formula, see http://en.wikipedia.org/wiki/Haversine_formula
+ // TODO move to projection code, LatLng shouldn't know about Earth
+ distanceTo: function (other) { // (LatLng) -> Number
+ other = L.latLng(other);
+
+ var R = 6378137, // earth radius in meters
+ d2r = L.LatLng.DEG_TO_RAD,
+ dLat = (other.lat - this.lat) * d2r,
+ dLon = (other.lng - this.lng) * d2r,
+ lat1 = this.lat * d2r,
+ lat2 = other.lat * d2r,
+ sin1 = Math.sin(dLat / 2),
+ sin2 = Math.sin(dLon / 2);
+
+ var a = sin1 * sin1 + sin2 * sin2 * Math.cos(lat1) * Math.cos(lat2);
+
+ return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+ },
+
+ wrap: function (a, b) { // (Number, Number) -> LatLng
+ var lng = this.lng;
+
+ a = a || -180;
+ b = b || 180;
+
+ lng = (lng + b) % (b - a) + (lng < a || lng === b ? b : a);
+
+ return new L.LatLng(this.lat, lng);
+ }
+};
+
+L.latLng = function (a, b) { // (LatLng) or ([Number, Number]) or (Number, Number)
+ if (a instanceof L.LatLng) {
+ return a;
+ }
+ if (L.Util.isArray(a)) {
+ if (typeof a[0] === 'number' || typeof a[0] === 'string') {
+ return new L.LatLng(a[0], a[1], a[2]);
+ } else {
+ return null;
+ }
+ }
+ if (a === undefined || a === null) {
+ return a;
+ }
+ if (typeof a === 'object' && 'lat' in a) {
+ return new L.LatLng(a.lat, 'lng' in a ? a.lng : a.lon);
+ }
+ if (b === undefined) {
+ return null;
+ }
+ return new L.LatLng(a, b);
+};
+
+
+
+/*
+ * L.LatLngBounds represents a rectangular area on the map in geographical coordinates.
+ */
+
+L.LatLngBounds = function (southWest, northEast) { // (LatLng, LatLng) or (LatLng[])
+ if (!southWest) { return; }
+
+ var latlngs = northEast ? [southWest, northEast] : southWest;
+
+ for (var i = 0, len = latlngs.length; i < len; i++) {
+ this.extend(latlngs[i]);
+ }
+};
+
+L.LatLngBounds.prototype = {
+ // extend the bounds to contain the given point or bounds
+ extend: function (obj) { // (LatLng) or (LatLngBounds)
+ if (!obj) { return this; }
+
+ var latLng = L.latLng(obj);
+ if (latLng !== null) {
+ obj = latLng;
+ } else {
+ obj = L.latLngBounds(obj);
+ }
+
+ if (obj instanceof L.LatLng) {
+ if (!this._southWest && !this._northEast) {
+ this._southWest = new L.LatLng(obj.lat, obj.lng);
+ this._northEast = new L.LatLng(obj.lat, obj.lng);
+ } else {
+ this._southWest.lat = Math.min(obj.lat, this._southWest.lat);
+ this._southWest.lng = Math.min(obj.lng, this._southWest.lng);
+
+ this._northEast.lat = Math.max(obj.lat, this._northEast.lat);
+ this._northEast.lng = Math.max(obj.lng, this._northEast.lng);
+ }
+ } else if (obj instanceof L.LatLngBounds) {
+ this.extend(obj._southWest);
+ this.extend(obj._northEast);
+ }
+ return this;
+ },
+
+ // extend the bounds by a percentage
+ pad: function (bufferRatio) { // (Number) -> LatLngBounds
+ 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 L.LatLngBounds(
+ new L.LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),
+ new L.LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));
+ },
+
+ getCenter: function () { // -> LatLng
+ return new L.LatLng(
+ (this._southWest.lat + this._northEast.lat) / 2,
+ (this._southWest.lng + this._northEast.lng) / 2);
+ },
+
+ getSouthWest: function () {
+ return this._southWest;
+ },
+
+ getNorthEast: function () {
+ return this._northEast;
+ },
+
+ getNorthWest: function () {
+ return new L.LatLng(this.getNorth(), this.getWest());
+ },
+
+ getSouthEast: function () {
+ return new L.LatLng(this.getSouth(), this.getEast());
+ },
+
+ getWest: function () {
+ return this._southWest.lng;
+ },
+
+ getSouth: function () {
+ return this._southWest.lat;
+ },
+
+ getEast: function () {
+ return this._northEast.lng;
+ },
+
+ getNorth: function () {
+ return this._northEast.lat;
+ },
+
+ contains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean
+ if (typeof obj[0] === 'number' || obj instanceof L.LatLng) {
+ obj = L.latLng(obj);
+ } else {
+ obj = L.latLngBounds(obj);
+ }
+
+ var sw = this._southWest,
+ ne = this._northEast,
+ sw2, ne2;
+
+ if (obj instanceof L.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);
+ },
+
+ intersects: function (bounds) { // (LatLngBounds)
+ bounds = L.latLngBounds(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;
+ },
+
+ toBBoxString: function () {
+ return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');
+ },
+
+ equals: function (bounds) { // (LatLngBounds)
+ if (!bounds) { return false; }
+
+ bounds = L.latLngBounds(bounds);
+
+ return this._southWest.equals(bounds.getSouthWest()) &&
+ this._northEast.equals(bounds.getNorthEast());
+ },
+
+ isValid: function () {
+ return !!(this._southWest && this._northEast);
+ }
+};
+
+//TODO International date line?
+
+L.latLngBounds = function (a, b) { // (LatLngBounds) or (LatLng, LatLng)
+ if (!a || a instanceof L.LatLngBounds) {
+ return a;
+ }
+ return new L.LatLngBounds(a, b);
+};
+
+
+/*
+ * L.Projection contains various geographical projections used by CRS classes.
+ */
+
+L.Projection = {};
+
+
+/*
+ * Spherical Mercator is the most popular map projection, used by EPSG:3857 CRS used by default.
+ */
+
+L.Projection.SphericalMercator = {
+ MAX_LATITUDE: 85.0511287798,
+
+ project: function (latlng) { // (LatLng) -> Point
+ var d = L.LatLng.DEG_TO_RAD,
+ max = this.MAX_LATITUDE,
+ lat = Math.max(Math.min(max, latlng.lat), -max),
+ x = latlng.lng * d,
+ y = lat * d;
+
+ y = Math.log(Math.tan((Math.PI / 4) + (y / 2)));
+
+ return new L.Point(x, y);
+ },
+
+ unproject: function (point) { // (Point, Boolean) -> LatLng
+ var d = L.LatLng.RAD_TO_DEG,
+ lng = point.x * d,
+ lat = (2 * Math.atan(Math.exp(point.y)) - (Math.PI / 2)) * d;
+
+ return new L.LatLng(lat, lng);
+ }
+};
+
+
+/*
+ * Simple equirectangular (Plate Carree) projection, used by CRS like EPSG:4326 and Simple.
+ */
+
+L.Projection.LonLat = {
+ project: function (latlng) {
+ return new L.Point(latlng.lng, latlng.lat);
+ },
+
+ unproject: function (point) {
+ return new L.LatLng(point.y, point.x);
+ }
+};
+
+
+/*
+ * L.CRS is a base object for all defined CRS (Coordinate Reference Systems) in Leaflet.
+ */
+
+L.CRS = {
+ latLngToPoint: function (latlng, zoom) { // (LatLng, Number) -> Point
+ var projectedPoint = this.projection.project(latlng),
+ scale = this.scale(zoom);
+
+ return this.transformation._transform(projectedPoint, scale);
+ },
+
+ pointToLatLng: function (point, zoom) { // (Point, Number[, Boolean]) -> LatLng
+ var scale = this.scale(zoom),
+ untransformedPoint = this.transformation.untransform(point, scale);
+
+ return this.projection.unproject(untransformedPoint);
+ },
+
+ project: function (latlng) {
+ return this.projection.project(latlng);
+ },
+
+ scale: function (zoom) {
+ return 256 * Math.pow(2, zoom);
+ },
+
+ getSize: function (zoom) {
+ var s = this.scale(zoom);
+ return L.point(s, s);
+ }
+};
+
+
+/*
+ * A simple CRS that can be used for flat non-Earth maps like panoramas or game maps.
+ */
+
+L.CRS.Simple = L.extend({}, L.CRS, {
+ projection: L.Projection.LonLat,
+ transformation: new L.Transformation(1, 0, -1, 0),
+
+ scale: function (zoom) {
+ return Math.pow(2, zoom);
+ }
+});
+
+
+/*
+ * L.CRS.EPSG3857 (Spherical Mercator) is the most common CRS for web mapping
+ * and is used by Leaflet by default.
+ */
+
+L.CRS.EPSG3857 = L.extend({}, L.CRS, {
+ code: 'EPSG:3857',
+
+ projection: L.Projection.SphericalMercator,
+ transformation: new L.Transformation(0.5 / Math.PI, 0.5, -0.5 / Math.PI, 0.5),
+
+ project: function (latlng) { // (LatLng) -> Point
+ var projectedPoint = this.projection.project(latlng),
+ earthRadius = 6378137;
+ return projectedPoint.multiplyBy(earthRadius);
+ }
+});
+
+L.CRS.EPSG900913 = L.extend({}, L.CRS.EPSG3857, {
+ code: 'EPSG:900913'
+});
+
+
+/*
+ * L.CRS.EPSG4326 is a CRS popular among advanced GIS specialists.
+ */
+
+L.CRS.EPSG4326 = L.extend({}, L.CRS, {
+ code: 'EPSG:4326',
+
+ projection: L.Projection.LonLat,
+ transformation: new L.Transformation(1 / 360, 0.5, -1 / 360, 0.5)
+});
+
+
+/*
+ * L.Map is the central class of the API - it is used to create a map.
+ */
+
+L.Map = L.Class.extend({
+
+ includes: L.Mixin.Events,
+
+ options: {
+ crs: L.CRS.EPSG3857,
+
+ /*
+ center: LatLng,
+ zoom: Number,
+ layers: Array,
+ */
+
+ fadeAnimation: L.DomUtil.TRANSITION && !L.Browser.android23,
+ trackResize: true,
+ markerZoomAnimation: L.DomUtil.TRANSITION && L.Browser.any3d
+ },
+
+ initialize: function (id, options) { // (HTMLElement or String, Object)
+ options = L.setOptions(this, options);
+
+
+ this._initContainer(id);
+ this._initLayout();
+
+ // hack for https://github.com/Leaflet/Leaflet/issues/1980
+ this._onResize = L.bind(this._onResize, this);
+
+ this._initEvents();
+
+ if (options.maxBounds) {
+ this.setMaxBounds(options.maxBounds);
+ }
+
+ if (options.center && options.zoom !== undefined) {
+ this.setView(L.latLng(options.center), options.zoom, {reset: true});
+ }
+
+ this._handlers = [];
+
+ this._layers = {};
+ this._zoomBoundLayers = {};
+ this._tileLayersNum = 0;
+
+ this.callInitHooks();
+
+ this._addLayers(options.layers);
+ },
+
+
+ // public methods that modify map state
+
+ // replaced by animation-powered implementation in Map.PanAnimation.js
+ setView: function (center, zoom) {
+ zoom = zoom === undefined ? this.getZoom() : zoom;
+ this._resetView(L.latLng(center), this._limitZoom(zoom));
+ return this;
+ },
+
+ setZoom: function (zoom, options) {
+ if (!this._loaded) {
+ this._zoom = this._limitZoom(zoom);
+ return this;
+ }
+ return this.setView(this.getCenter(), zoom, {zoom: options});
+ },
+
+ zoomIn: function (delta, options) {
+ return this.setZoom(this._zoom + (delta || 1), options);
+ },
+
+ zoomOut: function (delta, options) {
+ return this.setZoom(this._zoom - (delta || 1), options);
+ },
+
+ setZoomAround: function (latlng, zoom, options) {
+ var scale = this.getZoomScale(zoom),
+ viewHalf = this.getSize().divideBy(2),
+ containerPoint = latlng instanceof L.Point ? latlng : this.latLngToContainerPoint(latlng),
+
+ centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),
+ newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));
+
+ return this.setView(newCenter, zoom, {zoom: options});
+ },
+
+ fitBounds: function (bounds, options) {
+
+ options = options || {};
+ bounds = bounds.getBounds ? bounds.getBounds() : L.latLngBounds(bounds);
+
+ var paddingTL = L.point(options.paddingTopLeft || options.padding || [0, 0]),
+ paddingBR = L.point(options.paddingBottomRight || options.padding || [0, 0]),
+
+ zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));
+
+ zoom = (options.maxZoom) ? Math.min(options.maxZoom, zoom) : zoom;
+
+ var paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),
+
+ swPoint = this.project(bounds.getSouthWest(), zoom),
+ nePoint = this.project(bounds.getNorthEast(), zoom),
+ center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);
+
+ return this.setView(center, zoom, options);
+ },
+
+ fitWorld: function (options) {
+ return this.fitBounds([[-90, -180], [90, 180]], options);
+ },
+
+ panTo: function (center, options) { // (LatLng)
+ return this.setView(center, this._zoom, {pan: options});
+ },
+
+ panBy: function (offset) { // (Point)
+ // replaced with animated panBy in Map.PanAnimation.js
+ this.fire('movestart');
+
+ this._rawPanBy(L.point(offset));
+
+ this.fire('move');
+ return this.fire('moveend');
+ },
+
+ setMaxBounds: function (bounds) {
+ bounds = L.latLngBounds(bounds);
+
+ this.options.maxBounds = bounds;
+
+ if (!bounds) {
+ return this.off('moveend', this._panInsideMaxBounds, this);
+ }
+
+ if (this._loaded) {
+ this._panInsideMaxBounds();
+ }
+
+ return this.on('moveend', this._panInsideMaxBounds, this);
+ },
+
+ panInsideBounds: function (bounds, options) {
+ var center = this.getCenter(),
+ newCenter = this._limitCenter(center, this._zoom, bounds);
+
+ if (center.equals(newCenter)) { return this; }
+
+ return this.panTo(newCenter, options);
+ },
+
+ addLayer: function (layer) {
+ // TODO method is too big, refactor
+
+ var id = L.stamp(layer);
+
+ if (this._layers[id]) { return this; }
+
+ this._layers[id] = layer;
+
+ // TODO getMaxZoom, getMinZoom in ILayer (instead of options)
+ if (layer.options && (!isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom))) {
+ this._zoomBoundLayers[id] = layer;
+ this._updateZoomLevels();
+ }
+
+ // TODO looks ugly, refactor!!!
+ if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
+ this._tileLayersNum++;
+ this._tileLayersToLoad++;
+ layer.on('load', this._onTileLayerLoad, this);
+ }
+
+ if (this._loaded) {
+ this._layerAdd(layer);
+ }
+
+ return this;
+ },
+
+ removeLayer: function (layer) {
+ var id = L.stamp(layer);
+
+ if (!this._layers[id]) { return this; }
+
+ if (this._loaded) {
+ layer.onRemove(this);
+ }
+
+ delete this._layers[id];
+
+ if (this._loaded) {
+ this.fire('layerremove', {layer: layer});
+ }
+
+ if (this._zoomBoundLayers[id]) {
+ delete this._zoomBoundLayers[id];
+ this._updateZoomLevels();
+ }
+
+ // TODO looks ugly, refactor
+ if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
+ this._tileLayersNum--;
+ this._tileLayersToLoad--;
+ layer.off('load', this._onTileLayerLoad, this);
+ }
+
+ return this;
+ },
+
+ hasLayer: function (layer) {
+ if (!layer) { return false; }
+
+ return (L.stamp(layer) in this._layers);
+ },
+
+ eachLayer: function (method, context) {
+ for (var i in this._layers) {
+ method.call(context, this._layers[i]);
+ }
+ return this;
+ },
+
+ invalidateSize: function (options) {
+ if (!this._loaded) { return this; }
+
+ options = L.extend({
+ animate: false,
+ pan: true
+ }, options === true ? {animate: true} : options);
+
+ var oldSize = this.getSize();
+ this._sizeChanged = true;
+ this._initialCenter = null;
+
+ var newSize = this.getSize(),
+ oldCenter = oldSize.divideBy(2).round(),
+ newCenter = newSize.divideBy(2).round(),
+ offset = oldCenter.subtract(newCenter);
+
+ if (!offset.x && !offset.y) { return this; }
+
+ if (options.animate && options.pan) {
+ this.panBy(offset);
+
+ } else {
+ if (options.pan) {
+ this._rawPanBy(offset);
+ }
+
+ this.fire('move');
+
+ if (options.debounceMoveend) {
+ clearTimeout(this._sizeTimer);
+ this._sizeTimer = setTimeout(L.bind(this.fire, this, 'moveend'), 200);
+ } else {
+ this.fire('moveend');
+ }
+ }
+
+ return this.fire('resize', {
+ oldSize: oldSize,
+ newSize: newSize
+ });
+ },
+
+ // TODO handler.addTo
+ addHandler: function (name, HandlerClass) {
+ if (!HandlerClass) { return this; }
+
+ var handler = this[name] = new HandlerClass(this);
+
+ this._handlers.push(handler);
+
+ if (this.options[name]) {
+ handler.enable();
+ }
+
+ return this;
+ },
+
+ remove: function () {
+ if (this._loaded) {
+ this.fire('unload');
+ }
+
+ this._initEvents('off');
+
+ try {
+ // throws error in IE6-8
+ delete this._container._leaflet;
+ } catch (e) {
+ this._container._leaflet = undefined;
+ }
+
+ this._clearPanes();
+ if (this._clearControlPos) {
+ this._clearControlPos();
+ }
+
+ this._clearHandlers();
+
+ return this;
+ },
+
+
+ // public methods for getting map state
+
+ getCenter: function () { // (Boolean) -> LatLng
+ this._checkIfLoaded();
+
+ if (this._initialCenter && !this._moved()) {
+ return this._initialCenter;
+ }
+ return this.layerPointToLatLng(this._getCenterLayerPoint());
+ },
+
+ getZoom: function () {
+ return this._zoom;
+ },
+
+ getBounds: function () {
+ var bounds = this.getPixelBounds(),
+ sw = this.unproject(bounds.getBottomLeft()),
+ ne = this.unproject(bounds.getTopRight());
+
+ return new L.LatLngBounds(sw, ne);
+ },
+
+ getMinZoom: function () {
+ return this.options.minZoom === undefined ?
+ (this._layersMinZoom === undefined ? 0 : this._layersMinZoom) :
+ this.options.minZoom;
+ },
+
+ getMaxZoom: function () {
+ return this.options.maxZoom === undefined ?
+ (this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) :
+ this.options.maxZoom;
+ },
+
+ getBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number
+ bounds = L.latLngBounds(bounds);
+
+ var zoom = this.getMinZoom() - (inside ? 1 : 0),
+ maxZoom = this.getMaxZoom(),
+ size = this.getSize(),
+
+ nw = bounds.getNorthWest(),
+ se = bounds.getSouthEast(),
+
+ zoomNotFound = true,
+ boundsSize;
+
+ padding = L.point(padding || [0, 0]);
+
+ do {
+ zoom++;
+ boundsSize = this.project(se, zoom).subtract(this.project(nw, zoom)).add(padding);
+ zoomNotFound = !inside ? size.contains(boundsSize) : boundsSize.x < size.x || boundsSize.y < size.y;
+
+ } while (zoomNotFound && zoom <= maxZoom);
+
+ if (zoomNotFound && inside) {
+ return null;
+ }
+
+ return inside ? zoom : zoom - 1;
+ },
+
+ getSize: function () {
+ if (!this._size || this._sizeChanged) {
+ this._size = new L.Point(
+ this._container.clientWidth,
+ this._container.clientHeight);
+
+ this._sizeChanged = false;
+ }
+ return this._size.clone();
+ },
+
+ getPixelBounds: function () {
+ var topLeftPoint = this._getTopLeftPoint();
+ return new L.Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));
+ },
+
+ getPixelOrigin: function () {
+ this._checkIfLoaded();
+ return this._initialTopLeftPoint;
+ },
+
+ getPanes: function () {
+ return this._panes;
+ },
+
+ getContainer: function () {
+ return this._container;
+ },
+
+
+ // TODO replace with universal implementation after refactoring projections
+
+ getZoomScale: function (toZoom) {
+ var crs = this.options.crs;
+ return crs.scale(toZoom) / crs.scale(this._zoom);
+ },
+
+ getScaleZoom: function (scale) {
+ return this._zoom + (Math.log(scale) / Math.LN2);
+ },
+
+
+ // conversion methods
+
+ project: function (latlng, zoom) { // (LatLng[, Number]) -> Point
+ zoom = zoom === undefined ? this._zoom : zoom;
+ return this.options.crs.latLngToPoint(L.latLng(latlng), zoom);
+ },
+
+ unproject: function (point, zoom) { // (Point[, Number]) -> LatLng
+ zoom = zoom === undefined ? this._zoom : zoom;
+ return this.options.crs.pointToLatLng(L.point(point), zoom);
+ },
+
+ layerPointToLatLng: function (point) { // (Point)
+ var projectedPoint = L.point(point).add(this.getPixelOrigin());
+ return this.unproject(projectedPoint);
+ },
+
+ latLngToLayerPoint: function (latlng) { // (LatLng)
+ var projectedPoint = this.project(L.latLng(latlng))._round();
+ return projectedPoint._subtract(this.getPixelOrigin());
+ },
+
+ containerPointToLayerPoint: function (point) { // (Point)
+ return L.point(point).subtract(this._getMapPanePos());
+ },
+
+ layerPointToContainerPoint: function (point) { // (Point)
+ return L.point(point).add(this._getMapPanePos());
+ },
+
+ containerPointToLatLng: function (point) {
+ var layerPoint = this.containerPointToLayerPoint(L.point(point));
+ return this.layerPointToLatLng(layerPoint);
+ },
+
+ latLngToContainerPoint: function (latlng) {
+ return this.layerPointToContainerPoint(this.latLngToLayerPoint(L.latLng(latlng)));
+ },
+
+ mouseEventToContainerPoint: function (e) { // (MouseEvent)
+ return L.DomEvent.getMousePosition(e, this._container);
+ },
+
+ mouseEventToLayerPoint: function (e) { // (MouseEvent)
+ return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));
+ },
+
+ mouseEventToLatLng: function (e) { // (MouseEvent)
+ return this.layerPointToLatLng(this.mouseEventToLayerPoint(e));
+ },
+
+
+ // map initialization methods
+
+ _initContainer: function (id) {
+ var container = this._container = L.DomUtil.get(id);
+
+ if (!container) {
+ throw new Error('Map container not found.');
+ } else if (container._leaflet) {
+ throw new Error('Map container is already initialized.');
+ }
+
+ container._leaflet = true;
+ },
+
+ _initLayout: function () {
+ var container = this._container;
+
+ L.DomUtil.addClass(container, 'leaflet-container' +
+ (L.Browser.touch ? ' leaflet-touch' : '') +
+ (L.Browser.retina ? ' leaflet-retina' : '') +
+ (L.Browser.ielt9 ? ' leaflet-oldie' : '') +
+ (this.options.fadeAnimation ? ' leaflet-fade-anim' : ''));
+
+ var position = L.DomUtil.getStyle(container, 'position');
+
+ if (position !== 'absolute' && position !== 'relative' && position !== 'fixed') {
+ container.style.position = 'relative';
+ }
+
+ this._initPanes();
+
+ if (this._initControlPos) {
+ this._initControlPos();
+ }
+ },
+
+ _initPanes: function () {
+ var panes = this._panes = {};
+
+ this._mapPane = panes.mapPane = this._createPane('leaflet-map-pane', this._container);
+
+ this._tilePane = panes.tilePane = this._createPane('leaflet-tile-pane', this._mapPane);
+ panes.objectsPane = this._createPane('leaflet-objects-pane', this._mapPane);
+ panes.shadowPane = this._createPane('leaflet-shadow-pane');
+ panes.overlayPane = this._createPane('leaflet-overlay-pane');
+ panes.markerPane = this._createPane('leaflet-marker-pane');
+ panes.popupPane = this._createPane('leaflet-popup-pane');
+
+ var zoomHide = ' leaflet-zoom-hide';
+
+ if (!this.options.markerZoomAnimation) {
+ L.DomUtil.addClass(panes.markerPane, zoomHide);
+ L.DomUtil.addClass(panes.shadowPane, zoomHide);
+ L.DomUtil.addClass(panes.popupPane, zoomHide);
+ }
+ },
+
+ _createPane: function (className, container) {
+ return L.DomUtil.create('div', className, container || this._panes.objectsPane);
+ },
+
+ _clearPanes: function () {
+ this._container.removeChild(this._mapPane);
+ },
+
+ _addLayers: function (layers) {
+ layers = layers ? (L.Util.isArray(layers) ? layers : [layers]) : [];
+
+ for (var i = 0, len = layers.length; i < len; i++) {
+ this.addLayer(layers[i]);
+ }
+ },
+
+
+ // private methods that modify map state
+
+ _resetView: function (center, zoom, preserveMapOffset, afterZoomAnim) {
+
+ var zoomChanged = (this._zoom !== zoom);
+
+ if (!afterZoomAnim) {
+ this.fire('movestart');
+
+ if (zoomChanged) {
+ this.fire('zoomstart');
+ }
+ }
+
+ this._zoom = zoom;
+ this._initialCenter = center;
+
+ this._initialTopLeftPoint = this._getNewTopLeftPoint(center);
+
+ if (!preserveMapOffset) {
+ L.DomUtil.setPosition(this._mapPane, new L.Point(0, 0));
+ } else {
+ this._initialTopLeftPoint._add(this._getMapPanePos());
+ }
+
+ this._tileLayersToLoad = this._tileLayersNum;
+
+ var loading = !this._loaded;
+ this._loaded = true;
+
+ this.fire('viewreset', {hard: !preserveMapOffset});
+
+ if (loading) {
+ this.fire('load');
+ this.eachLayer(this._layerAdd, this);
+ }
+
+ this.fire('move');
+
+ if (zoomChanged || afterZoomAnim) {
+ this.fire('zoomend');
+ }
+
+ this.fire('moveend', {hard: !preserveMapOffset});
+ },
+
+ _rawPanBy: function (offset) {
+ L.DomUtil.setPosition(this._mapPane, this._getMapPanePos().subtract(offset));
+ },
+
+ _getZoomSpan: function () {
+ return this.getMaxZoom() - this.getMinZoom();
+ },
+
+ _updateZoomLevels: function () {
+ var i,
+ minZoom = Infinity,
+ maxZoom = -Infinity,
+ oldZoomSpan = this._getZoomSpan();
+
+ for (i in this._zoomBoundLayers) {
+ var layer = this._zoomBoundLayers[i];
+ if (!isNaN(layer.options.minZoom)) {
+ minZoom = Math.min(minZoom, layer.options.minZoom);
+ }
+ if (!isNaN(layer.options.maxZoom)) {
+ maxZoom = Math.max(maxZoom, layer.options.maxZoom);
+ }
+ }
+
+ if (i === undefined) { // we have no tilelayers
+ this._layersMaxZoom = this._layersMinZoom = undefined;
+ } else {
+ this._layersMaxZoom = maxZoom;
+ this._layersMinZoom = minZoom;
+ }
+
+ if (oldZoomSpan !== this._getZoomSpan()) {
+ this.fire('zoomlevelschange');
+ }
+ },
+
+ _panInsideMaxBounds: function () {
+ this.panInsideBounds(this.options.maxBounds);
+ },
+
+ _checkIfLoaded: function () {
+ if (!this._loaded) {
+ throw new Error('Set map center and zoom first.');
+ }
+ },
+
+ // map events
+
+ _initEvents: function (onOff) {
+ if (!L.DomEvent) { return; }
+
+ onOff = onOff || 'on';
+
+ L.DomEvent[onOff](this._container, 'click', this._onMouseClick, this);
+
+ var events = ['dblclick', 'mousedown', 'mouseup', 'mouseenter',
+ 'mouseleave', 'mousemove', 'contextmenu'],
+ i, len;
+
+ for (i = 0, len = events.length; i < len; i++) {
+ L.DomEvent[onOff](this._container, events[i], this._fireMouseEvent, this);
+ }
+
+ if (this.options.trackResize) {
+ L.DomEvent[onOff](window, 'resize', this._onResize, this);
+ }
+ },
+
+ _onResize: function () {
+ L.Util.cancelAnimFrame(this._resizeRequest);
+ this._resizeRequest = L.Util.requestAnimFrame(
+ function () { this.invalidateSize({debounceMoveend: true}); }, this, false, this._container);
+ },
+
+ _onMouseClick: function (e) {
+ if (!this._loaded || (!e._simulated &&
+ ((this.dragging && this.dragging.moved()) ||
+ (this.boxZoom && this.boxZoom.moved()))) ||
+ L.DomEvent._skipped(e)) { return; }
+
+ this.fire('preclick');
+ this._fireMouseEvent(e);
+ },
+
+ _fireMouseEvent: function (e) {
+ if (!this._loaded || L.DomEvent._skipped(e)) { return; }
+
+ var type = e.type;
+
+ type = (type === 'mouseenter' ? 'mouseover' : (type === 'mouseleave' ? 'mouseout' : type));
+
+ if (!this.hasEventListeners(type)) { return; }
+
+ if (type === 'contextmenu') {
+ L.DomEvent.preventDefault(e);
+ }
+
+ var containerPoint = this.mouseEventToContainerPoint(e),
+ layerPoint = this.containerPointToLayerPoint(containerPoint),
+ latlng = this.layerPointToLatLng(layerPoint);
+
+ this.fire(type, {
+ latlng: latlng,
+ layerPoint: layerPoint,
+ containerPoint: containerPoint,
+ originalEvent: e
+ });
+ },
+
+ _onTileLayerLoad: function () {
+ this._tileLayersToLoad--;
+ if (this._tileLayersNum && !this._tileLayersToLoad) {
+ this.fire('tilelayersload');
+ }
+ },
+
+ _clearHandlers: function () {
+ for (var i = 0, len = this._handlers.length; i < len; i++) {
+ this._handlers[i].disable();
+ }
+ },
+
+ whenReady: function (callback, context) {
+ if (this._loaded) {
+ callback.call(context || this, this);
+ } else {
+ this.on('load', callback, context);
+ }
+ return this;
+ },
+
+ _layerAdd: function (layer) {
+ layer.onAdd(this);
+ this.fire('layeradd', {layer: layer});
+ },
+
+
+ // private methods for getting map state
+
+ _getMapPanePos: function () {
+ return L.DomUtil.getPosition(this._mapPane);
+ },
+
+ _moved: function () {
+ var pos = this._getMapPanePos();
+ return pos && !pos.equals([0, 0]);
+ },
+
+ _getTopLeftPoint: function () {
+ return this.getPixelOrigin().subtract(this._getMapPanePos());
+ },
+
+ _getNewTopLeftPoint: function (center, zoom) {
+ var viewHalf = this.getSize()._divideBy(2);
+ // TODO round on display, not calculation to increase precision?
+ return this.project(center, zoom)._subtract(viewHalf)._round();
+ },
+
+ _latLngToNewLayerPoint: function (latlng, newZoom, newCenter) {
+ var topLeft = this._getNewTopLeftPoint(newCenter, newZoom).add(this._getMapPanePos());
+ return this.project(latlng, newZoom)._subtract(topLeft);
+ },
+
+ // layer point of the current center
+ _getCenterLayerPoint: function () {
+ return this.containerPointToLayerPoint(this.getSize()._divideBy(2));
+ },
+
+ // offset of the specified place to the current center in pixels
+ _getCenterOffset: function (latlng) {
+ return this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());
+ },
+
+ // adjust center for view to get inside bounds
+ _limitCenter: function (center, zoom, bounds) {
+
+ if (!bounds) { return center; }
+
+ var centerPoint = this.project(center, zoom),
+ viewHalf = this.getSize().divideBy(2),
+ viewBounds = new L.Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),
+ offset = this._getBoundsOffset(viewBounds, bounds, zoom);
+
+ return this.unproject(centerPoint.add(offset), zoom);
+ },
+
+ // adjust offset for view to get inside bounds
+ _limitOffset: function (offset, bounds) {
+ if (!bounds) { return offset; }
+
+ var viewBounds = this.getPixelBounds(),
+ newBounds = new L.Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));
+
+ return offset.add(this._getBoundsOffset(newBounds, bounds));
+ },
+
+ // returns offset needed for pxBounds to get inside maxBounds at a specified zoom
+ _getBoundsOffset: function (pxBounds, maxBounds, zoom) {
+ var nwOffset = this.project(maxBounds.getNorthWest(), zoom).subtract(pxBounds.min),
+ seOffset = this.project(maxBounds.getSouthEast(), zoom).subtract(pxBounds.max),
+
+ dx = this._rebound(nwOffset.x, -seOffset.x),
+ dy = this._rebound(nwOffset.y, -seOffset.y);
+
+ return new L.Point(dx, dy);
+ },
+
+ _rebound: function (left, right) {
+ return left + right > 0 ?
+ Math.round(left - right) / 2 :
+ Math.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));
+ },
+
+ _limitZoom: function (zoom) {
+ var min = this.getMinZoom(),
+ max = this.getMaxZoom();
+
+ return Math.max(min, Math.min(max, zoom));
+ }
+});
+
+L.map = function (id, options) {
+ return new L.Map(id, options);
+};
+
+
+/*
+ * Mercator projection that takes into account that the Earth is not a perfect sphere.
+ * Less popular than spherical mercator; used by projections like EPSG:3395.
+ */
+
+L.Projection.Mercator = {
+ MAX_LATITUDE: 85.0840591556,
+
+ R_MINOR: 6356752.314245179,
+ R_MAJOR: 6378137,
+
+ project: function (latlng) { // (LatLng) -> Point
+ var d = L.LatLng.DEG_TO_RAD,
+ max = this.MAX_LATITUDE,
+ lat = Math.max(Math.min(max, latlng.lat), -max),
+ r = this.R_MAJOR,
+ r2 = this.R_MINOR,
+ x = latlng.lng * d * r,
+ y = lat * d,
+ tmp = r2 / r,
+ eccent = Math.sqrt(1.0 - tmp * tmp),
+ con = eccent * Math.sin(y);
+
+ con = Math.pow((1 - con) / (1 + con), eccent * 0.5);
+
+ var ts = Math.tan(0.5 * ((Math.PI * 0.5) - y)) / con;
+ y = -r * Math.log(ts);
+
+ return new L.Point(x, y);
+ },
+
+ unproject: function (point) { // (Point, Boolean) -> LatLng
+ var d = L.LatLng.RAD_TO_DEG,
+ r = this.R_MAJOR,
+ r2 = this.R_MINOR,
+ lng = point.x * d / r,
+ tmp = r2 / r,
+ eccent = Math.sqrt(1 - (tmp * tmp)),
+ ts = Math.exp(- point.y / r),
+ phi = (Math.PI / 2) - 2 * Math.atan(ts),
+ numIter = 15,
+ tol = 1e-7,
+ i = numIter,
+ dphi = 0.1,
+ con;
+
+ while ((Math.abs(dphi) > tol) && (--i > 0)) {
+ con = eccent * Math.sin(phi);
+ dphi = (Math.PI / 2) - 2 * Math.atan(ts *
+ Math.pow((1.0 - con) / (1.0 + con), 0.5 * eccent)) - phi;
+ phi += dphi;
+ }
+
+ return new L.LatLng(phi * d, lng);
+ }
+};
+
+
+
+L.CRS.EPSG3395 = L.extend({}, L.CRS, {
+ code: 'EPSG:3395',
+
+ projection: L.Projection.Mercator,
+
+ transformation: (function () {
+ var m = L.Projection.Mercator,
+ r = m.R_MAJOR,
+ scale = 0.5 / (Math.PI * r);
+
+ return new L.Transformation(scale, 0.5, -scale, 0.5);
+ }())
+});
+
+
+/*
+ * L.TileLayer is used for standard xyz-numbered tile layers.
+ */
+
+L.TileLayer = L.Class.extend({
+ includes: L.Mixin.Events,
+
+ options: {
+ minZoom: 0,
+ maxZoom: 18,
+ tileSize: 256,
+ subdomains: 'abc',
+ errorTileUrl: '',
+ attribution: '',
+ zoomOffset: 0,
+ opacity: 1,
+ /*
+ maxNativeZoom: null,
+ zIndex: null,
+ tms: false,
+ continuousWorld: false,
+ noWrap: false,
+ zoomReverse: false,
+ detectRetina: false,
+ reuseTiles: false,
+ bounds: false,
+ */
+ unloadInvisibleTiles: L.Browser.mobile,
+ updateWhenIdle: L.Browser.mobile
+ },
+
+ initialize: function (url, options) {
+ options = L.setOptions(this, options);
+
+ // detecting retina displays, adjusting tileSize and zoom levels
+ if (options.detectRetina && L.Browser.retina && options.maxZoom > 0) {
+
+ options.tileSize = Math.floor(options.tileSize / 2);
+ options.zoomOffset++;
+
+ if (options.minZoom > 0) {
+ options.minZoom--;
+ }
+ this.options.maxZoom--;
+ }
+
+ if (options.bounds) {
+ options.bounds = L.latLngBounds(options.bounds);
+ }
+
+ this._url = url;
+
+ var subdomains = this.options.subdomains;
+
+ if (typeof subdomains === 'string') {
+ this.options.subdomains = subdomains.split('');
+ }
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+ this._animated = map._zoomAnimated;
+
+ // create a container div for tiles
+ this._initContainer();
+
+ // set up events
+ map.on({
+ 'viewreset': this._reset,
+ 'moveend': this._update
+ }, this);
+
+ if (this._animated) {
+ map.on({
+ 'zoomanim': this._animateZoom,
+ 'zoomend': this._endZoomAnim
+ }, this);
+ }
+
+ if (!this.options.updateWhenIdle) {
+ this._limitedUpdate = L.Util.limitExecByInterval(this._update, 150, this);
+ map.on('move', this._limitedUpdate, this);
+ }
+
+ this._reset();
+ this._update();
+ },
+
+ addTo: function (map) {
+ map.addLayer(this);
+ return this;
+ },
+
+ onRemove: function (map) {
+ this._container.parentNode.removeChild(this._container);
+
+ map.off({
+ 'viewreset': this._reset,
+ 'moveend': this._update
+ }, this);
+
+ if (this._animated) {
+ map.off({
+ 'zoomanim': this._animateZoom,
+ 'zoomend': this._endZoomAnim
+ }, this);
+ }
+
+ if (!this.options.updateWhenIdle) {
+ map.off('move', this._limitedUpdate, this);
+ }
+
+ this._container = null;
+ this._map = null;
+ },
+
+ bringToFront: function () {
+ var pane = this._map._panes.tilePane;
+
+ if (this._container) {
+ pane.appendChild(this._container);
+ this._setAutoZIndex(pane, Math.max);
+ }
+
+ return this;
+ },
+
+ bringToBack: function () {
+ var pane = this._map._panes.tilePane;
+
+ if (this._container) {
+ pane.insertBefore(this._container, pane.firstChild);
+ this._setAutoZIndex(pane, Math.min);
+ }
+
+ return this;
+ },
+
+ getAttribution: function () {
+ return this.options.attribution;
+ },
+
+ getContainer: function () {
+ return this._container;
+ },
+
+ setOpacity: function (opacity) {
+ this.options.opacity = opacity;
+
+ if (this._map) {
+ this._updateOpacity();
+ }
+
+ return this;
+ },
+
+ setZIndex: function (zIndex) {
+ this.options.zIndex = zIndex;
+ this._updateZIndex();
+
+ return this;
+ },
+
+ setUrl: function (url, noRedraw) {
+ this._url = url;
+
+ if (!noRedraw) {
+ this.redraw();
+ }
+
+ return this;
+ },
+
+ redraw: function () {
+ if (this._map) {
+ this._reset({hard: true});
+ this._update();
+ }
+ return this;
+ },
+
+ _updateZIndex: function () {
+ if (this._container && this.options.zIndex !== undefined) {
+ this._container.style.zIndex = this.options.zIndex;
+ }
+ },
+
+ _setAutoZIndex: function (pane, compare) {
+
+ var layers = pane.children,
+ edgeZIndex = -compare(Infinity, -Infinity), // -Infinity for max, Infinity for min
+ zIndex, i, len;
+
+ for (i = 0, len = layers.length; i < len; i++) {
+
+ if (layers[i] !== this._container) {
+ zIndex = parseInt(layers[i].style.zIndex, 10);
+
+ if (!isNaN(zIndex)) {
+ edgeZIndex = compare(edgeZIndex, zIndex);
+ }
+ }
+ }
+
+ this.options.zIndex = this._container.style.zIndex =
+ (isFinite(edgeZIndex) ? edgeZIndex : 0) + compare(1, -1);
+ },
+
+ _updateOpacity: function () {
+ var i,
+ tiles = this._tiles;
+
+ if (L.Browser.ielt9) {
+ for (i in tiles) {
+ L.DomUtil.setOpacity(tiles[i], this.options.opacity);
+ }
+ } else {
+ L.DomUtil.setOpacity(this._container, this.options.opacity);
+ }
+ },
+
+ _initContainer: function () {
+ var tilePane = this._map._panes.tilePane;
+
+ if (!this._container) {
+ this._container = L.DomUtil.create('div', 'leaflet-layer');
+
+ this._updateZIndex();
+
+ if (this._animated) {
+ var className = 'leaflet-tile-container';
+
+ this._bgBuffer = L.DomUtil.create('div', className, this._container);
+ this._tileContainer = L.DomUtil.create('div', className, this._container);
+
+ } else {
+ this._tileContainer = this._container;
+ }
+
+ tilePane.appendChild(this._container);
+
+ if (this.options.opacity < 1) {
+ this._updateOpacity();
+ }
+ }
+ },
+
+ _reset: function (e) {
+ for (var key in this._tiles) {
+ this.fire('tileunload', {tile: this._tiles[key]});
+ }
+
+ this._tiles = {};
+ this._tilesToLoad = 0;
+
+ if (this.options.reuseTiles) {
+ this._unusedTiles = [];
+ }
+
+ this._tileContainer.innerHTML = '';
+
+ if (this._animated && e && e.hard) {
+ this._clearBgBuffer();
+ }
+
+ this._initContainer();
+ },
+
+ _getTileSize: function () {
+ var map = this._map,
+ zoom = map.getZoom() + this.options.zoomOffset,
+ zoomN = this.options.maxNativeZoom,
+ tileSize = this.options.tileSize;
+
+ if (zoomN && zoom > zoomN) {
+ tileSize = Math.round(map.getZoomScale(zoom) / map.getZoomScale(zoomN) * tileSize);
+ }
+
+ return tileSize;
+ },
+
+ _update: function () {
+
+ if (!this._map) { return; }
+
+ var map = this._map,
+ bounds = map.getPixelBounds(),
+ zoom = map.getZoom(),
+ tileSize = this._getTileSize();
+
+ if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {
+ return;
+ }
+
+ var tileBounds = L.bounds(
+ bounds.min.divideBy(tileSize)._floor(),
+ bounds.max.divideBy(tileSize)._floor());
+
+ this._addTilesFromCenterOut(tileBounds);
+
+ if (this.options.unloadInvisibleTiles || this.options.reuseTiles) {
+ this._removeOtherTiles(tileBounds);
+ }
+ },
+
+ _addTilesFromCenterOut: function (bounds) {
+ var queue = [],
+ center = bounds.getCenter();
+
+ var j, i, point;
+
+ for (j = bounds.min.y; j <= bounds.max.y; j++) {
+ for (i = bounds.min.x; i <= bounds.max.x; i++) {
+ point = new L.Point(i, j);
+
+ if (this._tileShouldBeLoaded(point)) {
+ queue.push(point);
+ }
+ }
+ }
+
+ var tilesToLoad = queue.length;
+
+ if (tilesToLoad === 0) { return; }
+
+ // load tiles in order of their distance to center
+ queue.sort(function (a, b) {
+ return a.distanceTo(center) - b.distanceTo(center);
+ });
+
+ var fragment = document.createDocumentFragment();
+
+ // if its the first batch of tiles to load
+ if (!this._tilesToLoad) {
+ this.fire('loading');
+ }
+
+ this._tilesToLoad += tilesToLoad;
+
+ for (i = 0; i < tilesToLoad; i++) {
+ this._addTile(queue[i], fragment);
+ }
+
+ this._tileContainer.appendChild(fragment);
+ },
+
+ _tileShouldBeLoaded: function (tilePoint) {
+ if ((tilePoint.x + ':' + tilePoint.y) in this._tiles) {
+ return false; // already loaded
+ }
+
+ var options = this.options;
+
+ if (!options.continuousWorld) {
+ var limit = this._getWrapTileNum();
+
+ // don't load if exceeds world bounds
+ if ((options.noWrap && (tilePoint.x < 0 || tilePoint.x >= limit.x)) ||
+ tilePoint.y < 0 || tilePoint.y >= limit.y) { return false; }
+ }
+
+ if (options.bounds) {
+ var tileSize = this._getTileSize(),
+ nwPoint = tilePoint.multiplyBy(tileSize),
+ sePoint = nwPoint.add([tileSize, tileSize]),
+ nw = this._map.unproject(nwPoint),
+ se = this._map.unproject(sePoint);
+
+ // TODO temporary hack, will be removed after refactoring projections
+ // https://github.com/Leaflet/Leaflet/issues/1618
+ if (!options.continuousWorld && !options.noWrap) {
+ nw = nw.wrap();
+ se = se.wrap();
+ }
+
+ if (!options.bounds.intersects([nw, se])) { return false; }
+ }
+
+ return true;
+ },
+
+ _removeOtherTiles: function (bounds) {
+ var kArr, x, y, key;
+
+ for (key in this._tiles) {
+ kArr = key.split(':');
+ x = parseInt(kArr[0], 10);
+ y = parseInt(kArr[1], 10);
+
+ // remove tile if it's out of bounds
+ if (x < bounds.min.x || x > bounds.max.x || y < bounds.min.y || y > bounds.max.y) {
+ this._removeTile(key);
+ }
+ }
+ },
+
+ _removeTile: function (key) {
+ var tile = this._tiles[key];
+
+ this.fire('tileunload', {tile: tile, url: tile.src});
+
+ if (this.options.reuseTiles) {
+ L.DomUtil.removeClass(tile, 'leaflet-tile-loaded');
+ this._unusedTiles.push(tile);
+
+ } else if (tile.parentNode === this._tileContainer) {
+ this._tileContainer.removeChild(tile);
+ }
+
+ // for https://github.com/CloudMade/Leaflet/issues/137
+ if (!L.Browser.android) {
+ tile.onload = null;
+ tile.src = L.Util.emptyImageUrl;
+ }
+
+ delete this._tiles[key];
+ },
+
+ _addTile: function (tilePoint, container) {
+ var tilePos = this._getTilePos(tilePoint);
+
+ // get unused tile - or create a new tile
+ var tile = this._getTile();
+
+ /*
+ Chrome 20 layouts much faster with top/left (verify with timeline, frames)
+ Android 4 browser has display issues with top/left and requires transform instead
+ (other browsers don't currently care) - see debug/hacks/jitter.html for an example
+ */
+ L.DomUtil.setPosition(tile, tilePos, L.Browser.chrome);
+
+ this._tiles[tilePoint.x + ':' + tilePoint.y] = tile;
+
+ this._loadTile(tile, tilePoint);
+
+ if (tile.parentNode !== this._tileContainer) {
+ container.appendChild(tile);
+ }
+ },
+
+ _getZoomForUrl: function () {
+
+ var options = this.options,
+ zoom = this._map.getZoom();
+
+ if (options.zoomReverse) {
+ zoom = options.maxZoom - zoom;
+ }
+
+ zoom += options.zoomOffset;
+
+ return options.maxNativeZoom ? Math.min(zoom, options.maxNativeZoom) : zoom;
+ },
+
+ _getTilePos: function (tilePoint) {
+ var origin = this._map.getPixelOrigin(),
+ tileSize = this._getTileSize();
+
+ return tilePoint.multiplyBy(tileSize).subtract(origin);
+ },
+
+ // image-specific code (override to implement e.g. Canvas or SVG tile layer)
+
+ getTileUrl: function (tilePoint) {
+ return L.Util.template(this._url, L.extend({
+ s: this._getSubdomain(tilePoint),
+ z: tilePoint.z,
+ x: tilePoint.x,
+ y: tilePoint.y
+ }, this.options));
+ },
+
+ _getWrapTileNum: function () {
+ var crs = this._map.options.crs,
+ size = crs.getSize(this._map.getZoom());
+ return size.divideBy(this._getTileSize())._floor();
+ },
+
+ _adjustTilePoint: function (tilePoint) {
+
+ var limit = this._getWrapTileNum();
+
+ // wrap tile coordinates
+ if (!this.options.continuousWorld && !this.options.noWrap) {
+ tilePoint.x = ((tilePoint.x % limit.x) + limit.x) % limit.x;
+ }
+
+ if (this.options.tms) {
+ tilePoint.y = limit.y - tilePoint.y - 1;
+ }
+
+ tilePoint.z = this._getZoomForUrl();
+ },
+
+ _getSubdomain: function (tilePoint) {
+ var index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;
+ return this.options.subdomains[index];
+ },
+
+ _getTile: function () {
+ if (this.options.reuseTiles && this._unusedTiles.length > 0) {
+ var tile = this._unusedTiles.pop();
+ this._resetTile(tile);
+ return tile;
+ }
+ return this._createTile();
+ },
+
+ // Override if data stored on a tile needs to be cleaned up before reuse
+ _resetTile: function (/*tile*/) {},
+
+ _createTile: function () {
+ var tile = L.DomUtil.create('img', 'leaflet-tile');
+ tile.style.width = tile.style.height = this._getTileSize() + 'px';
+ tile.galleryimg = 'no';
+
+ tile.onselectstart = tile.onmousemove = L.Util.falseFn;
+
+ if (L.Browser.ielt9 && this.options.opacity !== undefined) {
+ L.DomUtil.setOpacity(tile, this.options.opacity);
+ }
+ // without this hack, tiles disappear after zoom on Chrome for Android
+ // https://github.com/Leaflet/Leaflet/issues/2078
+ if (L.Browser.mobileWebkit3d) {
+ tile.style.WebkitBackfaceVisibility = 'hidden';
+ }
+ return tile;
+ },
+
+ _loadTile: function (tile, tilePoint) {
+ tile._layer = this;
+ tile.onload = this._tileOnLoad;
+ tile.onerror = this._tileOnError;
+
+ this._adjustTilePoint(tilePoint);
+ tile.src = this.getTileUrl(tilePoint);
+
+ this.fire('tileloadstart', {
+ tile: tile,
+ url: tile.src
+ });
+ },
+
+ _tileLoaded: function () {
+ this._tilesToLoad--;
+
+ if (this._animated) {
+ L.DomUtil.addClass(this._tileContainer, 'leaflet-zoom-animated');
+ }
+
+ if (!this._tilesToLoad) {
+ this.fire('load');
+
+ if (this._animated) {
+ // clear scaled tiles after all new tiles are loaded (for performance)
+ clearTimeout(this._clearBgBufferTimer);
+ this._clearBgBufferTimer = setTimeout(L.bind(this._clearBgBuffer, this), 500);
+ }
+ }
+ },
+
+ _tileOnLoad: function () {
+ var layer = this._layer;
+
+ //Only if we are loading an actual image
+ if (this.src !== L.Util.emptyImageUrl) {
+ L.DomUtil.addClass(this, 'leaflet-tile-loaded');
+
+ layer.fire('tileload', {
+ tile: this,
+ url: this.src
+ });
+ }
+
+ layer._tileLoaded();
+ },
+
+ _tileOnError: function () {
+ var layer = this._layer;
+
+ layer.fire('tileerror', {
+ tile: this,
+ url: this.src
+ });
+
+ var newUrl = layer.options.errorTileUrl;
+ if (newUrl) {
+ this.src = newUrl;
+ }
+
+ layer._tileLoaded();
+ }
+});
+
+L.tileLayer = function (url, options) {
+ return new L.TileLayer(url, options);
+};
+
+
+/*
+ * L.TileLayer.WMS is used for putting WMS tile layers on the map.
+ */
+
+L.TileLayer.WMS = L.TileLayer.extend({
+
+ defaultWmsParams: {
+ service: 'WMS',
+ request: 'GetMap',
+ version: '1.1.1',
+ layers: '',
+ styles: '',
+ format: 'image/jpeg',
+ transparent: false
+ },
+
+ initialize: function (url, options) { // (String, Object)
+
+ this._url = url;
+
+ var wmsParams = L.extend({}, this.defaultWmsParams),
+ tileSize = options.tileSize || this.options.tileSize;
+
+ if (options.detectRetina && L.Browser.retina) {
+ wmsParams.width = wmsParams.height = tileSize * 2;
+ } else {
+ wmsParams.width = wmsParams.height = tileSize;
+ }
+
+ for (var i in options) {
+ // all keys that are not TileLayer options go to WMS params
+ if (!this.options.hasOwnProperty(i) && i !== 'crs') {
+ wmsParams[i] = options[i];
+ }
+ }
+
+ this.wmsParams = wmsParams;
+
+ L.setOptions(this, options);
+ },
+
+ onAdd: function (map) {
+
+ this._crs = this.options.crs || map.options.crs;
+
+ this._wmsVersion = parseFloat(this.wmsParams.version);
+
+ var projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';
+ this.wmsParams[projectionKey] = this._crs.code;
+
+ L.TileLayer.prototype.onAdd.call(this, map);
+ },
+
+ getTileUrl: function (tilePoint) { // (Point, Number) -> String
+
+ var map = this._map,
+ tileSize = this.options.tileSize,
+
+ nwPoint = tilePoint.multiplyBy(tileSize),
+ sePoint = nwPoint.add([tileSize, tileSize]),
+
+ nw = this._crs.project(map.unproject(nwPoint, tilePoint.z)),
+ se = this._crs.project(map.unproject(sePoint, tilePoint.z)),
+ bbox = this._wmsVersion >= 1.3 && this._crs === L.CRS.EPSG4326 ?
+ [se.y, nw.x, nw.y, se.x].join(',') :
+ [nw.x, se.y, se.x, nw.y].join(','),
+
+ url = L.Util.template(this._url, {s: this._getSubdomain(tilePoint)});
+
+ return url + L.Util.getParamString(this.wmsParams, url, true) + '&BBOX=' + bbox;
+ },
+
+ setParams: function (params, noRedraw) {
+
+ L.extend(this.wmsParams, params);
+
+ if (!noRedraw) {
+ this.redraw();
+ }
+
+ return this;
+ }
+});
+
+L.tileLayer.wms = function (url, options) {
+ return new L.TileLayer.WMS(url, options);
+};
+
+
+/*
+ * L.TileLayer.Canvas is a class that you can use as a base for creating
+ * dynamically drawn Canvas-based tile layers.
+ */
+
+L.TileLayer.Canvas = L.TileLayer.extend({
+ options: {
+ async: false
+ },
+
+ initialize: function (options) {
+ L.setOptions(this, options);
+ },
+
+ redraw: function () {
+ if (this._map) {
+ this._reset({hard: true});
+ this._update();
+ }
+
+ for (var i in this._tiles) {
+ this._redrawTile(this._tiles[i]);
+ }
+ return this;
+ },
+
+ _redrawTile: function (tile) {
+ this.drawTile(tile, tile._tilePoint, this._map._zoom);
+ },
+
+ _createTile: function () {
+ var tile = L.DomUtil.create('canvas', 'leaflet-tile');
+ tile.width = tile.height = this.options.tileSize;
+ tile.onselectstart = tile.onmousemove = L.Util.falseFn;
+ return tile;
+ },
+
+ _loadTile: function (tile, tilePoint) {
+ tile._layer = this;
+ tile._tilePoint = tilePoint;
+
+ this._redrawTile(tile);
+
+ if (!this.options.async) {
+ this.tileDrawn(tile);
+ }
+ },
+
+ drawTile: function (/*tile, tilePoint*/) {
+ // override with rendering code
+ },
+
+ tileDrawn: function (tile) {
+ this._tileOnLoad.call(tile);
+ }
+});
+
+
+L.tileLayer.canvas = function (options) {
+ return new L.TileLayer.Canvas(options);
+};
+
+
+/*
+ * L.ImageOverlay is used to overlay images over the map (to specific geographical bounds).
+ */
+
+L.ImageOverlay = L.Class.extend({
+ includes: L.Mixin.Events,
+
+ options: {
+ opacity: 1
+ },
+
+ initialize: function (url, bounds, options) { // (String, LatLngBounds, Object)
+ this._url = url;
+ this._bounds = L.latLngBounds(bounds);
+
+ L.setOptions(this, options);
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+
+ if (!this._image) {
+ this._initImage();
+ }
+
+ map._panes.overlayPane.appendChild(this._image);
+
+ map.on('viewreset', this._reset, this);
+
+ if (map.options.zoomAnimation && L.Browser.any3d) {
+ map.on('zoomanim', this._animateZoom, this);
+ }
+
+ this._reset();
+ },
+
+ onRemove: function (map) {
+ map.getPanes().overlayPane.removeChild(this._image);
+
+ map.off('viewreset', this._reset, this);
+
+ if (map.options.zoomAnimation) {
+ map.off('zoomanim', this._animateZoom, this);
+ }
+ },
+
+ addTo: function (map) {
+ map.addLayer(this);
+ return this;
+ },
+
+ setOpacity: function (opacity) {
+ this.options.opacity = opacity;
+ this._updateOpacity();
+ return this;
+ },
+
+ // TODO remove bringToFront/bringToBack duplication from TileLayer/Path
+ bringToFront: function () {
+ if (this._image) {
+ this._map._panes.overlayPane.appendChild(this._image);
+ }
+ return this;
+ },
+
+ bringToBack: function () {
+ var pane = this._map._panes.overlayPane;
+ if (this._image) {
+ pane.insertBefore(this._image, pane.firstChild);
+ }
+ return this;
+ },
+
+ setUrl: function (url) {
+ this._url = url;
+ this._image.src = this._url;
+ },
+
+ getAttribution: function () {
+ return this.options.attribution;
+ },
+
+ _initImage: function () {
+ this._image = L.DomUtil.create('img', 'leaflet-image-layer');
+
+ if (this._map.options.zoomAnimation && L.Browser.any3d) {
+ L.DomUtil.addClass(this._image, 'leaflet-zoom-animated');
+ } else {
+ L.DomUtil.addClass(this._image, 'leaflet-zoom-hide');
+ }
+
+ this._updateOpacity();
+
+ //TODO createImage util method to remove duplication
+ L.extend(this._image, {
+ galleryimg: 'no',
+ onselectstart: L.Util.falseFn,
+ onmousemove: L.Util.falseFn,
+ onload: L.bind(this._onImageLoad, this),
+ src: this._url
+ });
+ },
+
+ _animateZoom: function (e) {
+ var map = this._map,
+ image = this._image,
+ scale = map.getZoomScale(e.zoom),
+ nw = this._bounds.getNorthWest(),
+ se = this._bounds.getSouthEast(),
+
+ topLeft = map._latLngToNewLayerPoint(nw, e.zoom, e.center),
+ size = map._latLngToNewLayerPoint(se, e.zoom, e.center)._subtract(topLeft),
+ origin = topLeft._add(size._multiplyBy((1 / 2) * (1 - 1 / scale)));
+
+ image.style[L.DomUtil.TRANSFORM] =
+ L.DomUtil.getTranslateString(origin) + ' scale(' + scale + ') ';
+ },
+
+ _reset: function () {
+ var image = this._image,
+ topLeft = this._map.latLngToLayerPoint(this._bounds.getNorthWest()),
+ size = this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(topLeft);
+
+ L.DomUtil.setPosition(image, topLeft);
+
+ image.style.width = size.x + 'px';
+ image.style.height = size.y + 'px';
+ },
+
+ _onImageLoad: function () {
+ this.fire('load');
+ },
+
+ _updateOpacity: function () {
+ L.DomUtil.setOpacity(this._image, this.options.opacity);
+ }
+});
+
+L.imageOverlay = function (url, bounds, options) {
+ return new L.ImageOverlay(url, bounds, options);
+};
+
+
+/*
+ * L.Icon is an image-based icon class that you can use with L.Marker for custom markers.
+ */
+
+L.Icon = L.Class.extend({
+ options: {
+ /*
+ iconUrl: (String) (required)
+ iconRetinaUrl: (String) (optional, used for retina devices if detected)
+ iconSize: (Point) (can be set through CSS)
+ iconAnchor: (Point) (centered by default, can be set in CSS with negative margins)
+ popupAnchor: (Point) (if not specified, popup opens in the anchor point)
+ shadowUrl: (String) (no shadow by default)
+ shadowRetinaUrl: (String) (optional, used for retina devices if detected)
+ shadowSize: (Point)
+ shadowAnchor: (Point)
+ */
+ className: ''
+ },
+
+ initialize: function (options) {
+ L.setOptions(this, options);
+ },
+
+ createIcon: function (oldIcon) {
+ return this._createIcon('icon', oldIcon);
+ },
+
+ createShadow: function (oldIcon) {
+ return this._createIcon('shadow', oldIcon);
+ },
+
+ _createIcon: function (name, oldIcon) {
+ var src = this._getIconUrl(name);
+
+ if (!src) {
+ if (name === 'icon') {
+ throw new Error('iconUrl not set in Icon options (see the docs).');
+ }
+ return null;
+ }
+
+ var img;
+ if (!oldIcon || oldIcon.tagName !== 'IMG') {
+ img = this._createImg(src);
+ } else {
+ img = this._createImg(src, oldIcon);
+ }
+ this._setIconStyles(img, name);
+
+ return img;
+ },
+
+ _setIconStyles: function (img, name) {
+ var options = this.options,
+ size = L.point(options[name + 'Size']),
+ anchor;
+
+ if (name === 'shadow') {
+ anchor = L.point(options.shadowAnchor || options.iconAnchor);
+ } else {
+ anchor = L.point(options.iconAnchor);
+ }
+
+ if (!anchor && size) {
+ anchor = size.divideBy(2, true);
+ }
+
+ img.className = 'leaflet-marker-' + name + ' ' + options.className;
+
+ if (anchor) {
+ img.style.marginLeft = (-anchor.x) + 'px';
+ img.style.marginTop = (-anchor.y) + 'px';
+ }
+
+ if (size) {
+ img.style.width = size.x + 'px';
+ img.style.height = size.y + 'px';
+ }
+ },
+
+ _createImg: function (src, el) {
+ el = el || document.createElement('img');
+ el.src = src;
+ return el;
+ },
+
+ _getIconUrl: function (name) {
+ if (L.Browser.retina && this.options[name + 'RetinaUrl']) {
+ return this.options[name + 'RetinaUrl'];
+ }
+ return this.options[name + 'Url'];
+ }
+});
+
+L.icon = function (options) {
+ return new L.Icon(options);
+};
+
+
+/*
+ * L.Icon.Default is the blue marker icon used by default in Leaflet.
+ */
+
+L.Icon.Default = L.Icon.extend({
+
+ options: {
+ iconSize: [25, 41],
+ iconAnchor: [12, 41],
+ popupAnchor: [1, -34],
+
+ shadowSize: [41, 41]
+ },
+
+ _getIconUrl: function (name) {
+ var key = name + 'Url';
+
+ if (this.options[key]) {
+ return this.options[key];
+ }
+
+ if (L.Browser.retina && name === 'icon') {
+ name += '-2x';
+ }
+
+ var path = L.Icon.Default.imagePath;
+
+ if (!path) {
+ throw new Error('Couldn\'t autodetect L.Icon.Default.imagePath, set it manually.');
+ }
+
+ return path + '/marker-' + name + '.png';
+ }
+});
+
+L.Icon.Default.imagePath = (function () {
+ var scripts = document.getElementsByTagName('script'),
+ leafletRe = /[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/;
+
+ var i, len, src, matches, path;
+
+ for (i = 0, len = scripts.length; i < len; i++) {
+ src = scripts[i].src;
+ matches = src.match(leafletRe);
+
+ if (matches) {
+ path = src.split(leafletRe)[0];
+ return (path ? path + '/' : '') + 'images';
+ }
+ }
+}());
+
+
+/*
+ * L.Marker is used to display clickable/draggable icons on the map.
+ */
+
+L.Marker = L.Class.extend({
+
+ includes: L.Mixin.Events,
+
+ options: {
+ icon: new L.Icon.Default(),
+ title: '',
+ alt: '',
+ clickable: true,
+ draggable: false,
+ keyboard: true,
+ zIndexOffset: 0,
+ opacity: 1,
+ riseOnHover: false,
+ riseOffset: 250
+ },
+
+ initialize: function (latlng, options) {
+ L.setOptions(this, options);
+ this._latlng = L.latLng(latlng);
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+
+ map.on('viewreset', this.update, this);
+
+ this._initIcon();
+ this.update();
+ this.fire('add');
+
+ if (map.options.zoomAnimation && map.options.markerZoomAnimation) {
+ map.on('zoomanim', this._animateZoom, this);
+ }
+ },
+
+ addTo: function (map) {
+ map.addLayer(this);
+ return this;
+ },
+
+ onRemove: function (map) {
+ if (this.dragging) {
+ this.dragging.disable();
+ }
+
+ this._removeIcon();
+ this._removeShadow();
+
+ this.fire('remove');
+
+ map.off({
+ 'viewreset': this.update,
+ 'zoomanim': this._animateZoom
+ }, this);
+
+ this._map = null;
+ },
+
+ getLatLng: function () {
+ return this._latlng;
+ },
+
+ setLatLng: function (latlng) {
+ this._latlng = L.latLng(latlng);
+
+ this.update();
+
+ return this.fire('move', { latlng: this._latlng });
+ },
+
+ setZIndexOffset: function (offset) {
+ this.options.zIndexOffset = offset;
+ this.update();
+
+ return this;
+ },
+
+ setIcon: function (icon) {
+
+ this.options.icon = icon;
+
+ if (this._map) {
+ this._initIcon();
+ this.update();
+ }
+
+ if (this._popup) {
+ this.bindPopup(this._popup);
+ }
+
+ return this;
+ },
+
+ update: function () {
+ if (this._icon) {
+ this._setPos(this._map.latLngToLayerPoint(this._latlng).round());
+ }
+ return this;
+ },
+
+ _initIcon: function () {
+ var options = this.options,
+ map = this._map,
+ animation = (map.options.zoomAnimation && map.options.markerZoomAnimation),
+ classToAdd = animation ? 'leaflet-zoom-animated' : 'leaflet-zoom-hide';
+
+ var icon = options.icon.createIcon(this._icon),
+ addIcon = false;
+
+ // if we're not reusing the icon, remove the old one and init new one
+ if (icon !== this._icon) {
+ if (this._icon) {
+ this._removeIcon();
+ }
+ addIcon = true;
+
+ if (options.title) {
+ icon.title = options.title;
+ }
+
+ if (options.alt) {
+ icon.alt = options.alt;
+ }
+ }
+
+ L.DomUtil.addClass(icon, classToAdd);
+
+ if (options.keyboard) {
+ icon.tabIndex = '0';
+ }
+
+ this._icon = icon;
+
+ this._initInteraction();
+
+ if (options.riseOnHover) {
+ L.DomEvent
+ .on(icon, 'mouseover', this._bringToFront, this)
+ .on(icon, 'mouseout', this._resetZIndex, this);
+ }
+
+ var newShadow = options.icon.createShadow(this._shadow),
+ addShadow = false;
+
+ if (newShadow !== this._shadow) {
+ this._removeShadow();
+ addShadow = true;
+ }
+
+ if (newShadow) {
+ L.DomUtil.addClass(newShadow, classToAdd);
+ }
+ this._shadow = newShadow;
+
+
+ if (options.opacity < 1) {
+ this._updateOpacity();
+ }
+
+
+ var panes = this._map._panes;
+
+ if (addIcon) {
+ panes.markerPane.appendChild(this._icon);
+ }
+
+ if (newShadow && addShadow) {
+ panes.shadowPane.appendChild(this._shadow);
+ }
+ },
+
+ _removeIcon: function () {
+ if (this.options.riseOnHover) {
+ L.DomEvent
+ .off(this._icon, 'mouseover', this._bringToFront)
+ .off(this._icon, 'mouseout', this._resetZIndex);
+ }
+
+ this._map._panes.markerPane.removeChild(this._icon);
+
+ this._icon = null;
+ },
+
+ _removeShadow: function () {
+ if (this._shadow) {
+ this._map._panes.shadowPane.removeChild(this._shadow);
+ }
+ this._shadow = null;
+ },
+
+ _setPos: function (pos) {
+ L.DomUtil.setPosition(this._icon, pos);
+
+ if (this._shadow) {
+ L.DomUtil.setPosition(this._shadow, pos);
+ }
+
+ this._zIndex = pos.y + this.options.zIndexOffset;
+
+ this._resetZIndex();
+ },
+
+ _updateZIndex: function (offset) {
+ this._icon.style.zIndex = this._zIndex + offset;
+ },
+
+ _animateZoom: function (opt) {
+ var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();
+
+ this._setPos(pos);
+ },
+
+ _initInteraction: function () {
+
+ if (!this.options.clickable) { return; }
+
+ // TODO refactor into something shared with Map/Path/etc. to DRY it up
+
+ var icon = this._icon,
+ events = ['dblclick', 'mousedown', 'mouseover', 'mouseout', 'contextmenu'];
+
+ L.DomUtil.addClass(icon, 'leaflet-clickable');
+ L.DomEvent.on(icon, 'click', this._onMouseClick, this);
+ L.DomEvent.on(icon, 'keypress', this._onKeyPress, this);
+
+ for (var i = 0; i < events.length; i++) {
+ L.DomEvent.on(icon, events[i], this._fireMouseEvent, this);
+ }
+
+ if (L.Handler.MarkerDrag) {
+ this.dragging = new L.Handler.MarkerDrag(this);
+
+ if (this.options.draggable) {
+ this.dragging.enable();
+ }
+ }
+ },
+
+ _onMouseClick: function (e) {
+ var wasDragged = this.dragging && this.dragging.moved();
+
+ if (this.hasEventListeners(e.type) || wasDragged) {
+ L.DomEvent.stopPropagation(e);
+ }
+
+ if (wasDragged) { return; }
+
+ if ((!this.dragging || !this.dragging._enabled) && this._map.dragging && this._map.dragging.moved()) { return; }
+
+ this.fire(e.type, {
+ originalEvent: e,
+ latlng: this._latlng
+ });
+ },
+
+ _onKeyPress: function (e) {
+ if (e.keyCode === 13) {
+ this.fire('click', {
+ originalEvent: e,
+ latlng: this._latlng
+ });
+ }
+ },
+
+ _fireMouseEvent: function (e) {
+
+ this.fire(e.type, {
+ originalEvent: e,
+ latlng: this._latlng
+ });
+
+ // TODO proper custom event propagation
+ // this line will always be called if marker is in a FeatureGroup
+ if (e.type === 'contextmenu' && this.hasEventListeners(e.type)) {
+ L.DomEvent.preventDefault(e);
+ }
+ if (e.type !== 'mousedown') {
+ L.DomEvent.stopPropagation(e);
+ } else {
+ L.DomEvent.preventDefault(e);
+ }
+ },
+
+ setOpacity: function (opacity) {
+ this.options.opacity = opacity;
+ if (this._map) {
+ this._updateOpacity();
+ }
+
+ return this;
+ },
+
+ _updateOpacity: function () {
+ L.DomUtil.setOpacity(this._icon, this.options.opacity);
+ if (this._shadow) {
+ L.DomUtil.setOpacity(this._shadow, this.options.opacity);
+ }
+ },
+
+ _bringToFront: function () {
+ this._updateZIndex(this.options.riseOffset);
+ },
+
+ _resetZIndex: function () {
+ this._updateZIndex(0);
+ }
+});
+
+L.marker = function (latlng, options) {
+ return new L.Marker(latlng, options);
+};
+
+
+/*
+ * L.DivIcon is a lightweight HTML-based icon class (as opposed to the image-based L.Icon)
+ * to use with L.Marker.
+ */
+
+L.DivIcon = L.Icon.extend({
+ options: {
+ iconSize: [12, 12], // also can be set through CSS
+ /*
+ iconAnchor: (Point)
+ popupAnchor: (Point)
+ html: (String)
+ bgPos: (Point)
+ */
+ className: 'leaflet-div-icon',
+ html: false
+ },
+
+ createIcon: function (oldIcon) {
+ var div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),
+ options = this.options;
+
+ if (options.html !== false) {
+ div.innerHTML = options.html;
+ } else {
+ div.innerHTML = '';
+ }
+
+ if (options.bgPos) {
+ div.style.backgroundPosition =
+ (-options.bgPos.x) + 'px ' + (-options.bgPos.y) + 'px';
+ }
+
+ this._setIconStyles(div, 'icon');
+ return div;
+ },
+
+ createShadow: function () {
+ return null;
+ }
+});
+
+L.divIcon = function (options) {
+ return new L.DivIcon(options);
+};
+
+
+/*
+ * L.Popup is used for displaying popups on the map.
+ */
+
+L.Map.mergeOptions({
+ closePopupOnClick: true
+});
+
+L.Popup = L.Class.extend({
+ includes: L.Mixin.Events,
+
+ options: {
+ minWidth: 50,
+ maxWidth: 300,
+ // maxHeight: null,
+ autoPan: true,
+ closeButton: true,
+ offset: [0, 7],
+ autoPanPadding: [5, 5],
+ // autoPanPaddingTopLeft: null,
+ // autoPanPaddingBottomRight: null,
+ keepInView: false,
+ className: '',
+ zoomAnimation: true
+ },
+
+ initialize: function (options, source) {
+ L.setOptions(this, options);
+
+ this._source = source;
+ this._animated = L.Browser.any3d && this.options.zoomAnimation;
+ this._isOpen = false;
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+
+ if (!this._container) {
+ this._initLayout();
+ }
+
+ var animFade = map.options.fadeAnimation;
+
+ if (animFade) {
+ L.DomUtil.setOpacity(this._container, 0);
+ }
+ map._panes.popupPane.appendChild(this._container);
+
+ map.on(this._getEvents(), this);
+
+ this.update();
+
+ if (animFade) {
+ L.DomUtil.setOpacity(this._container, 1);
+ }
+
+ this.fire('open');
+
+ map.fire('popupopen', {popup: this});
+
+ if (this._source) {
+ this._source.fire('popupopen', {popup: this});
+ }
+ },
+
+ addTo: function (map) {
+ map.addLayer(this);
+ return this;
+ },
+
+ openOn: function (map) {
+ map.openPopup(this);
+ return this;
+ },
+
+ onRemove: function (map) {
+ map._panes.popupPane.removeChild(this._container);
+
+ L.Util.falseFn(this._container.offsetWidth); // force reflow
+
+ map.off(this._getEvents(), this);
+
+ if (map.options.fadeAnimation) {
+ L.DomUtil.setOpacity(this._container, 0);
+ }
+
+ this._map = null;
+
+ this.fire('close');
+
+ map.fire('popupclose', {popup: this});
+
+ if (this._source) {
+ this._source.fire('popupclose', {popup: this});
+ }
+ },
+
+ getLatLng: function () {
+ return this._latlng;
+ },
+
+ setLatLng: function (latlng) {
+ this._latlng = L.latLng(latlng);
+ if (this._map) {
+ this._updatePosition();
+ this._adjustPan();
+ }
+ return this;
+ },
+
+ getContent: function () {
+ return this._content;
+ },
+
+ setContent: function (content) {
+ this._content = content;
+ this.update();
+ return this;
+ },
+
+ update: function () {
+ if (!this._map) { return; }
+
+ this._container.style.visibility = 'hidden';
+
+ this._updateContent();
+ this._updateLayout();
+ this._updatePosition();
+
+ this._container.style.visibility = '';
+
+ this._adjustPan();
+ },
+
+ _getEvents: function () {
+ var events = {
+ viewreset: this._updatePosition
+ };
+
+ if (this._animated) {
+ events.zoomanim = this._zoomAnimation;
+ }
+ if ('closeOnClick' in this.options ? this.options.closeOnClick : this._map.options.closePopupOnClick) {
+ events.preclick = this._close;
+ }
+ if (this.options.keepInView) {
+ events.moveend = this._adjustPan;
+ }
+
+ return events;
+ },
+
+ _close: function () {
+ if (this._map) {
+ this._map.closePopup(this);
+ }
+ },
+
+ _initLayout: function () {
+ var prefix = 'leaflet-popup',
+ containerClass = prefix + ' ' + this.options.className + ' leaflet-zoom-' +
+ (this._animated ? 'animated' : 'hide'),
+ container = this._container = L.DomUtil.create('div', containerClass),
+ closeButton;
+
+ if (this.options.closeButton) {
+ closeButton = this._closeButton =
+ L.DomUtil.create('a', prefix + '-close-button', container);
+ closeButton.href = '#close';
+ closeButton.innerHTML = '×';
+ L.DomEvent.disableClickPropagation(closeButton);
+
+ L.DomEvent.on(closeButton, 'click', this._onCloseButtonClick, this);
+ }
+
+ var wrapper = this._wrapper =
+ L.DomUtil.create('div', prefix + '-content-wrapper', container);
+ L.DomEvent.disableClickPropagation(wrapper);
+
+ this._contentNode = L.DomUtil.create('div', prefix + '-content', wrapper);
+
+ L.DomEvent.disableScrollPropagation(this._contentNode);
+ L.DomEvent.on(wrapper, 'contextmenu', L.DomEvent.stopPropagation);
+
+ this._tipContainer = L.DomUtil.create('div', prefix + '-tip-container', container);
+ this._tip = L.DomUtil.create('div', prefix + '-tip', this._tipContainer);
+ },
+
+ _updateContent: function () {
+ if (!this._content) { return; }
+
+ if (typeof this._content === 'string') {
+ this._contentNode.innerHTML = this._content;
+ } else {
+ while (this._contentNode.hasChildNodes()) {
+ this._contentNode.removeChild(this._contentNode.firstChild);
+ }
+ this._contentNode.appendChild(this._content);
+ }
+ this.fire('contentupdate');
+ },
+
+ _updateLayout: function () {
+ var container = this._contentNode,
+ style = container.style;
+
+ style.width = '';
+ style.whiteSpace = 'nowrap';
+
+ var width = container.offsetWidth;
+ width = Math.min(width, this.options.maxWidth);
+ width = Math.max(width, this.options.minWidth);
+
+ style.width = (width + 1) + 'px';
+ style.whiteSpace = '';
+
+ style.height = '';
+
+ var height = container.offsetHeight,
+ maxHeight = this.options.maxHeight,
+ scrolledClass = 'leaflet-popup-scrolled';
+
+ if (maxHeight && height > maxHeight) {
+ style.height = maxHeight + 'px';
+ L.DomUtil.addClass(container, scrolledClass);
+ } else {
+ L.DomUtil.removeClass(container, scrolledClass);
+ }
+
+ this._containerWidth = this._container.offsetWidth;
+ },
+
+ _updatePosition: function () {
+ if (!this._map) { return; }
+
+ var pos = this._map.latLngToLayerPoint(this._latlng),
+ animated = this._animated,
+ offset = L.point(this.options.offset);
+
+ if (animated) {
+ L.DomUtil.setPosition(this._container, pos);
+ }
+
+ this._containerBottom = -offset.y - (animated ? 0 : pos.y);
+ this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x + (animated ? 0 : pos.x);
+
+ // bottom position the popup in case the height of the popup changes (images loading etc)
+ this._container.style.bottom = this._containerBottom + 'px';
+ this._container.style.left = this._containerLeft + 'px';
+ },
+
+ _zoomAnimation: function (opt) {
+ var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center);
+
+ L.DomUtil.setPosition(this._container, pos);
+ },
+
+ _adjustPan: function () {
+ if (!this.options.autoPan) { return; }
+
+ var map = this._map,
+ containerHeight = this._container.offsetHeight,
+ containerWidth = this._containerWidth,
+
+ layerPos = new L.Point(this._containerLeft, -containerHeight - this._containerBottom);
+
+ if (this._animated) {
+ layerPos._add(L.DomUtil.getPosition(this._container));
+ }
+
+ var containerPos = map.layerPointToContainerPoint(layerPos),
+ padding = L.point(this.options.autoPanPadding),
+ paddingTL = L.point(this.options.autoPanPaddingTopLeft || padding),
+ paddingBR = L.point(this.options.autoPanPaddingBottomRight || padding),
+ size = map.getSize(),
+ dx = 0,
+ dy = 0;
+
+ if (containerPos.x + containerWidth + paddingBR.x > size.x) { // right
+ dx = containerPos.x + containerWidth - size.x + paddingBR.x;
+ }
+ if (containerPos.x - dx - paddingTL.x < 0) { // left
+ dx = containerPos.x - paddingTL.x;
+ }
+ if (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom
+ dy = containerPos.y + containerHeight - size.y + paddingBR.y;
+ }
+ if (containerPos.y - dy - paddingTL.y < 0) { // top
+ dy = containerPos.y - paddingTL.y;
+ }
+
+ if (dx || dy) {
+ map
+ .fire('autopanstart')
+ .panBy([dx, dy]);
+ }
+ },
+
+ _onCloseButtonClick: function (e) {
+ this._close();
+ L.DomEvent.stop(e);
+ }
+});
+
+L.popup = function (options, source) {
+ return new L.Popup(options, source);
+};
+
+
+L.Map.include({
+ openPopup: function (popup, latlng, options) { // (Popup) or (String || HTMLElement, LatLng[, Object])
+ this.closePopup();
+
+ if (!(popup instanceof L.Popup)) {
+ var content = popup;
+
+ popup = new L.Popup(options)
+ .setLatLng(latlng)
+ .setContent(content);
+ }
+ popup._isOpen = true;
+
+ this._popup = popup;
+ return this.addLayer(popup);
+ },
+
+ closePopup: function (popup) {
+ if (!popup || popup === this._popup) {
+ popup = this._popup;
+ this._popup = null;
+ }
+ if (popup) {
+ this.removeLayer(popup);
+ popup._isOpen = false;
+ }
+ return this;
+ }
+});
+
+
+/*
+ * Popup extension to L.Marker, adding popup-related methods.
+ */
+
+L.Marker.include({
+ openPopup: function () {
+ if (this._popup && this._map && !this._map.hasLayer(this._popup)) {
+ this._popup.setLatLng(this._latlng);
+ this._map.openPopup(this._popup);
+ }
+
+ return this;
+ },
+
+ closePopup: function () {
+ if (this._popup) {
+ this._popup._close();
+ }
+ return this;
+ },
+
+ togglePopup: function () {
+ if (this._popup) {
+ if (this._popup._isOpen) {
+ this.closePopup();
+ } else {
+ this.openPopup();
+ }
+ }
+ return this;
+ },
+
+ bindPopup: function (content, options) {
+ var anchor = L.point(this.options.icon.options.popupAnchor || [0, 0]);
+
+ anchor = anchor.add(L.Popup.prototype.options.offset);
+
+ if (options && options.offset) {
+ anchor = anchor.add(options.offset);
+ }
+
+ options = L.extend({offset: anchor}, options);
+
+ if (!this._popupHandlersAdded) {
+ this
+ .on('click', this.togglePopup, this)
+ .on('remove', this.closePopup, this)
+ .on('move', this._movePopup, this);
+ this._popupHandlersAdded = true;
+ }
+
+ if (content instanceof L.Popup) {
+ L.setOptions(content, options);
+ this._popup = content;
+ content._source = this;
+ } else {
+ this._popup = new L.Popup(options, this)
+ .setContent(content);
+ }
+
+ return this;
+ },
+
+ setPopupContent: function (content) {
+ if (this._popup) {
+ this._popup.setContent(content);
+ }
+ return this;
+ },
+
+ unbindPopup: function () {
+ if (this._popup) {
+ this._popup = null;
+ this
+ .off('click', this.togglePopup, this)
+ .off('remove', this.closePopup, this)
+ .off('move', this._movePopup, this);
+ this._popupHandlersAdded = false;
+ }
+ return this;
+ },
+
+ getPopup: function () {
+ return this._popup;
+ },
+
+ _movePopup: function (e) {
+ this._popup.setLatLng(e.latlng);
+ }
+});
+
+
+/*
+ * L.LayerGroup is a class to combine several layers into one so that
+ * you can manipulate the group (e.g. add/remove it) as one layer.
+ */
+
+L.LayerGroup = L.Class.extend({
+ initialize: function (layers) {
+ this._layers = {};
+
+ var i, len;
+
+ if (layers) {
+ for (i = 0, len = layers.length; i < len; i++) {
+ this.addLayer(layers[i]);
+ }
+ }
+ },
+
+ addLayer: function (layer) {
+ var id = this.getLayerId(layer);
+
+ this._layers[id] = layer;
+
+ if (this._map) {
+ this._map.addLayer(layer);
+ }
+
+ return this;
+ },
+
+ removeLayer: function (layer) {
+ var id = layer in this._layers ? layer : this.getLayerId(layer);
+
+ if (this._map && this._layers[id]) {
+ this._map.removeLayer(this._layers[id]);
+ }
+
+ delete this._layers[id];
+
+ return this;
+ },
+
+ hasLayer: function (layer) {
+ if (!layer) { return false; }
+
+ return (layer in this._layers || this.getLayerId(layer) in this._layers);
+ },
+
+ clearLayers: function () {
+ this.eachLayer(this.removeLayer, this);
+ return this;
+ },
+
+ invoke: function (methodName) {
+ var args = Array.prototype.slice.call(arguments, 1),
+ i, layer;
+
+ for (i in this._layers) {
+ layer = this._layers[i];
+
+ if (layer[methodName]) {
+ layer[methodName].apply(layer, args);
+ }
+ }
+
+ return this;
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+ this.eachLayer(map.addLayer, map);
+ },
+
+ onRemove: function (map) {
+ this.eachLayer(map.removeLayer, map);
+ this._map = null;
+ },
+
+ addTo: function (map) {
+ map.addLayer(this);
+ return this;
+ },
+
+ eachLayer: function (method, context) {
+ for (var i in this._layers) {
+ method.call(context, this._layers[i]);
+ }
+ return this;
+ },
+
+ getLayer: function (id) {
+ return this._layers[id];
+ },
+
+ getLayers: function () {
+ var layers = [];
+
+ for (var i in this._layers) {
+ layers.push(this._layers[i]);
+ }
+ return layers;
+ },
+
+ setZIndex: function (zIndex) {
+ return this.invoke('setZIndex', zIndex);
+ },
+
+ getLayerId: function (layer) {
+ return L.stamp(layer);
+ }
+});
+
+L.layerGroup = function (layers) {
+ return new L.LayerGroup(layers);
+};
+
+
+/*
+ * L.FeatureGroup extends L.LayerGroup by introducing mouse events and additional methods
+ * shared between a group of interactive layers (like vectors or markers).
+ */
+
+L.FeatureGroup = L.LayerGroup.extend({
+ includes: L.Mixin.Events,
+
+ statics: {
+ EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose'
+ },
+
+ addLayer: function (layer) {
+ if (this.hasLayer(layer)) {
+ return this;
+ }
+
+ if ('on' in layer) {
+ layer.on(L.FeatureGroup.EVENTS, this._propagateEvent, this);
+ }
+
+ L.LayerGroup.prototype.addLayer.call(this, layer);
+
+ if (this._popupContent && layer.bindPopup) {
+ layer.bindPopup(this._popupContent, this._popupOptions);
+ }
+
+ return this.fire('layeradd', {layer: layer});
+ },
+
+ removeLayer: function (layer) {
+ if (!this.hasLayer(layer)) {
+ return this;
+ }
+ if (layer in this._layers) {
+ layer = this._layers[layer];
+ }
+
+ if ('off' in layer) {
+ layer.off(L.FeatureGroup.EVENTS, this._propagateEvent, this);
+ }
+
+ L.LayerGroup.prototype.removeLayer.call(this, layer);
+
+ if (this._popupContent) {
+ this.invoke('unbindPopup');
+ }
+
+ return this.fire('layerremove', {layer: layer});
+ },
+
+ bindPopup: function (content, options) {
+ this._popupContent = content;
+ this._popupOptions = options;
+ return this.invoke('bindPopup', content, options);
+ },
+
+ openPopup: function (latlng) {
+ // open popup on the first layer
+ for (var id in this._layers) {
+ this._layers[id].openPopup(latlng);
+ break;
+ }
+ return this;
+ },
+
+ setStyle: function (style) {
+ return this.invoke('setStyle', style);
+ },
+
+ bringToFront: function () {
+ return this.invoke('bringToFront');
+ },
+
+ bringToBack: function () {
+ return this.invoke('bringToBack');
+ },
+
+ getBounds: function () {
+ var bounds = new L.LatLngBounds();
+
+ this.eachLayer(function (layer) {
+ bounds.extend(layer instanceof L.Marker ? layer.getLatLng() : layer.getBounds());
+ });
+
+ return bounds;
+ },
+
+ _propagateEvent: function (e) {
+ e = L.extend({
+ layer: e.target,
+ target: this
+ }, e);
+ this.fire(e.type, e);
+ }
+});
+
+L.featureGroup = function (layers) {
+ return new L.FeatureGroup(layers);
+};
+
+
+/*
+ * L.Path is a base class for rendering vector paths on a map. Inherited by Polyline, Circle, etc.
+ */
+
+L.Path = L.Class.extend({
+ includes: [L.Mixin.Events],
+
+ statics: {
+ // how much to extend the clip area around the map view
+ // (relative to its size, e.g. 0.5 is half the screen in each direction)
+ // set it so that SVG element doesn't exceed 1280px (vectors flicker on dragend if it is)
+ CLIP_PADDING: (function () {
+ var max = L.Browser.mobile ? 1280 : 2000,
+ target = (max / Math.max(window.outerWidth, window.outerHeight) - 1) / 2;
+ return Math.max(0, Math.min(0.5, target));
+ })()
+ },
+
+ options: {
+ stroke: true,
+ color: '#0033ff',
+ dashArray: null,
+ lineCap: null,
+ lineJoin: null,
+ weight: 5,
+ opacity: 0.5,
+
+ fill: false,
+ fillColor: null, //same as color by default
+ fillOpacity: 0.2,
+
+ clickable: true
+ },
+
+ initialize: function (options) {
+ L.setOptions(this, options);
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+
+ if (!this._container) {
+ this._initElements();
+ this._initEvents();
+ }
+
+ this.projectLatlngs();
+ this._updatePath();
+
+ if (this._container) {
+ this._map._pathRoot.appendChild(this._container);
+ }
+
+ this.fire('add');
+
+ map.on({
+ 'viewreset': this.projectLatlngs,
+ 'moveend': this._updatePath
+ }, this);
+ },
+
+ addTo: function (map) {
+ map.addLayer(this);
+ return this;
+ },
+
+ onRemove: function (map) {
+ map._pathRoot.removeChild(this._container);
+
+ // Need to fire remove event before we set _map to null as the event hooks might need the object
+ this.fire('remove');
+ this._map = null;
+
+ if (L.Browser.vml) {
+ this._container = null;
+ this._stroke = null;
+ this._fill = null;
+ }
+
+ map.off({
+ 'viewreset': this.projectLatlngs,
+ 'moveend': this._updatePath
+ }, this);
+ },
+
+ projectLatlngs: function () {
+ // do all projection stuff here
+ },
+
+ setStyle: function (style) {
+ L.setOptions(this, style);
+
+ if (this._container) {
+ this._updateStyle();
+ }
+
+ return this;
+ },
+
+ redraw: function () {
+ if (this._map) {
+ this.projectLatlngs();
+ this._updatePath();
+ }
+ return this;
+ }
+});
+
+L.Map.include({
+ _updatePathViewport: function () {
+ var p = L.Path.CLIP_PADDING,
+ size = this.getSize(),
+ panePos = L.DomUtil.getPosition(this._mapPane),
+ min = panePos.multiplyBy(-1)._subtract(size.multiplyBy(p)._round()),
+ max = min.add(size.multiplyBy(1 + p * 2)._round());
+
+ this._pathViewport = new L.Bounds(min, max);
+ }
+});
+
+
+/*
+ * Extends L.Path with SVG-specific rendering code.
+ */
+
+L.Path.SVG_NS = 'http://www.w3.org/2000/svg';
+
+L.Browser.svg = !!(document.createElementNS && document.createElementNS(L.Path.SVG_NS, 'svg').createSVGRect);
+
+L.Path = L.Path.extend({
+ statics: {
+ SVG: L.Browser.svg
+ },
+
+ bringToFront: function () {
+ var root = this._map._pathRoot,
+ path = this._container;
+
+ if (path && root.lastChild !== path) {
+ root.appendChild(path);
+ }
+ return this;
+ },
+
+ bringToBack: function () {
+ var root = this._map._pathRoot,
+ path = this._container,
+ first = root.firstChild;
+
+ if (path && first !== path) {
+ root.insertBefore(path, first);
+ }
+ return this;
+ },
+
+ getPathString: function () {
+ // form path string here
+ },
+
+ _createElement: function (name) {
+ return document.createElementNS(L.Path.SVG_NS, name);
+ },
+
+ _initElements: function () {
+ this._map._initPathRoot();
+ this._initPath();
+ this._initStyle();
+ },
+
+ _initPath: function () {
+ this._container = this._createElement('g');
+
+ this._path = this._createElement('path');
+
+ if (this.options.className) {
+ L.DomUtil.addClass(this._path, this.options.className);
+ }
+
+ this._container.appendChild(this._path);
+ },
+
+ _initStyle: function () {
+ if (this.options.stroke) {
+ this._path.setAttribute('stroke-linejoin', 'round');
+ this._path.setAttribute('stroke-linecap', 'round');
+ }
+ if (this.options.fill) {
+ this._path.setAttribute('fill-rule', 'evenodd');
+ }
+ if (this.options.pointerEvents) {
+ this._path.setAttribute('pointer-events', this.options.pointerEvents);
+ }
+ if (!this.options.clickable && !this.options.pointerEvents) {
+ this._path.setAttribute('pointer-events', 'none');
+ }
+ this._updateStyle();
+ },
+
+ _updateStyle: function () {
+ if (this.options.stroke) {
+ this._path.setAttribute('stroke', this.options.color);
+ this._path.setAttribute('stroke-opacity', this.options.opacity);
+ this._path.setAttribute('stroke-width', this.options.weight);
+ if (this.options.dashArray) {
+ this._path.setAttribute('stroke-dasharray', this.options.dashArray);
+ } else {
+ this._path.removeAttribute('stroke-dasharray');
+ }
+ if (this.options.lineCap) {
+ this._path.setAttribute('stroke-linecap', this.options.lineCap);
+ }
+ if (this.options.lineJoin) {
+ this._path.setAttribute('stroke-linejoin', this.options.lineJoin);
+ }
+ } else {
+ this._path.setAttribute('stroke', 'none');
+ }
+ if (this.options.fill) {
+ this._path.setAttribute('fill', this.options.fillColor || this.options.color);
+ this._path.setAttribute('fill-opacity', this.options.fillOpacity);
+ } else {
+ this._path.setAttribute('fill', 'none');
+ }
+ },
+
+ _updatePath: function () {
+ var str = this.getPathString();
+ if (!str) {
+ // fix webkit empty string parsing bug
+ str = 'M0 0';
+ }
+ this._path.setAttribute('d', str);
+ },
+
+ // TODO remove duplication with L.Map
+ _initEvents: function () {
+ if (this.options.clickable) {
+ if (L.Browser.svg || !L.Browser.vml) {
+ L.DomUtil.addClass(this._path, 'leaflet-clickable');
+ }
+
+ L.DomEvent.on(this._container, 'click', this._onMouseClick, this);
+
+ var events = ['dblclick', 'mousedown', 'mouseover',
+ 'mouseout', 'mousemove', 'contextmenu'];
+ for (var i = 0; i < events.length; i++) {
+ L.DomEvent.on(this._container, events[i], this._fireMouseEvent, this);
+ }
+ }
+ },
+
+ _onMouseClick: function (e) {
+ if (this._map.dragging && this._map.dragging.moved()) { return; }
+
+ this._fireMouseEvent(e);
+ },
+
+ _fireMouseEvent: function (e) {
+ if (!this._map || !this.hasEventListeners(e.type)) { return; }
+
+ var map = this._map,
+ containerPoint = map.mouseEventToContainerPoint(e),
+ layerPoint = map.containerPointToLayerPoint(containerPoint),
+ latlng = map.layerPointToLatLng(layerPoint);
+
+ this.fire(e.type, {
+ latlng: latlng,
+ layerPoint: layerPoint,
+ containerPoint: containerPoint,
+ originalEvent: e
+ });
+
+ if (e.type === 'contextmenu') {
+ L.DomEvent.preventDefault(e);
+ }
+ if (e.type !== 'mousemove') {
+ L.DomEvent.stopPropagation(e);
+ }
+ }
+});
+
+L.Map.include({
+ _initPathRoot: function () {
+ if (!this._pathRoot) {
+ this._pathRoot = L.Path.prototype._createElement('svg');
+ this._panes.overlayPane.appendChild(this._pathRoot);
+
+ if (this.options.zoomAnimation && L.Browser.any3d) {
+ L.DomUtil.addClass(this._pathRoot, 'leaflet-zoom-animated');
+
+ this.on({
+ 'zoomanim': this._animatePathZoom,
+ 'zoomend': this._endPathZoom
+ });
+ } else {
+ L.DomUtil.addClass(this._pathRoot, 'leaflet-zoom-hide');
+ }
+
+ this.on('moveend', this._updateSvgViewport);
+ this._updateSvgViewport();
+ }
+ },
+
+ _animatePathZoom: function (e) {
+ var scale = this.getZoomScale(e.zoom),
+ offset = this._getCenterOffset(e.center)._multiplyBy(-scale)._add(this._pathViewport.min);
+
+ this._pathRoot.style[L.DomUtil.TRANSFORM] =
+ L.DomUtil.getTranslateString(offset) + ' scale(' + scale + ') ';
+
+ this._pathZooming = true;
+ },
+
+ _endPathZoom: function () {
+ this._pathZooming = false;
+ },
+
+ _updateSvgViewport: function () {
+
+ if (this._pathZooming) {
+ // Do not update SVGs while a zoom animation is going on otherwise the animation will break.
+ // When the zoom animation ends we will be updated again anyway
+ // This fixes the case where you do a momentum move and zoom while the move is still ongoing.
+ return;
+ }
+
+ this._updatePathViewport();
+
+ var vp = this._pathViewport,
+ min = vp.min,
+ max = vp.max,
+ width = max.x - min.x,
+ height = max.y - min.y,
+ root = this._pathRoot,
+ pane = this._panes.overlayPane;
+
+ // Hack to make flicker on drag end on mobile webkit less irritating
+ if (L.Browser.mobileWebkit) {
+ pane.removeChild(root);
+ }
+
+ L.DomUtil.setPosition(root, min);
+ root.setAttribute('width', width);
+ root.setAttribute('height', height);
+ root.setAttribute('viewBox', [min.x, min.y, width, height].join(' '));
+
+ if (L.Browser.mobileWebkit) {
+ pane.appendChild(root);
+ }
+ }
+});
+
+
+/*
+ * Popup extension to L.Path (polylines, polygons, circles), adding popup-related methods.
+ */
+
+L.Path.include({
+
+ bindPopup: function (content, options) {
+
+ if (content instanceof L.Popup) {
+ this._popup = content;
+ } else {
+ if (!this._popup || options) {
+ this._popup = new L.Popup(options, this);
+ }
+ this._popup.setContent(content);
+ }
+
+ if (!this._popupHandlersAdded) {
+ this
+ .on('click', this._openPopup, this)
+ .on('remove', this.closePopup, this);
+
+ this._popupHandlersAdded = true;
+ }
+
+ return this;
+ },
+
+ unbindPopup: function () {
+ if (this._popup) {
+ this._popup = null;
+ this
+ .off('click', this._openPopup)
+ .off('remove', this.closePopup);
+
+ this._popupHandlersAdded = false;
+ }
+ return this;
+ },
+
+ openPopup: function (latlng) {
+
+ if (this._popup) {
+ // open the popup from one of the path's points if not specified
+ latlng = latlng || this._latlng ||
+ this._latlngs[Math.floor(this._latlngs.length / 2)];
+
+ this._openPopup({latlng: latlng});
+ }
+
+ return this;
+ },
+
+ closePopup: function () {
+ if (this._popup) {
+ this._popup._close();
+ }
+ return this;
+ },
+
+ _openPopup: function (e) {
+ this._popup.setLatLng(e.latlng);
+ this._map.openPopup(this._popup);
+ }
+});
+
+
+/*
+ * Vector rendering for IE6-8 through VML.
+ * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!
+ */
+
+L.Browser.vml = !L.Browser.svg && (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;
+ }
+}());
+
+L.Path = L.Browser.svg || !L.Browser.vml ? L.Path : L.Path.extend({
+ statics: {
+ VML: true,
+ CLIP_PADDING: 0.02
+ },
+
+ _createElement: (function () {
+ try {
+ document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');
+ return function (name) {
+ return document.createElement('');
+ };
+ } catch (e) {
+ return function (name) {
+ return document.createElement(
+ '<' + name + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">');
+ };
+ }
+ }()),
+
+ _initPath: function () {
+ var container = this._container = this._createElement('shape');
+
+ L.DomUtil.addClass(container, 'leaflet-vml-shape' +
+ (this.options.className ? ' ' + this.options.className : ''));
+
+ if (this.options.clickable) {
+ L.DomUtil.addClass(container, 'leaflet-clickable');
+ }
+
+ container.coordsize = '1 1';
+
+ this._path = this._createElement('path');
+ container.appendChild(this._path);
+
+ this._map._pathRoot.appendChild(container);
+ },
+
+ _initStyle: function () {
+ this._updateStyle();
+ },
+
+ _updateStyle: function () {
+ var stroke = this._stroke,
+ fill = this._fill,
+ options = this.options,
+ container = this._container;
+
+ container.stroked = options.stroke;
+ container.filled = options.fill;
+
+ if (options.stroke) {
+ if (!stroke) {
+ stroke = this._stroke = this._createElement('stroke');
+ stroke.endcap = 'round';
+ container.appendChild(stroke);
+ }
+ stroke.weight = options.weight + 'px';
+ stroke.color = options.color;
+ stroke.opacity = options.opacity;
+
+ if (options.dashArray) {
+ stroke.dashStyle = L.Util.isArray(options.dashArray) ?
+ options.dashArray.join(' ') :
+ options.dashArray.replace(/( *, *)/g, ' ');
+ } else {
+ stroke.dashStyle = '';
+ }
+ if (options.lineCap) {
+ stroke.endcap = options.lineCap.replace('butt', 'flat');
+ }
+ if (options.lineJoin) {
+ stroke.joinstyle = options.lineJoin;
+ }
+
+ } else if (stroke) {
+ container.removeChild(stroke);
+ this._stroke = null;
+ }
+
+ if (options.fill) {
+ if (!fill) {
+ fill = this._fill = this._createElement('fill');
+ container.appendChild(fill);
+ }
+ fill.color = options.fillColor || options.color;
+ fill.opacity = options.fillOpacity;
+
+ } else if (fill) {
+ container.removeChild(fill);
+ this._fill = null;
+ }
+ },
+
+ _updatePath: function () {
+ var style = this._container.style;
+
+ style.display = 'none';
+ this._path.v = this.getPathString() + ' '; // the space fixes IE empty path string bug
+ style.display = '';
+ }
+});
+
+L.Map.include(L.Browser.svg || !L.Browser.vml ? {} : {
+ _initPathRoot: function () {
+ if (this._pathRoot) { return; }
+
+ var root = this._pathRoot = document.createElement('div');
+ root.className = 'leaflet-vml-container';
+ this._panes.overlayPane.appendChild(root);
+
+ this.on('moveend', this._updatePathViewport);
+ this._updatePathViewport();
+ }
+});
+
+
+/*
+ * Vector rendering for all browsers that support canvas.
+ */
+
+L.Browser.canvas = (function () {
+ return !!document.createElement('canvas').getContext;
+}());
+
+L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : L.Path.extend({
+ statics: {
+ //CLIP_PADDING: 0.02, // not sure if there's a need to set it to a small value
+ CANVAS: true,
+ SVG: false
+ },
+
+ redraw: function () {
+ if (this._map) {
+ this.projectLatlngs();
+ this._requestUpdate();
+ }
+ return this;
+ },
+
+ setStyle: function (style) {
+ L.setOptions(this, style);
+
+ if (this._map) {
+ this._updateStyle();
+ this._requestUpdate();
+ }
+ return this;
+ },
+
+ onRemove: function (map) {
+ map
+ .off('viewreset', this.projectLatlngs, this)
+ .off('moveend', this._updatePath, this);
+
+ if (this.options.clickable) {
+ this._map.off('click', this._onClick, this);
+ this._map.off('mousemove', this._onMouseMove, this);
+ }
+
+ this._requestUpdate();
+
+ this.fire('remove');
+ this._map = null;
+ },
+
+ _requestUpdate: function () {
+ if (this._map && !L.Path._updateRequest) {
+ L.Path._updateRequest = L.Util.requestAnimFrame(this._fireMapMoveEnd, this._map);
+ }
+ },
+
+ _fireMapMoveEnd: function () {
+ L.Path._updateRequest = null;
+ this.fire('moveend');
+ },
+
+ _initElements: function () {
+ this._map._initPathRoot();
+ this._ctx = this._map._canvasCtx;
+ },
+
+ _updateStyle: function () {
+ var options = this.options;
+
+ if (options.stroke) {
+ this._ctx.lineWidth = options.weight;
+ this._ctx.strokeStyle = options.color;
+ }
+ if (options.fill) {
+ this._ctx.fillStyle = options.fillColor || options.color;
+ }
+
+ if (options.lineCap) {
+ this._ctx.lineCap = options.lineCap;
+ }
+ if (options.lineJoin) {
+ this._ctx.lineJoin = options.lineJoin;
+ }
+ },
+
+ _drawPath: function () {
+ var i, j, len, len2, point, drawMethod;
+
+ this._ctx.beginPath();
+
+ for (i = 0, len = this._parts.length; i < len; i++) {
+ for (j = 0, len2 = this._parts[i].length; j < len2; j++) {
+ point = this._parts[i][j];
+ drawMethod = (j === 0 ? 'move' : 'line') + 'To';
+
+ this._ctx[drawMethod](point.x, point.y);
+ }
+ // TODO refactor ugly hack
+ if (this instanceof L.Polygon) {
+ this._ctx.closePath();
+ }
+ }
+ },
+
+ _checkIfEmpty: function () {
+ return !this._parts.length;
+ },
+
+ _updatePath: function () {
+ if (this._checkIfEmpty()) { return; }
+
+ var ctx = this._ctx,
+ options = this.options;
+
+ this._drawPath();
+ ctx.save();
+ this._updateStyle();
+
+ if (options.fill) {
+ ctx.globalAlpha = options.fillOpacity;
+ ctx.fill(options.fillRule || 'evenodd');
+ }
+
+ if (options.stroke) {
+ ctx.globalAlpha = options.opacity;
+ ctx.stroke();
+ }
+
+ ctx.restore();
+
+ // TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature
+ },
+
+ _initEvents: function () {
+ if (this.options.clickable) {
+ this._map.on('mousemove', this._onMouseMove, this);
+ this._map.on('click dblclick contextmenu', this._fireMouseEvent, this);
+ }
+ },
+
+ _fireMouseEvent: function (e) {
+ if (this._containsPoint(e.layerPoint)) {
+ this.fire(e.type, e);
+ }
+ },
+
+ _onMouseMove: function (e) {
+ if (!this._map || this._map._animatingZoom) { return; }
+
+ // TODO don't do on each move
+ if (this._containsPoint(e.layerPoint)) {
+ this._ctx.canvas.style.cursor = 'pointer';
+ this._mouseInside = true;
+ this.fire('mouseover', e);
+
+ } else if (this._mouseInside) {
+ this._ctx.canvas.style.cursor = '';
+ this._mouseInside = false;
+ this.fire('mouseout', e);
+ }
+ }
+});
+
+L.Map.include((L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? {} : {
+ _initPathRoot: function () {
+ var root = this._pathRoot,
+ ctx;
+
+ if (!root) {
+ root = this._pathRoot = document.createElement('canvas');
+ root.style.position = 'absolute';
+ ctx = this._canvasCtx = root.getContext('2d');
+
+ ctx.lineCap = 'round';
+ ctx.lineJoin = 'round';
+
+ this._panes.overlayPane.appendChild(root);
+
+ if (this.options.zoomAnimation) {
+ this._pathRoot.className = 'leaflet-zoom-animated';
+ this.on('zoomanim', this._animatePathZoom);
+ this.on('zoomend', this._endPathZoom);
+ }
+ this.on('moveend', this._updateCanvasViewport);
+ this._updateCanvasViewport();
+ }
+ },
+
+ _updateCanvasViewport: function () {
+ // don't redraw while zooming. See _updateSvgViewport for more details
+ if (this._pathZooming) { return; }
+ this._updatePathViewport();
+
+ var vp = this._pathViewport,
+ min = vp.min,
+ size = vp.max.subtract(min),
+ root = this._pathRoot;
+
+ //TODO check if this works properly on mobile webkit
+ L.DomUtil.setPosition(root, min);
+ root.width = size.x;
+ root.height = size.y;
+ root.getContext('2d').translate(-min.x, -min.y);
+ }
+});
+
+
+/*
+ * L.LineUtil contains different utility functions for line segments
+ * and polylines (clipping, simplification, distances, etc.)
+ */
+
+/*jshint bitwise:false */ // allow bitwise operations for this file
+
+L.LineUtil = {
+
+ // Simplify polyline with vertex reduction and Douglas-Peucker simplification.
+ // Improves rendering performance dramatically by lessening the number of points to draw.
+
+ simplify: function (/*Point[]*/ points, /*Number*/ tolerance) {
+ if (!tolerance || !points.length) {
+ return points.slice();
+ }
+
+ var sqTolerance = tolerance * tolerance;
+
+ // stage 1: vertex reduction
+ points = this._reducePoints(points, sqTolerance);
+
+ // stage 2: Douglas-Peucker simplification
+ points = this._simplifyDP(points, sqTolerance);
+
+ return points;
+ },
+
+ // distance from a point to a segment between two points
+ pointToSegmentDistance: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
+ return Math.sqrt(this._sqClosestPointOnSegment(p, p1, p2, true));
+ },
+
+ closestPointOnSegment: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
+ return this._sqClosestPointOnSegment(p, p1, p2);
+ },
+
+ // Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm
+ _simplifyDP: function (points, sqTolerance) {
+
+ var len = points.length,
+ ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,
+ markers = new ArrayConstructor(len);
+
+ markers[0] = markers[len - 1] = 1;
+
+ this._simplifyDPStep(points, markers, sqTolerance, 0, len - 1);
+
+ var i,
+ newPoints = [];
+
+ for (i = 0; i < len; i++) {
+ if (markers[i]) {
+ newPoints.push(points[i]);
+ }
+ }
+
+ return newPoints;
+ },
+
+ _simplifyDPStep: function (points, markers, sqTolerance, first, last) {
+
+ var maxSqDist = 0,
+ index, i, sqDist;
+
+ for (i = first + 1; i <= last - 1; i++) {
+ sqDist = this._sqClosestPointOnSegment(points[i], points[first], points[last], true);
+
+ if (sqDist > maxSqDist) {
+ index = i;
+ maxSqDist = sqDist;
+ }
+ }
+
+ if (maxSqDist > sqTolerance) {
+ markers[index] = 1;
+
+ this._simplifyDPStep(points, markers, sqTolerance, first, index);
+ this._simplifyDPStep(points, markers, sqTolerance, index, last);
+ }
+ },
+
+ // reduce points that are too close to each other to a single point
+ _reducePoints: function (points, sqTolerance) {
+ var reducedPoints = [points[0]];
+
+ for (var i = 1, prev = 0, len = points.length; i < len; i++) {
+ if (this._sqDist(points[i], points[prev]) > sqTolerance) {
+ reducedPoints.push(points[i]);
+ prev = i;
+ }
+ }
+ if (prev < len - 1) {
+ reducedPoints.push(points[len - 1]);
+ }
+ return reducedPoints;
+ },
+
+ // Cohen-Sutherland line clipping algorithm.
+ // Used to avoid rendering parts of a polyline that are not currently visible.
+
+ clipSegment: function (a, b, bounds, useLastCode) {
+ var codeA = useLastCode ? this._lastCode : this._getBitCode(a, bounds),
+ codeB = this._getBitCode(b, bounds),
+
+ codeOut, p, newCode;
+
+ // save 2nd code to avoid calculating it on the next segment
+ this._lastCode = codeB;
+
+ while (true) {
+ // if a,b is inside the clip window (trivial accept)
+ if (!(codeA | codeB)) {
+ return [a, b];
+ // if a,b is outside the clip window (trivial reject)
+ } else if (codeA & codeB) {
+ return false;
+ // other cases
+ } else {
+ codeOut = codeA || codeB;
+ p = this._getEdgeIntersection(a, b, codeOut, bounds);
+ newCode = this._getBitCode(p, bounds);
+
+ if (codeOut === codeA) {
+ a = p;
+ codeA = newCode;
+ } else {
+ b = p;
+ codeB = newCode;
+ }
+ }
+ }
+ },
+
+ _getEdgeIntersection: function (a, b, code, bounds) {
+ var dx = b.x - a.x,
+ dy = b.y - a.y,
+ min = bounds.min,
+ max = bounds.max;
+
+ if (code & 8) { // top
+ return new L.Point(a.x + dx * (max.y - a.y) / dy, max.y);
+ } else if (code & 4) { // bottom
+ return new L.Point(a.x + dx * (min.y - a.y) / dy, min.y);
+ } else if (code & 2) { // right
+ return new L.Point(max.x, a.y + dy * (max.x - a.x) / dx);
+ } else if (code & 1) { // left
+ return new L.Point(min.x, a.y + dy * (min.x - a.x) / dx);
+ }
+ },
+
+ _getBitCode: function (/*Point*/ p, bounds) {
+ var code = 0;
+
+ if (p.x < bounds.min.x) { // left
+ code |= 1;
+ } else if (p.x > bounds.max.x) { // right
+ code |= 2;
+ }
+ if (p.y < bounds.min.y) { // bottom
+ code |= 4;
+ } else if (p.y > bounds.max.y) { // top
+ code |= 8;
+ }
+
+ return code;
+ },
+
+ // square distance (to avoid unnecessary Math.sqrt calls)
+ _sqDist: function (p1, p2) {
+ var dx = p2.x - p1.x,
+ dy = p2.y - p1.y;
+ return dx * dx + dy * dy;
+ },
+
+ // return closest point on segment or distance to that point
+ _sqClosestPointOnSegment: function (p, p1, p2, sqDist) {
+ var x = p1.x,
+ y = p1.y,
+ dx = p2.x - x,
+ dy = p2.y - y,
+ dot = dx * dx + dy * dy,
+ t;
+
+ if (dot > 0) {
+ t = ((p.x - x) * dx + (p.y - y) * dy) / dot;
+
+ if (t > 1) {
+ x = p2.x;
+ y = p2.y;
+ } else if (t > 0) {
+ x += dx * t;
+ y += dy * t;
+ }
+ }
+
+ dx = p.x - x;
+ dy = p.y - y;
+
+ return sqDist ? dx * dx + dy * dy : new L.Point(x, y);
+ }
+};
+
+
+/*
+ * L.Polyline is used to display polylines on a map.
+ */
+
+L.Polyline = L.Path.extend({
+ initialize: function (latlngs, options) {
+ L.Path.prototype.initialize.call(this, options);
+
+ this._latlngs = this._convertLatLngs(latlngs);
+ },
+
+ options: {
+ // how much to simplify the polyline on each zoom level
+ // more = better performance and smoother look, less = more accurate
+ smoothFactor: 1.0,
+ noClip: false
+ },
+
+ projectLatlngs: function () {
+ this._originalPoints = [];
+
+ for (var i = 0, len = this._latlngs.length; i < len; i++) {
+ this._originalPoints[i] = this._map.latLngToLayerPoint(this._latlngs[i]);
+ }
+ },
+
+ getPathString: function () {
+ for (var i = 0, len = this._parts.length, str = ''; i < len; i++) {
+ str += this._getPathPartStr(this._parts[i]);
+ }
+ return str;
+ },
+
+ getLatLngs: function () {
+ return this._latlngs;
+ },
+
+ setLatLngs: function (latlngs) {
+ this._latlngs = this._convertLatLngs(latlngs);
+ return this.redraw();
+ },
+
+ addLatLng: function (latlng) {
+ this._latlngs.push(L.latLng(latlng));
+ return this.redraw();
+ },
+
+ spliceLatLngs: function () { // (Number index, Number howMany)
+ var removed = [].splice.apply(this._latlngs, arguments);
+ this._convertLatLngs(this._latlngs, true);
+ this.redraw();
+ return removed;
+ },
+
+ closestLayerPoint: function (p) {
+ var minDistance = Infinity, parts = this._parts, p1, p2, minPoint = null;
+
+ for (var j = 0, jLen = parts.length; j < jLen; j++) {
+ var points = parts[j];
+ for (var i = 1, len = points.length; i < len; i++) {
+ p1 = points[i - 1];
+ p2 = points[i];
+ var sqDist = L.LineUtil._sqClosestPointOnSegment(p, p1, p2, true);
+ if (sqDist < minDistance) {
+ minDistance = sqDist;
+ minPoint = L.LineUtil._sqClosestPointOnSegment(p, p1, p2);
+ }
+ }
+ }
+ if (minPoint) {
+ minPoint.distance = Math.sqrt(minDistance);
+ }
+ return minPoint;
+ },
+
+ getBounds: function () {
+ return new L.LatLngBounds(this.getLatLngs());
+ },
+
+ _convertLatLngs: function (latlngs, overwrite) {
+ var i, len, target = overwrite ? latlngs : [];
+
+ for (i = 0, len = latlngs.length; i < len; i++) {
+ if (L.Util.isArray(latlngs[i]) && typeof latlngs[i][0] !== 'number') {
+ return;
+ }
+ target[i] = L.latLng(latlngs[i]);
+ }
+ return target;
+ },
+
+ _initEvents: function () {
+ L.Path.prototype._initEvents.call(this);
+ },
+
+ _getPathPartStr: function (points) {
+ var round = L.Path.VML;
+
+ for (var j = 0, len2 = points.length, str = '', p; j < len2; j++) {
+ p = points[j];
+ if (round) {
+ p._round();
+ }
+ str += (j ? 'L' : 'M') + p.x + ' ' + p.y;
+ }
+ return str;
+ },
+
+ _clipPoints: function () {
+ var points = this._originalPoints,
+ len = points.length,
+ i, k, segment;
+
+ if (this.options.noClip) {
+ this._parts = [points];
+ return;
+ }
+
+ this._parts = [];
+
+ var parts = this._parts,
+ vp = this._map._pathViewport,
+ lu = L.LineUtil;
+
+ for (i = 0, k = 0; i < len - 1; i++) {
+ segment = lu.clipSegment(points[i], points[i + 1], vp, i);
+ if (!segment) {
+ continue;
+ }
+
+ parts[k] = parts[k] || [];
+ parts[k].push(segment[0]);
+
+ // if segment goes out of screen, or it's the last one, it's the end of the line part
+ if ((segment[1] !== points[i + 1]) || (i === len - 2)) {
+ parts[k].push(segment[1]);
+ k++;
+ }
+ }
+ },
+
+ // simplify each clipped part of the polyline
+ _simplifyPoints: function () {
+ var parts = this._parts,
+ lu = L.LineUtil;
+
+ for (var i = 0, len = parts.length; i < len; i++) {
+ parts[i] = lu.simplify(parts[i], this.options.smoothFactor);
+ }
+ },
+
+ _updatePath: function () {
+ if (!this._map) { return; }
+
+ this._clipPoints();
+ this._simplifyPoints();
+
+ L.Path.prototype._updatePath.call(this);
+ }
+});
+
+L.polyline = function (latlngs, options) {
+ return new L.Polyline(latlngs, options);
+};
+
+
+/*
+ * L.PolyUtil contains utility functions for polygons (clipping, etc.).
+ */
+
+/*jshint bitwise:false */ // allow bitwise operations here
+
+L.PolyUtil = {};
+
+/*
+ * Sutherland-Hodgeman polygon clipping algorithm.
+ * Used to avoid rendering parts of a polygon that are not currently visible.
+ */
+L.PolyUtil.clipPolygon = function (points, bounds) {
+ var clippedPoints,
+ edges = [1, 4, 2, 8],
+ i, j, k,
+ a, b,
+ len, edge, p,
+ lu = L.LineUtil;
+
+ for (i = 0, len = points.length; i < len; i++) {
+ points[i]._code = lu._getBitCode(points[i], bounds);
+ }
+
+ // for each edge (left, bottom, right, top)
+ for (k = 0; k < 4; k++) {
+ edge = edges[k];
+ clippedPoints = [];
+
+ for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {
+ a = points[i];
+ b = points[j];
+
+ // if a is inside the clip window
+ if (!(a._code & edge)) {
+ // if b is outside the clip window (a->b goes out of screen)
+ if (b._code & edge) {
+ p = lu._getEdgeIntersection(b, a, edge, bounds);
+ p._code = lu._getBitCode(p, bounds);
+ clippedPoints.push(p);
+ }
+ clippedPoints.push(a);
+
+ // else if b is inside the clip window (a->b enters the screen)
+ } else if (!(b._code & edge)) {
+ p = lu._getEdgeIntersection(b, a, edge, bounds);
+ p._code = lu._getBitCode(p, bounds);
+ clippedPoints.push(p);
+ }
+ }
+ points = clippedPoints;
+ }
+
+ return points;
+};
+
+
+/*
+ * L.Polygon is used to display polygons on a map.
+ */
+
+L.Polygon = L.Polyline.extend({
+ options: {
+ fill: true
+ },
+
+ initialize: function (latlngs, options) {
+ L.Polyline.prototype.initialize.call(this, latlngs, options);
+ this._initWithHoles(latlngs);
+ },
+
+ _initWithHoles: function (latlngs) {
+ var i, len, hole;
+ if (latlngs && L.Util.isArray(latlngs[0]) && (typeof latlngs[0][0] !== 'number')) {
+ this._latlngs = this._convertLatLngs(latlngs[0]);
+ this._holes = latlngs.slice(1);
+
+ for (i = 0, len = this._holes.length; i < len; i++) {
+ hole = this._holes[i] = this._convertLatLngs(this._holes[i]);
+ if (hole[0].equals(hole[hole.length - 1])) {
+ hole.pop();
+ }
+ }
+ }
+
+ // filter out last point if its equal to the first one
+ latlngs = this._latlngs;
+
+ if (latlngs.length >= 2 && latlngs[0].equals(latlngs[latlngs.length - 1])) {
+ latlngs.pop();
+ }
+ },
+
+ projectLatlngs: function () {
+ L.Polyline.prototype.projectLatlngs.call(this);
+
+ // project polygon holes points
+ // TODO move this logic to Polyline to get rid of duplication
+ this._holePoints = [];
+
+ if (!this._holes) { return; }
+
+ var i, j, len, len2;
+
+ for (i = 0, len = this._holes.length; i < len; i++) {
+ this._holePoints[i] = [];
+
+ for (j = 0, len2 = this._holes[i].length; j < len2; j++) {
+ this._holePoints[i][j] = this._map.latLngToLayerPoint(this._holes[i][j]);
+ }
+ }
+ },
+
+ setLatLngs: function (latlngs) {
+ if (latlngs && L.Util.isArray(latlngs[0]) && (typeof latlngs[0][0] !== 'number')) {
+ this._initWithHoles(latlngs);
+ return this.redraw();
+ } else {
+ return L.Polyline.prototype.setLatLngs.call(this, latlngs);
+ }
+ },
+
+ _clipPoints: function () {
+ var points = this._originalPoints,
+ newParts = [];
+
+ this._parts = [points].concat(this._holePoints);
+
+ if (this.options.noClip) { return; }
+
+ for (var i = 0, len = this._parts.length; i < len; i++) {
+ var clipped = L.PolyUtil.clipPolygon(this._parts[i], this._map._pathViewport);
+ if (clipped.length) {
+ newParts.push(clipped);
+ }
+ }
+
+ this._parts = newParts;
+ },
+
+ _getPathPartStr: function (points) {
+ var str = L.Polyline.prototype._getPathPartStr.call(this, points);
+ return str + (L.Browser.svg ? 'z' : 'x');
+ }
+});
+
+L.polygon = function (latlngs, options) {
+ return new L.Polygon(latlngs, options);
+};
+
+
+/*
+ * Contains L.MultiPolyline and L.MultiPolygon layers.
+ */
+
+(function () {
+ function createMulti(Klass) {
+
+ return L.FeatureGroup.extend({
+
+ initialize: function (latlngs, options) {
+ this._layers = {};
+ this._options = options;
+ this.setLatLngs(latlngs);
+ },
+
+ setLatLngs: function (latlngs) {
+ var i = 0,
+ len = latlngs.length;
+
+ this.eachLayer(function (layer) {
+ if (i < len) {
+ layer.setLatLngs(latlngs[i++]);
+ } else {
+ this.removeLayer(layer);
+ }
+ }, this);
+
+ while (i < len) {
+ this.addLayer(new Klass(latlngs[i++], this._options));
+ }
+
+ return this;
+ },
+
+ getLatLngs: function () {
+ var latlngs = [];
+
+ this.eachLayer(function (layer) {
+ latlngs.push(layer.getLatLngs());
+ });
+
+ return latlngs;
+ }
+ });
+ }
+
+ L.MultiPolyline = createMulti(L.Polyline);
+ L.MultiPolygon = createMulti(L.Polygon);
+
+ L.multiPolyline = function (latlngs, options) {
+ return new L.MultiPolyline(latlngs, options);
+ };
+
+ L.multiPolygon = function (latlngs, options) {
+ return new L.MultiPolygon(latlngs, options);
+ };
+}());
+
+
+/*
+ * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.
+ */
+
+L.Rectangle = L.Polygon.extend({
+ initialize: function (latLngBounds, options) {
+ L.Polygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);
+ },
+
+ setBounds: function (latLngBounds) {
+ this.setLatLngs(this._boundsToLatLngs(latLngBounds));
+ },
+
+ _boundsToLatLngs: function (latLngBounds) {
+ latLngBounds = L.latLngBounds(latLngBounds);
+ return [
+ latLngBounds.getSouthWest(),
+ latLngBounds.getNorthWest(),
+ latLngBounds.getNorthEast(),
+ latLngBounds.getSouthEast()
+ ];
+ }
+});
+
+L.rectangle = function (latLngBounds, options) {
+ return new L.Rectangle(latLngBounds, options);
+};
+
+
+/*
+ * L.Circle is a circle overlay (with a certain radius in meters).
+ */
+
+L.Circle = L.Path.extend({
+ initialize: function (latlng, radius, options) {
+ L.Path.prototype.initialize.call(this, options);
+
+ this._latlng = L.latLng(latlng);
+ this._mRadius = radius;
+ },
+
+ options: {
+ fill: true
+ },
+
+ setLatLng: function (latlng) {
+ this._latlng = L.latLng(latlng);
+ return this.redraw();
+ },
+
+ setRadius: function (radius) {
+ this._mRadius = radius;
+ return this.redraw();
+ },
+
+ projectLatlngs: function () {
+ var lngRadius = this._getLngRadius(),
+ latlng = this._latlng,
+ pointLeft = this._map.latLngToLayerPoint([latlng.lat, latlng.lng - lngRadius]);
+
+ this._point = this._map.latLngToLayerPoint(latlng);
+ this._radius = Math.max(this._point.x - pointLeft.x, 1);
+ },
+
+ getBounds: function () {
+ var lngRadius = this._getLngRadius(),
+ latRadius = (this._mRadius / 40075017) * 360,
+ latlng = this._latlng;
+
+ return new L.LatLngBounds(
+ [latlng.lat - latRadius, latlng.lng - lngRadius],
+ [latlng.lat + latRadius, latlng.lng + lngRadius]);
+ },
+
+ getLatLng: function () {
+ return this._latlng;
+ },
+
+ getPathString: function () {
+ var p = this._point,
+ r = this._radius;
+
+ if (this._checkIfEmpty()) {
+ return '';
+ }
+
+ if (L.Browser.svg) {
+ return 'M' + p.x + ',' + (p.y - r) +
+ 'A' + r + ',' + r + ',0,1,1,' +
+ (p.x - 0.1) + ',' + (p.y - r) + ' z';
+ } else {
+ p._round();
+ r = Math.round(r);
+ return 'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r + ' 0,' + (65535 * 360);
+ }
+ },
+
+ getRadius: function () {
+ return this._mRadius;
+ },
+
+ // TODO Earth hardcoded, move into projection code!
+
+ _getLatRadius: function () {
+ return (this._mRadius / 40075017) * 360;
+ },
+
+ _getLngRadius: function () {
+ return this._getLatRadius() / Math.cos(L.LatLng.DEG_TO_RAD * this._latlng.lat);
+ },
+
+ _checkIfEmpty: function () {
+ if (!this._map) {
+ return false;
+ }
+ var vp = this._map._pathViewport,
+ r = this._radius,
+ p = this._point;
+
+ return p.x - r > vp.max.x || p.y - r > vp.max.y ||
+ p.x + r < vp.min.x || p.y + r < vp.min.y;
+ }
+});
+
+L.circle = function (latlng, radius, options) {
+ return new L.Circle(latlng, radius, options);
+};
+
+
+/*
+ * L.CircleMarker is a circle overlay with a permanent pixel radius.
+ */
+
+L.CircleMarker = L.Circle.extend({
+ options: {
+ radius: 10,
+ weight: 2
+ },
+
+ initialize: function (latlng, options) {
+ L.Circle.prototype.initialize.call(this, latlng, null, options);
+ this._radius = this.options.radius;
+ },
+
+ projectLatlngs: function () {
+ this._point = this._map.latLngToLayerPoint(this._latlng);
+ },
+
+ _updateStyle : function () {
+ L.Circle.prototype._updateStyle.call(this);
+ this.setRadius(this.options.radius);
+ },
+
+ setLatLng: function (latlng) {
+ L.Circle.prototype.setLatLng.call(this, latlng);
+ if (this._popup && this._popup._isOpen) {
+ this._popup.setLatLng(latlng);
+ }
+ return this;
+ },
+
+ setRadius: function (radius) {
+ this.options.radius = this._radius = radius;
+ return this.redraw();
+ },
+
+ getRadius: function () {
+ return this._radius;
+ }
+});
+
+L.circleMarker = function (latlng, options) {
+ return new L.CircleMarker(latlng, options);
+};
+
+
+/*
+ * Extends L.Polyline to be able to manually detect clicks on Canvas-rendered polylines.
+ */
+
+L.Polyline.include(!L.Path.CANVAS ? {} : {
+ _containsPoint: function (p, closed) {
+ var i, j, k, len, len2, dist, part,
+ w = this.options.weight / 2;
+
+ if (L.Browser.touch) {
+ w += 10; // polyline click tolerance on touch devices
+ }
+
+ for (i = 0, len = this._parts.length; i < len; i++) {
+ part = this._parts[i];
+ for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
+ if (!closed && (j === 0)) {
+ continue;
+ }
+
+ dist = L.LineUtil.pointToSegmentDistance(p, part[k], part[j]);
+
+ if (dist <= w) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+});
+
+
+/*
+ * Extends L.Polygon to be able to manually detect clicks on Canvas-rendered polygons.
+ */
+
+L.Polygon.include(!L.Path.CANVAS ? {} : {
+ _containsPoint: function (p) {
+ var inside = false,
+ part, p1, p2,
+ i, j, k,
+ len, len2;
+
+ // TODO optimization: check if within bounds first
+
+ if (L.Polyline.prototype._containsPoint.call(this, p, true)) {
+ // click on polygon border
+ return true;
+ }
+
+ // ray casting algorithm for detecting if point is in polygon
+
+ for (i = 0, len = this._parts.length; i < len; i++) {
+ part = this._parts[i];
+
+ for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
+ p1 = part[j];
+ p2 = part[k];
+
+ if (((p1.y > p.y) !== (p2.y > p.y)) &&
+ (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {
+ inside = !inside;
+ }
+ }
+ }
+
+ return inside;
+ }
+});
+
+
+/*
+ * Extends L.Circle with Canvas-specific code.
+ */
+
+L.Circle.include(!L.Path.CANVAS ? {} : {
+ _drawPath: function () {
+ var p = this._point;
+ this._ctx.beginPath();
+ this._ctx.arc(p.x, p.y, this._radius, 0, Math.PI * 2, false);
+ },
+
+ _containsPoint: function (p) {
+ var center = this._point,
+ w2 = this.options.stroke ? this.options.weight / 2 : 0;
+
+ return (p.distanceTo(center) <= this._radius + w2);
+ }
+});
+
+
+/*
+ * CircleMarker canvas specific drawing parts.
+ */
+
+L.CircleMarker.include(!L.Path.CANVAS ? {} : {
+ _updateStyle: function () {
+ L.Path.prototype._updateStyle.call(this);
+ }
+});
+
+
+/*
+ * L.GeoJSON turns any GeoJSON data into a Leaflet layer.
+ */
+
+L.GeoJSON = L.FeatureGroup.extend({
+
+ initialize: function (geojson, options) {
+ L.setOptions(this, options);
+
+ this._layers = {};
+
+ if (geojson) {
+ this.addData(geojson);
+ }
+ },
+
+ addData: function (geojson) {
+ var features = L.Util.isArray(geojson) ? geojson : geojson.features,
+ i, len, feature;
+
+ if (features) {
+ for (i = 0, len = features.length; i < len; i++) {
+ // Only add this if geometry or geometries are set and not null
+ feature = features[i];
+ if (feature.geometries || feature.geometry || feature.features || feature.coordinates) {
+ this.addData(features[i]);
+ }
+ }
+ return this;
+ }
+
+ var options = this.options;
+
+ if (options.filter && !options.filter(geojson)) { return; }
+
+ var layer = L.GeoJSON.geometryToLayer(geojson, options.pointToLayer, options.coordsToLatLng, options);
+ layer.feature = L.GeoJSON.asFeature(geojson);
+
+ layer.defaultOptions = layer.options;
+ this.resetStyle(layer);
+
+ if (options.onEachFeature) {
+ options.onEachFeature(geojson, layer);
+ }
+
+ return this.addLayer(layer);
+ },
+
+ resetStyle: function (layer) {
+ var style = this.options.style;
+ if (style) {
+ // reset any custom styles
+ L.Util.extend(layer.options, layer.defaultOptions);
+
+ this._setLayerStyle(layer, style);
+ }
+ },
+
+ setStyle: function (style) {
+ this.eachLayer(function (layer) {
+ this._setLayerStyle(layer, style);
+ }, this);
+ },
+
+ _setLayerStyle: function (layer, style) {
+ if (typeof style === 'function') {
+ style = style(layer.feature);
+ }
+ if (layer.setStyle) {
+ layer.setStyle(style);
+ }
+ }
+});
+
+L.extend(L.GeoJSON, {
+ geometryToLayer: function (geojson, pointToLayer, coordsToLatLng, vectorOptions) {
+ var geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,
+ coords = geometry.coordinates,
+ layers = [],
+ latlng, latlngs, i, len;
+
+ coordsToLatLng = coordsToLatLng || this.coordsToLatLng;
+
+ switch (geometry.type) {
+ case 'Point':
+ latlng = coordsToLatLng(coords);
+ return pointToLayer ? pointToLayer(geojson, latlng) : new L.Marker(latlng);
+
+ case 'MultiPoint':
+ for (i = 0, len = coords.length; i < len; i++) {
+ latlng = coordsToLatLng(coords[i]);
+ layers.push(pointToLayer ? pointToLayer(geojson, latlng) : new L.Marker(latlng));
+ }
+ return new L.FeatureGroup(layers);
+
+ case 'LineString':
+ latlngs = this.coordsToLatLngs(coords, 0, coordsToLatLng);
+ return new L.Polyline(latlngs, vectorOptions);
+
+ case 'Polygon':
+ if (coords.length === 2 && !coords[1].length) {
+ throw new Error('Invalid GeoJSON object.');
+ }
+ latlngs = this.coordsToLatLngs(coords, 1, coordsToLatLng);
+ return new L.Polygon(latlngs, vectorOptions);
+
+ case 'MultiLineString':
+ latlngs = this.coordsToLatLngs(coords, 1, coordsToLatLng);
+ return new L.MultiPolyline(latlngs, vectorOptions);
+
+ case 'MultiPolygon':
+ latlngs = this.coordsToLatLngs(coords, 2, coordsToLatLng);
+ return new L.MultiPolygon(latlngs, vectorOptions);
+
+ case 'GeometryCollection':
+ for (i = 0, len = geometry.geometries.length; i < len; i++) {
+
+ layers.push(this.geometryToLayer({
+ geometry: geometry.geometries[i],
+ type: 'Feature',
+ properties: geojson.properties
+ }, pointToLayer, coordsToLatLng, vectorOptions));
+ }
+ return new L.FeatureGroup(layers);
+
+ default:
+ throw new Error('Invalid GeoJSON object.');
+ }
+ },
+
+ coordsToLatLng: function (coords) { // (Array[, Boolean]) -> LatLng
+ return new L.LatLng(coords[1], coords[0], coords[2]);
+ },
+
+ coordsToLatLngs: function (coords, levelsDeep, coordsToLatLng) { // (Array[, Number, Function]) -> Array
+ var latlng, i, len,
+ latlngs = [];
+
+ for (i = 0, len = coords.length; i < len; i++) {
+ latlng = levelsDeep ?
+ this.coordsToLatLngs(coords[i], levelsDeep - 1, coordsToLatLng) :
+ (coordsToLatLng || this.coordsToLatLng)(coords[i]);
+
+ latlngs.push(latlng);
+ }
+
+ return latlngs;
+ },
+
+ latLngToCoords: function (latlng) {
+ var coords = [latlng.lng, latlng.lat];
+
+ if (latlng.alt !== undefined) {
+ coords.push(latlng.alt);
+ }
+ return coords;
+ },
+
+ latLngsToCoords: function (latLngs) {
+ var coords = [];
+
+ for (var i = 0, len = latLngs.length; i < len; i++) {
+ coords.push(L.GeoJSON.latLngToCoords(latLngs[i]));
+ }
+
+ return coords;
+ },
+
+ getFeature: function (layer, newGeometry) {
+ return layer.feature ? L.extend({}, layer.feature, {geometry: newGeometry}) : L.GeoJSON.asFeature(newGeometry);
+ },
+
+ asFeature: function (geoJSON) {
+ if (geoJSON.type === 'Feature') {
+ return geoJSON;
+ }
+
+ return {
+ type: 'Feature',
+ properties: {},
+ geometry: geoJSON
+ };
+ }
+});
+
+var PointToGeoJSON = {
+ toGeoJSON: function () {
+ return L.GeoJSON.getFeature(this, {
+ type: 'Point',
+ coordinates: L.GeoJSON.latLngToCoords(this.getLatLng())
+ });
+ }
+};
+
+L.Marker.include(PointToGeoJSON);
+L.Circle.include(PointToGeoJSON);
+L.CircleMarker.include(PointToGeoJSON);
+
+L.Polyline.include({
+ toGeoJSON: function () {
+ return L.GeoJSON.getFeature(this, {
+ type: 'LineString',
+ coordinates: L.GeoJSON.latLngsToCoords(this.getLatLngs())
+ });
+ }
+});
+
+L.Polygon.include({
+ toGeoJSON: function () {
+ var coords = [L.GeoJSON.latLngsToCoords(this.getLatLngs())],
+ i, len, hole;
+
+ coords[0].push(coords[0][0]);
+
+ if (this._holes) {
+ for (i = 0, len = this._holes.length; i < len; i++) {
+ hole = L.GeoJSON.latLngsToCoords(this._holes[i]);
+ hole.push(hole[0]);
+ coords.push(hole);
+ }
+ }
+
+ return L.GeoJSON.getFeature(this, {
+ type: 'Polygon',
+ coordinates: coords
+ });
+ }
+});
+
+(function () {
+ function multiToGeoJSON(type) {
+ return function () {
+ var coords = [];
+
+ this.eachLayer(function (layer) {
+ coords.push(layer.toGeoJSON().geometry.coordinates);
+ });
+
+ return L.GeoJSON.getFeature(this, {
+ type: type,
+ coordinates: coords
+ });
+ };
+ }
+
+ L.MultiPolyline.include({toGeoJSON: multiToGeoJSON('MultiLineString')});
+ L.MultiPolygon.include({toGeoJSON: multiToGeoJSON('MultiPolygon')});
+
+ L.LayerGroup.include({
+ toGeoJSON: function () {
+
+ var geometry = this.feature && this.feature.geometry,
+ jsons = [],
+ json;
+
+ if (geometry && geometry.type === 'MultiPoint') {
+ return multiToGeoJSON('MultiPoint').call(this);
+ }
+
+ var isGeometryCollection = geometry && geometry.type === 'GeometryCollection';
+
+ this.eachLayer(function (layer) {
+ if (layer.toGeoJSON) {
+ json = layer.toGeoJSON();
+ jsons.push(isGeometryCollection ? json.geometry : L.GeoJSON.asFeature(json));
+ }
+ });
+
+ if (isGeometryCollection) {
+ return L.GeoJSON.getFeature(this, {
+ geometries: jsons,
+ type: 'GeometryCollection'
+ });
+ }
+
+ return {
+ type: 'FeatureCollection',
+ features: jsons
+ };
+ }
+ });
+}());
+
+L.geoJson = function (geojson, options) {
+ return new L.GeoJSON(geojson, options);
+};
+
+
+/*
+ * L.DomEvent contains functions for working with DOM events.
+ */
+
+L.DomEvent = {
+ /* inspired by John Resig, Dean Edwards and YUI addEvent implementations */
+ addListener: function (obj, type, fn, context) { // (HTMLElement, String, Function[, Object])
+
+ var id = L.stamp(fn),
+ key = '_leaflet_' + type + id,
+ handler, originalHandler, newType;
+
+ if (obj[key]) { return this; }
+
+ handler = function (e) {
+ return fn.call(context || obj, e || L.DomEvent._getEvent());
+ };
+
+ if (L.Browser.pointer && type.indexOf('touch') === 0) {
+ return this.addPointerListener(obj, type, handler, id);
+ }
+ if (L.Browser.touch && (type === 'dblclick') && this.addDoubleTapListener) {
+ this.addDoubleTapListener(obj, handler, id);
+ }
+
+ if ('addEventListener' in obj) {
+
+ if (type === 'mousewheel') {
+ obj.addEventListener('DOMMouseScroll', handler, false);
+ obj.addEventListener(type, handler, false);
+
+ } else if ((type === 'mouseenter') || (type === 'mouseleave')) {
+
+ originalHandler = handler;
+ newType = (type === 'mouseenter' ? 'mouseover' : 'mouseout');
+
+ handler = function (e) {
+ if (!L.DomEvent._checkMouse(obj, e)) { return; }
+ return originalHandler(e);
+ };
+
+ obj.addEventListener(newType, handler, false);
+
+ } else if (type === 'click' && L.Browser.android) {
+ originalHandler = handler;
+ handler = function (e) {
+ return L.DomEvent._filterClick(e, originalHandler);
+ };
+
+ obj.addEventListener(type, handler, false);
+ } else {
+ obj.addEventListener(type, handler, false);
+ }
+
+ } else if ('attachEvent' in obj) {
+ obj.attachEvent('on' + type, handler);
+ }
+
+ obj[key] = handler;
+
+ return this;
+ },
+
+ removeListener: function (obj, type, fn) { // (HTMLElement, String, Function)
+
+ var id = L.stamp(fn),
+ key = '_leaflet_' + type + id,
+ handler = obj[key];
+
+ if (!handler) { return this; }
+
+ if (L.Browser.pointer && type.indexOf('touch') === 0) {
+ this.removePointerListener(obj, type, id);
+ } else if (L.Browser.touch && (type === 'dblclick') && this.removeDoubleTapListener) {
+ this.removeDoubleTapListener(obj, id);
+
+ } else if ('removeEventListener' in obj) {
+
+ if (type === 'mousewheel') {
+ obj.removeEventListener('DOMMouseScroll', handler, false);
+ obj.removeEventListener(type, handler, false);
+
+ } else if ((type === 'mouseenter') || (type === 'mouseleave')) {
+ obj.removeEventListener((type === 'mouseenter' ? 'mouseover' : 'mouseout'), handler, false);
+ } else {
+ obj.removeEventListener(type, handler, false);
+ }
+ } else if ('detachEvent' in obj) {
+ obj.detachEvent('on' + type, handler);
+ }
+
+ obj[key] = null;
+
+ return this;
+ },
+
+ stopPropagation: function (e) {
+
+ if (e.stopPropagation) {
+ e.stopPropagation();
+ } else {
+ e.cancelBubble = true;
+ }
+ L.DomEvent._skipped(e);
+
+ return this;
+ },
+
+ disableScrollPropagation: function (el) {
+ var stop = L.DomEvent.stopPropagation;
+
+ return L.DomEvent
+ .on(el, 'mousewheel', stop)
+ .on(el, 'MozMousePixelScroll', stop);
+ },
+
+ disableClickPropagation: function (el) {
+ var stop = L.DomEvent.stopPropagation;
+
+ for (var i = L.Draggable.START.length - 1; i >= 0; i--) {
+ L.DomEvent.on(el, L.Draggable.START[i], stop);
+ }
+
+ return L.DomEvent
+ .on(el, 'click', L.DomEvent._fakeStop)
+ .on(el, 'dblclick', stop);
+ },
+
+ preventDefault: function (e) {
+
+ if (e.preventDefault) {
+ e.preventDefault();
+ } else {
+ e.returnValue = false;
+ }
+ return this;
+ },
+
+ stop: function (e) {
+ return L.DomEvent
+ .preventDefault(e)
+ .stopPropagation(e);
+ },
+
+ getMousePosition: function (e, container) {
+ if (!container) {
+ return new L.Point(e.clientX, e.clientY);
+ }
+
+ var rect = container.getBoundingClientRect();
+
+ return new L.Point(
+ e.clientX - rect.left - container.clientLeft,
+ e.clientY - rect.top - container.clientTop);
+ },
+
+ getWheelDelta: function (e) {
+
+ var delta = 0;
+
+ if (e.wheelDelta) {
+ delta = e.wheelDelta / 120;
+ }
+ if (e.detail) {
+ delta = -e.detail / 3;
+ }
+ return delta;
+ },
+
+ _skipEvents: {},
+
+ _fakeStop: function (e) {
+ // fakes stopPropagation by setting a special event flag, checked/reset with L.DomEvent._skipped(e)
+ L.DomEvent._skipEvents[e.type] = true;
+ },
+
+ _skipped: function (e) {
+ var skipped = this._skipEvents[e.type];
+ // reset when checking, as it's only used in map container and propagates outside of the map
+ this._skipEvents[e.type] = false;
+ return skipped;
+ },
+
+ // check if element really left/entered the event target (for mouseenter/mouseleave)
+ _checkMouse: function (el, e) {
+
+ var related = e.relatedTarget;
+
+ if (!related) { return true; }
+
+ try {
+ while (related && (related !== el)) {
+ related = related.parentNode;
+ }
+ } catch (err) {
+ return false;
+ }
+ return (related !== el);
+ },
+
+ _getEvent: function () { // evil magic for IE
+ /*jshint noarg:false */
+ var e = window.event;
+ if (!e) {
+ var caller = arguments.callee.caller;
+ while (caller) {
+ e = caller['arguments'][0];
+ if (e && window.Event === e.constructor) {
+ break;
+ }
+ caller = caller.caller;
+ }
+ }
+ return e;
+ },
+
+ // this is a horrible workaround for a bug in Android where a single touch triggers two click events
+ _filterClick: function (e, handler) {
+ var timeStamp = (e.timeStamp || e.originalEvent.timeStamp),
+ elapsed = L.DomEvent._lastClick && (timeStamp - L.DomEvent._lastClick);
+
+ // are they closer together than 500ms yet more than 100ms?
+ // Android typically triggers them ~300ms apart while multiple listeners
+ // on the same event should be triggered far faster;
+ // or check if click is simulated on the element, and if it is, reject any non-simulated events
+
+ if ((elapsed && elapsed > 100 && elapsed < 500) || (e.target._simulatedClick && !e._simulated)) {
+ L.DomEvent.stop(e);
+ return;
+ }
+ L.DomEvent._lastClick = timeStamp;
+
+ return handler(e);
+ }
+};
+
+L.DomEvent.on = L.DomEvent.addListener;
+L.DomEvent.off = L.DomEvent.removeListener;
+
+
+/*
+ * L.Draggable allows you to add dragging capabilities to any element. Supports mobile devices too.
+ */
+
+L.Draggable = L.Class.extend({
+ includes: L.Mixin.Events,
+
+ statics: {
+ START: L.Browser.touch ? ['touchstart', 'mousedown'] : ['mousedown'],
+ END: {
+ mousedown: 'mouseup',
+ touchstart: 'touchend',
+ pointerdown: 'touchend',
+ MSPointerDown: 'touchend'
+ },
+ MOVE: {
+ mousedown: 'mousemove',
+ touchstart: 'touchmove',
+ pointerdown: 'touchmove',
+ MSPointerDown: 'touchmove'
+ }
+ },
+
+ initialize: function (element, dragStartTarget) {
+ this._element = element;
+ this._dragStartTarget = dragStartTarget || element;
+ },
+
+ enable: function () {
+ if (this._enabled) { return; }
+
+ for (var i = L.Draggable.START.length - 1; i >= 0; i--) {
+ L.DomEvent.on(this._dragStartTarget, L.Draggable.START[i], this._onDown, this);
+ }
+
+ this._enabled = true;
+ },
+
+ disable: function () {
+ if (!this._enabled) { return; }
+
+ for (var i = L.Draggable.START.length - 1; i >= 0; i--) {
+ L.DomEvent.off(this._dragStartTarget, L.Draggable.START[i], this._onDown, this);
+ }
+
+ this._enabled = false;
+ this._moved = false;
+ },
+
+ _onDown: function (e) {
+ this._moved = false;
+
+ if (e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }
+
+ L.DomEvent.stopPropagation(e);
+
+ if (L.Draggable._disabled) { return; }
+
+ L.DomUtil.disableImageDrag();
+ L.DomUtil.disableTextSelection();
+
+ if (this._moving) { return; }
+
+ var first = e.touches ? e.touches[0] : e;
+
+ this._startPoint = new L.Point(first.clientX, first.clientY);
+ this._startPos = this._newPos = L.DomUtil.getPosition(this._element);
+
+ L.DomEvent
+ .on(document, L.Draggable.MOVE[e.type], this._onMove, this)
+ .on(document, L.Draggable.END[e.type], this._onUp, this);
+ },
+
+ _onMove: function (e) {
+ if (e.touches && e.touches.length > 1) {
+ this._moved = true;
+ return;
+ }
+
+ var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),
+ newPoint = new L.Point(first.clientX, first.clientY),
+ offset = newPoint.subtract(this._startPoint);
+
+ if (!offset.x && !offset.y) { return; }
+ if (L.Browser.touch && Math.abs(offset.x) + Math.abs(offset.y) < 3) { return; }
+
+ L.DomEvent.preventDefault(e);
+
+ if (!this._moved) {
+ this.fire('dragstart');
+
+ this._moved = true;
+ this._startPos = L.DomUtil.getPosition(this._element).subtract(offset);
+
+ L.DomUtil.addClass(document.body, 'leaflet-dragging');
+ this._lastTarget = e.target || e.srcElement;
+ L.DomUtil.addClass(this._lastTarget, 'leaflet-drag-target');
+ }
+
+ this._newPos = this._startPos.add(offset);
+ this._moving = true;
+
+ L.Util.cancelAnimFrame(this._animRequest);
+ this._animRequest = L.Util.requestAnimFrame(this._updatePosition, this, true, this._dragStartTarget);
+ },
+
+ _updatePosition: function () {
+ this.fire('predrag');
+ L.DomUtil.setPosition(this._element, this._newPos);
+ this.fire('drag');
+ },
+
+ _onUp: function () {
+ L.DomUtil.removeClass(document.body, 'leaflet-dragging');
+
+ if (this._lastTarget) {
+ L.DomUtil.removeClass(this._lastTarget, 'leaflet-drag-target');
+ this._lastTarget = null;
+ }
+
+ for (var i in L.Draggable.MOVE) {
+ L.DomEvent
+ .off(document, L.Draggable.MOVE[i], this._onMove)
+ .off(document, L.Draggable.END[i], this._onUp);
+ }
+
+ L.DomUtil.enableImageDrag();
+ L.DomUtil.enableTextSelection();
+
+ if (this._moved && this._moving) {
+ // ensure drag is not fired after dragend
+ L.Util.cancelAnimFrame(this._animRequest);
+
+ this.fire('dragend', {
+ distance: this._newPos.distanceTo(this._startPos)
+ });
+ }
+
+ this._moving = false;
+ }
+});
+
+
+/*
+ L.Handler is a base class for handler classes that are used internally to inject
+ interaction features like dragging to classes like Map and Marker.
+*/
+
+L.Handler = L.Class.extend({
+ initialize: function (map) {
+ this._map = map;
+ },
+
+ enable: function () {
+ if (this._enabled) { return; }
+
+ this._enabled = true;
+ this.addHooks();
+ },
+
+ disable: function () {
+ if (!this._enabled) { return; }
+
+ this._enabled = false;
+ this.removeHooks();
+ },
+
+ enabled: function () {
+ return !!this._enabled;
+ }
+});
+
+
+/*
+ * L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default.
+ */
+
+L.Map.mergeOptions({
+ dragging: true,
+
+ inertia: !L.Browser.android23,
+ inertiaDeceleration: 3400, // px/s^2
+ inertiaMaxSpeed: Infinity, // px/s
+ inertiaThreshold: L.Browser.touch ? 32 : 18, // ms
+ easeLinearity: 0.25,
+
+ // TODO refactor, move to CRS
+ worldCopyJump: false
+});
+
+L.Map.Drag = L.Handler.extend({
+ addHooks: function () {
+ if (!this._draggable) {
+ var map = this._map;
+
+ this._draggable = new L.Draggable(map._mapPane, map._container);
+
+ this._draggable.on({
+ 'dragstart': this._onDragStart,
+ 'drag': this._onDrag,
+ 'dragend': this._onDragEnd
+ }, this);
+
+ if (map.options.worldCopyJump) {
+ this._draggable.on('predrag', this._onPreDrag, this);
+ map.on('viewreset', this._onViewReset, this);
+
+ map.whenReady(this._onViewReset, this);
+ }
+ }
+ this._draggable.enable();
+ },
+
+ removeHooks: function () {
+ this._draggable.disable();
+ },
+
+ moved: function () {
+ return this._draggable && this._draggable._moved;
+ },
+
+ _onDragStart: function () {
+ var map = this._map;
+
+ if (map._panAnim) {
+ map._panAnim.stop();
+ }
+
+ map
+ .fire('movestart')
+ .fire('dragstart');
+
+ if (map.options.inertia) {
+ this._positions = [];
+ this._times = [];
+ }
+ },
+
+ _onDrag: function () {
+ if (this._map.options.inertia) {
+ var time = this._lastTime = +new Date(),
+ pos = this._lastPos = this._draggable._newPos;
+
+ this._positions.push(pos);
+ this._times.push(time);
+
+ if (time - this._times[0] > 200) {
+ this._positions.shift();
+ this._times.shift();
+ }
+ }
+
+ this._map
+ .fire('move')
+ .fire('drag');
+ },
+
+ _onViewReset: function () {
+ // TODO fix hardcoded Earth values
+ var pxCenter = this._map.getSize()._divideBy(2),
+ pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);
+
+ this._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;
+ this._worldWidth = this._map.project([0, 180]).x;
+ },
+
+ _onPreDrag: function () {
+ // TODO refactor to be able to adjust map pane position after zoom
+ var worldWidth = this._worldWidth,
+ halfWidth = Math.round(worldWidth / 2),
+ dx = this._initialWorldOffset,
+ x = this._draggable._newPos.x,
+ newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,
+ newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,
+ newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;
+
+ this._draggable._newPos.x = newX;
+ },
+
+ _onDragEnd: function (e) {
+ var map = this._map,
+ options = map.options,
+ delay = +new Date() - this._lastTime,
+
+ noInertia = !options.inertia || delay > options.inertiaThreshold || !this._positions[0];
+
+ map.fire('dragend', e);
+
+ if (noInertia) {
+ map.fire('moveend');
+
+ } else {
+
+ var direction = this._lastPos.subtract(this._positions[0]),
+ duration = (this._lastTime + delay - this._times[0]) / 1000,
+ ease = options.easeLinearity,
+
+ speedVector = direction.multiplyBy(ease / duration),
+ speed = speedVector.distanceTo([0, 0]),
+
+ limitedSpeed = Math.min(options.inertiaMaxSpeed, speed),
+ limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed),
+
+ decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease),
+ offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round();
+
+ if (!offset.x || !offset.y) {
+ map.fire('moveend');
+
+ } else {
+ offset = map._limitOffset(offset, map.options.maxBounds);
+
+ L.Util.requestAnimFrame(function () {
+ map.panBy(offset, {
+ duration: decelerationDuration,
+ easeLinearity: ease,
+ noMoveStart: true
+ });
+ });
+ }
+ }
+ }
+});
+
+L.Map.addInitHook('addHandler', 'dragging', L.Map.Drag);
+
+
+/*
+ * L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default.
+ */
+
+L.Map.mergeOptions({
+ doubleClickZoom: true
+});
+
+L.Map.DoubleClickZoom = L.Handler.extend({
+ addHooks: function () {
+ this._map.on('dblclick', this._onDoubleClick, this);
+ },
+
+ removeHooks: function () {
+ this._map.off('dblclick', this._onDoubleClick, this);
+ },
+
+ _onDoubleClick: function (e) {
+ var map = this._map,
+ zoom = map.getZoom() + (e.originalEvent.shiftKey ? -1 : 1);
+
+ if (map.options.doubleClickZoom === 'center') {
+ map.setZoom(zoom);
+ } else {
+ map.setZoomAround(e.containerPoint, zoom);
+ }
+ }
+});
+
+L.Map.addInitHook('addHandler', 'doubleClickZoom', L.Map.DoubleClickZoom);
+
+
+/*
+ * L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map.
+ */
+
+L.Map.mergeOptions({
+ scrollWheelZoom: true
+});
+
+L.Map.ScrollWheelZoom = L.Handler.extend({
+ addHooks: function () {
+ L.DomEvent.on(this._map._container, 'mousewheel', this._onWheelScroll, this);
+ L.DomEvent.on(this._map._container, 'MozMousePixelScroll', L.DomEvent.preventDefault);
+ this._delta = 0;
+ },
+
+ removeHooks: function () {
+ L.DomEvent.off(this._map._container, 'mousewheel', this._onWheelScroll);
+ L.DomEvent.off(this._map._container, 'MozMousePixelScroll', L.DomEvent.preventDefault);
+ },
+
+ _onWheelScroll: function (e) {
+ var delta = L.DomEvent.getWheelDelta(e);
+
+ this._delta += delta;
+ this._lastMousePos = this._map.mouseEventToContainerPoint(e);
+
+ if (!this._startTime) {
+ this._startTime = +new Date();
+ }
+
+ var left = Math.max(40 - (+new Date() - this._startTime), 0);
+
+ clearTimeout(this._timer);
+ this._timer = setTimeout(L.bind(this._performZoom, this), left);
+
+ L.DomEvent.preventDefault(e);
+ L.DomEvent.stopPropagation(e);
+ },
+
+ _performZoom: function () {
+ var map = this._map,
+ delta = this._delta,
+ zoom = map.getZoom();
+
+ delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);
+ delta = Math.max(Math.min(delta, 4), -4);
+ delta = map._limitZoom(zoom + delta) - zoom;
+
+ this._delta = 0;
+ this._startTime = null;
+
+ if (!delta) { return; }
+
+ if (map.options.scrollWheelZoom === 'center') {
+ map.setZoom(zoom + delta);
+ } else {
+ map.setZoomAround(this._lastMousePos, zoom + delta);
+ }
+ }
+});
+
+L.Map.addInitHook('addHandler', 'scrollWheelZoom', L.Map.ScrollWheelZoom);
+
+
+/*
+ * Extends the event handling code with double tap support for mobile browsers.
+ */
+
+L.extend(L.DomEvent, {
+
+ _touchstart: L.Browser.msPointer ? 'MSPointerDown' : L.Browser.pointer ? 'pointerdown' : 'touchstart',
+ _touchend: L.Browser.msPointer ? 'MSPointerUp' : L.Browser.pointer ? 'pointerup' : 'touchend',
+
+ // inspired by Zepto touch code by Thomas Fuchs
+ addDoubleTapListener: function (obj, handler, id) {
+ var last,
+ doubleTap = false,
+ delay = 250,
+ touch,
+ pre = '_leaflet_',
+ touchstart = this._touchstart,
+ touchend = this._touchend,
+ trackedTouches = [];
+
+ function onTouchStart(e) {
+ var count;
+
+ if (L.Browser.pointer) {
+ trackedTouches.push(e.pointerId);
+ count = trackedTouches.length;
+ } else {
+ count = e.touches.length;
+ }
+ if (count > 1) {
+ return;
+ }
+
+ var now = Date.now(),
+ delta = now - (last || now);
+
+ touch = e.touches ? e.touches[0] : e;
+ doubleTap = (delta > 0 && delta <= delay);
+ last = now;
+ }
+
+ function onTouchEnd(e) {
+ if (L.Browser.pointer) {
+ var idx = trackedTouches.indexOf(e.pointerId);
+ if (idx === -1) {
+ return;
+ }
+ trackedTouches.splice(idx, 1);
+ }
+
+ if (doubleTap) {
+ if (L.Browser.pointer) {
+ // work around .type being readonly with MSPointer* events
+ var newTouch = { },
+ prop;
+
+ // jshint forin:false
+ for (var i in touch) {
+ prop = touch[i];
+ if (typeof prop === 'function') {
+ newTouch[i] = prop.bind(touch);
+ } else {
+ newTouch[i] = prop;
+ }
+ }
+ touch = newTouch;
+ }
+ touch.type = 'dblclick';
+ handler(touch);
+ last = null;
+ }
+ }
+ obj[pre + touchstart + id] = onTouchStart;
+ obj[pre + touchend + id] = onTouchEnd;
+
+ // on pointer we need to listen on the document, otherwise a drag starting on the map and moving off screen
+ // will not come through to us, so we will lose track of how many touches are ongoing
+ var endElement = L.Browser.pointer ? document.documentElement : obj;
+
+ obj.addEventListener(touchstart, onTouchStart, false);
+ endElement.addEventListener(touchend, onTouchEnd, false);
+
+ if (L.Browser.pointer) {
+ endElement.addEventListener(L.DomEvent.POINTER_CANCEL, onTouchEnd, false);
+ }
+
+ return this;
+ },
+
+ removeDoubleTapListener: function (obj, id) {
+ var pre = '_leaflet_';
+
+ obj.removeEventListener(this._touchstart, obj[pre + this._touchstart + id], false);
+ (L.Browser.pointer ? document.documentElement : obj).removeEventListener(
+ this._touchend, obj[pre + this._touchend + id], false);
+
+ if (L.Browser.pointer) {
+ document.documentElement.removeEventListener(L.DomEvent.POINTER_CANCEL, obj[pre + this._touchend + id],
+ false);
+ }
+
+ return this;
+ }
+});
+
+
+/*
+ * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.
+ */
+
+L.extend(L.DomEvent, {
+
+ //static
+ POINTER_DOWN: L.Browser.msPointer ? 'MSPointerDown' : 'pointerdown',
+ POINTER_MOVE: L.Browser.msPointer ? 'MSPointerMove' : 'pointermove',
+ POINTER_UP: L.Browser.msPointer ? 'MSPointerUp' : 'pointerup',
+ POINTER_CANCEL: L.Browser.msPointer ? 'MSPointerCancel' : 'pointercancel',
+
+ _pointers: [],
+ _pointerDocumentListener: false,
+
+ // Provides a touch events wrapper for (ms)pointer events.
+ // Based on changes by veproza https://github.com/CloudMade/Leaflet/pull/1019
+ //ref http://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890
+
+ addPointerListener: function (obj, type, handler, id) {
+
+ switch (type) {
+ case 'touchstart':
+ return this.addPointerListenerStart(obj, type, handler, id);
+ case 'touchend':
+ return this.addPointerListenerEnd(obj, type, handler, id);
+ case 'touchmove':
+ return this.addPointerListenerMove(obj, type, handler, id);
+ default:
+ throw 'Unknown touch event type';
+ }
+ },
+
+ addPointerListenerStart: function (obj, type, handler, id) {
+ var pre = '_leaflet_',
+ pointers = this._pointers;
+
+ var cb = function (e) {
+ if (e.pointerType !== 'mouse' && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) {
+ L.DomEvent.preventDefault(e);
+ }
+
+ var alreadyInArray = false;
+ for (var i = 0; i < pointers.length; i++) {
+ if (pointers[i].pointerId === e.pointerId) {
+ alreadyInArray = true;
+ break;
+ }
+ }
+ if (!alreadyInArray) {
+ pointers.push(e);
+ }
+
+ e.touches = pointers.slice();
+ e.changedTouches = [e];
+
+ handler(e);
+ };
+
+ obj[pre + 'touchstart' + id] = cb;
+ obj.addEventListener(this.POINTER_DOWN, cb, false);
+
+ // need to also listen for end events to keep the _pointers list accurate
+ // this needs to be on the body and never go away
+ if (!this._pointerDocumentListener) {
+ var internalCb = function (e) {
+ for (var i = 0; i < pointers.length; i++) {
+ if (pointers[i].pointerId === e.pointerId) {
+ pointers.splice(i, 1);
+ break;
+ }
+ }
+ };
+ //We listen on the documentElement as any drags that end by moving the touch off the screen get fired there
+ document.documentElement.addEventListener(this.POINTER_UP, internalCb, false);
+ document.documentElement.addEventListener(this.POINTER_CANCEL, internalCb, false);
+
+ this._pointerDocumentListener = true;
+ }
+
+ return this;
+ },
+
+ addPointerListenerMove: function (obj, type, handler, id) {
+ var pre = '_leaflet_',
+ touches = this._pointers;
+
+ function cb(e) {
+
+ // don't fire touch moves when mouse isn't down
+ if ((e.pointerType === e.MSPOINTER_TYPE_MOUSE || e.pointerType === 'mouse') && e.buttons === 0) { return; }
+
+ for (var i = 0; i < touches.length; i++) {
+ if (touches[i].pointerId === e.pointerId) {
+ touches[i] = e;
+ break;
+ }
+ }
+
+ e.touches = touches.slice();
+ e.changedTouches = [e];
+
+ handler(e);
+ }
+
+ obj[pre + 'touchmove' + id] = cb;
+ obj.addEventListener(this.POINTER_MOVE, cb, false);
+
+ return this;
+ },
+
+ addPointerListenerEnd: function (obj, type, handler, id) {
+ var pre = '_leaflet_',
+ touches = this._pointers;
+
+ var cb = function (e) {
+ for (var i = 0; i < touches.length; i++) {
+ if (touches[i].pointerId === e.pointerId) {
+ touches.splice(i, 1);
+ break;
+ }
+ }
+
+ e.touches = touches.slice();
+ e.changedTouches = [e];
+
+ handler(e);
+ };
+
+ obj[pre + 'touchend' + id] = cb;
+ obj.addEventListener(this.POINTER_UP, cb, false);
+ obj.addEventListener(this.POINTER_CANCEL, cb, false);
+
+ return this;
+ },
+
+ removePointerListener: function (obj, type, id) {
+ var pre = '_leaflet_',
+ cb = obj[pre + type + id];
+
+ switch (type) {
+ case 'touchstart':
+ obj.removeEventListener(this.POINTER_DOWN, cb, false);
+ break;
+ case 'touchmove':
+ obj.removeEventListener(this.POINTER_MOVE, cb, false);
+ break;
+ case 'touchend':
+ obj.removeEventListener(this.POINTER_UP, cb, false);
+ obj.removeEventListener(this.POINTER_CANCEL, cb, false);
+ break;
+ }
+
+ return this;
+ }
+});
+
+
+/*
+ * L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers.
+ */
+
+L.Map.mergeOptions({
+ touchZoom: L.Browser.touch && !L.Browser.android23,
+ bounceAtZoomLimits: true
+});
+
+L.Map.TouchZoom = L.Handler.extend({
+ addHooks: function () {
+ L.DomEvent.on(this._map._container, 'touchstart', this._onTouchStart, this);
+ },
+
+ removeHooks: function () {
+ L.DomEvent.off(this._map._container, 'touchstart', this._onTouchStart, this);
+ },
+
+ _onTouchStart: function (e) {
+ var map = this._map;
+
+ if (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; }
+
+ var p1 = map.mouseEventToLayerPoint(e.touches[0]),
+ p2 = map.mouseEventToLayerPoint(e.touches[1]),
+ viewCenter = map._getCenterLayerPoint();
+
+ this._startCenter = p1.add(p2)._divideBy(2);
+ this._startDist = p1.distanceTo(p2);
+
+ this._moved = false;
+ this._zooming = true;
+
+ this._centerOffset = viewCenter.subtract(this._startCenter);
+
+ if (map._panAnim) {
+ map._panAnim.stop();
+ }
+
+ L.DomEvent
+ .on(document, 'touchmove', this._onTouchMove, this)
+ .on(document, 'touchend', this._onTouchEnd, this);
+
+ L.DomEvent.preventDefault(e);
+ },
+
+ _onTouchMove: function (e) {
+ var map = this._map;
+
+ if (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }
+
+ var p1 = map.mouseEventToLayerPoint(e.touches[0]),
+ p2 = map.mouseEventToLayerPoint(e.touches[1]);
+
+ this._scale = p1.distanceTo(p2) / this._startDist;
+ this._delta = p1._add(p2)._divideBy(2)._subtract(this._startCenter);
+
+ if (this._scale === 1) { return; }
+
+ if (!map.options.bounceAtZoomLimits) {
+ if ((map.getZoom() === map.getMinZoom() && this._scale < 1) ||
+ (map.getZoom() === map.getMaxZoom() && this._scale > 1)) { return; }
+ }
+
+ if (!this._moved) {
+ L.DomUtil.addClass(map._mapPane, 'leaflet-touching');
+
+ map
+ .fire('movestart')
+ .fire('zoomstart');
+
+ this._moved = true;
+ }
+
+ L.Util.cancelAnimFrame(this._animRequest);
+ this._animRequest = L.Util.requestAnimFrame(
+ this._updateOnMove, this, true, this._map._container);
+
+ L.DomEvent.preventDefault(e);
+ },
+
+ _updateOnMove: function () {
+ var map = this._map,
+ origin = this._getScaleOrigin(),
+ center = map.layerPointToLatLng(origin),
+ zoom = map.getScaleZoom(this._scale);
+
+ map._animateZoom(center, zoom, this._startCenter, this._scale, this._delta, false, true);
+ },
+
+ _onTouchEnd: function () {
+ if (!this._moved || !this._zooming) {
+ this._zooming = false;
+ return;
+ }
+
+ var map = this._map;
+
+ this._zooming = false;
+ L.DomUtil.removeClass(map._mapPane, 'leaflet-touching');
+ L.Util.cancelAnimFrame(this._animRequest);
+
+ L.DomEvent
+ .off(document, 'touchmove', this._onTouchMove)
+ .off(document, 'touchend', this._onTouchEnd);
+
+ var origin = this._getScaleOrigin(),
+ center = map.layerPointToLatLng(origin),
+
+ oldZoom = map.getZoom(),
+ floatZoomDelta = map.getScaleZoom(this._scale) - oldZoom,
+ roundZoomDelta = (floatZoomDelta > 0 ?
+ Math.ceil(floatZoomDelta) : Math.floor(floatZoomDelta)),
+
+ zoom = map._limitZoom(oldZoom + roundZoomDelta),
+ scale = map.getZoomScale(zoom) / this._scale;
+
+ map._animateZoom(center, zoom, origin, scale);
+ },
+
+ _getScaleOrigin: function () {
+ var centerOffset = this._centerOffset.subtract(this._delta).divideBy(this._scale);
+ return this._startCenter.add(centerOffset);
+ }
+});
+
+L.Map.addInitHook('addHandler', 'touchZoom', L.Map.TouchZoom);
+
+
+/*
+ * L.Map.Tap is used to enable mobile hacks like quick taps and long hold.
+ */
+
+L.Map.mergeOptions({
+ tap: true,
+ tapTolerance: 15
+});
+
+L.Map.Tap = L.Handler.extend({
+ addHooks: function () {
+ L.DomEvent.on(this._map._container, 'touchstart', this._onDown, this);
+ },
+
+ removeHooks: function () {
+ L.DomEvent.off(this._map._container, 'touchstart', this._onDown, this);
+ },
+
+ _onDown: function (e) {
+ if (!e.touches) { return; }
+
+ L.DomEvent.preventDefault(e);
+
+ this._fireClick = true;
+
+ // don't simulate click or track longpress if more than 1 touch
+ if (e.touches.length > 1) {
+ this._fireClick = false;
+ clearTimeout(this._holdTimeout);
+ return;
+ }
+
+ var first = e.touches[0],
+ el = first.target;
+
+ this._startPos = this._newPos = new L.Point(first.clientX, first.clientY);
+
+ // if touching a link, highlight it
+ if (el.tagName && el.tagName.toLowerCase() === 'a') {
+ L.DomUtil.addClass(el, 'leaflet-active');
+ }
+
+ // simulate long hold but setting a timeout
+ this._holdTimeout = setTimeout(L.bind(function () {
+ if (this._isTapValid()) {
+ this._fireClick = false;
+ this._onUp();
+ this._simulateEvent('contextmenu', first);
+ }
+ }, this), 1000);
+
+ L.DomEvent
+ .on(document, 'touchmove', this._onMove, this)
+ .on(document, 'touchend', this._onUp, this);
+ },
+
+ _onUp: function (e) {
+ clearTimeout(this._holdTimeout);
+
+ L.DomEvent
+ .off(document, 'touchmove', this._onMove, this)
+ .off(document, 'touchend', this._onUp, this);
+
+ if (this._fireClick && e && e.changedTouches) {
+
+ var first = e.changedTouches[0],
+ el = first.target;
+
+ if (el && el.tagName && el.tagName.toLowerCase() === 'a') {
+ L.DomUtil.removeClass(el, 'leaflet-active');
+ }
+
+ // simulate click if the touch didn't move too much
+ if (this._isTapValid()) {
+ this._simulateEvent('click', first);
+ }
+ }
+ },
+
+ _isTapValid: function () {
+ return this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;
+ },
+
+ _onMove: function (e) {
+ var first = e.touches[0];
+ this._newPos = new L.Point(first.clientX, first.clientY);
+ },
+
+ _simulateEvent: function (type, e) {
+ var simulatedEvent = document.createEvent('MouseEvents');
+
+ simulatedEvent._simulated = true;
+ e.target._simulatedClick = true;
+
+ simulatedEvent.initMouseEvent(
+ type, true, true, window, 1,
+ e.screenX, e.screenY,
+ e.clientX, e.clientY,
+ false, false, false, false, 0, null);
+
+ e.target.dispatchEvent(simulatedEvent);
+ }
+});
+
+if (L.Browser.touch && !L.Browser.pointer) {
+ L.Map.addInitHook('addHandler', 'tap', L.Map.Tap);
+}
+
+
+/*
+ * L.Handler.ShiftDragZoom is used to add shift-drag zoom interaction to the map
+ * (zoom to a selected bounding box), enabled by default.
+ */
+
+L.Map.mergeOptions({
+ boxZoom: true
+});
+
+L.Map.BoxZoom = L.Handler.extend({
+ initialize: function (map) {
+ this._map = map;
+ this._container = map._container;
+ this._pane = map._panes.overlayPane;
+ this._moved = false;
+ },
+
+ addHooks: function () {
+ L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this);
+ },
+
+ removeHooks: function () {
+ L.DomEvent.off(this._container, 'mousedown', this._onMouseDown);
+ this._moved = false;
+ },
+
+ moved: function () {
+ return this._moved;
+ },
+
+ _onMouseDown: function (e) {
+ this._moved = false;
+
+ if (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }
+
+ L.DomUtil.disableTextSelection();
+ L.DomUtil.disableImageDrag();
+
+ this._startLayerPoint = this._map.mouseEventToLayerPoint(e);
+
+ L.DomEvent
+ .on(document, 'mousemove', this._onMouseMove, this)
+ .on(document, 'mouseup', this._onMouseUp, this)
+ .on(document, 'keydown', this._onKeyDown, this);
+ },
+
+ _onMouseMove: function (e) {
+ if (!this._moved) {
+ this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._pane);
+ L.DomUtil.setPosition(this._box, this._startLayerPoint);
+
+ //TODO refactor: move cursor to styles
+ this._container.style.cursor = 'crosshair';
+ this._map.fire('boxzoomstart');
+ }
+
+ var startPoint = this._startLayerPoint,
+ box = this._box,
+
+ layerPoint = this._map.mouseEventToLayerPoint(e),
+ offset = layerPoint.subtract(startPoint),
+
+ newPos = new L.Point(
+ Math.min(layerPoint.x, startPoint.x),
+ Math.min(layerPoint.y, startPoint.y));
+
+ L.DomUtil.setPosition(box, newPos);
+
+ this._moved = true;
+
+ // TODO refactor: remove hardcoded 4 pixels
+ box.style.width = (Math.max(0, Math.abs(offset.x) - 4)) + 'px';
+ box.style.height = (Math.max(0, Math.abs(offset.y) - 4)) + 'px';
+ },
+
+ _finish: function () {
+ if (this._moved) {
+ this._pane.removeChild(this._box);
+ this._container.style.cursor = '';
+ }
+
+ L.DomUtil.enableTextSelection();
+ L.DomUtil.enableImageDrag();
+
+ L.DomEvent
+ .off(document, 'mousemove', this._onMouseMove)
+ .off(document, 'mouseup', this._onMouseUp)
+ .off(document, 'keydown', this._onKeyDown);
+ },
+
+ _onMouseUp: function (e) {
+
+ this._finish();
+
+ var map = this._map,
+ layerPoint = map.mouseEventToLayerPoint(e);
+
+ if (this._startLayerPoint.equals(layerPoint)) { return; }
+
+ var bounds = new L.LatLngBounds(
+ map.layerPointToLatLng(this._startLayerPoint),
+ map.layerPointToLatLng(layerPoint));
+
+ map.fitBounds(bounds);
+
+ map.fire('boxzoomend', {
+ boxZoomBounds: bounds
+ });
+ },
+
+ _onKeyDown: function (e) {
+ if (e.keyCode === 27) {
+ this._finish();
+ }
+ }
+});
+
+L.Map.addInitHook('addHandler', 'boxZoom', L.Map.BoxZoom);
+
+
+/*
+ * L.Map.Keyboard is handling keyboard interaction with the map, enabled by default.
+ */
+
+L.Map.mergeOptions({
+ keyboard: true,
+ keyboardPanOffset: 80,
+ keyboardZoomOffset: 1
+});
+
+L.Map.Keyboard = L.Handler.extend({
+
+ keyCodes: {
+ left: [37],
+ right: [39],
+ down: [40],
+ up: [38],
+ zoomIn: [187, 107, 61, 171],
+ zoomOut: [189, 109, 173]
+ },
+
+ initialize: function (map) {
+ this._map = map;
+
+ this._setPanOffset(map.options.keyboardPanOffset);
+ this._setZoomOffset(map.options.keyboardZoomOffset);
+ },
+
+ addHooks: function () {
+ var container = this._map._container;
+
+ // make the container focusable by tabbing
+ if (container.tabIndex === -1) {
+ container.tabIndex = '0';
+ }
+
+ L.DomEvent
+ .on(container, 'focus', this._onFocus, this)
+ .on(container, 'blur', this._onBlur, this)
+ .on(container, 'mousedown', this._onMouseDown, this);
+
+ this._map
+ .on('focus', this._addHooks, this)
+ .on('blur', this._removeHooks, this);
+ },
+
+ removeHooks: function () {
+ this._removeHooks();
+
+ var container = this._map._container;
+
+ L.DomEvent
+ .off(container, 'focus', this._onFocus, this)
+ .off(container, 'blur', this._onBlur, this)
+ .off(container, 'mousedown', this._onMouseDown, this);
+
+ this._map
+ .off('focus', this._addHooks, this)
+ .off('blur', this._removeHooks, this);
+ },
+
+ _onMouseDown: function () {
+ if (this._focused) { return; }
+
+ var body = document.body,
+ docEl = document.documentElement,
+ top = body.scrollTop || docEl.scrollTop,
+ left = body.scrollLeft || docEl.scrollLeft;
+
+ this._map._container.focus();
+
+ window.scrollTo(left, top);
+ },
+
+ _onFocus: function () {
+ this._focused = true;
+ this._map.fire('focus');
+ },
+
+ _onBlur: function () {
+ this._focused = false;
+ this._map.fire('blur');
+ },
+
+ _setPanOffset: function (pan) {
+ var keys = this._panKeys = {},
+ codes = this.keyCodes,
+ i, len;
+
+ for (i = 0, len = codes.left.length; i < len; i++) {
+ keys[codes.left[i]] = [-1 * pan, 0];
+ }
+ for (i = 0, len = codes.right.length; i < len; i++) {
+ keys[codes.right[i]] = [pan, 0];
+ }
+ for (i = 0, len = codes.down.length; i < len; i++) {
+ keys[codes.down[i]] = [0, pan];
+ }
+ for (i = 0, len = codes.up.length; i < len; i++) {
+ keys[codes.up[i]] = [0, -1 * pan];
+ }
+ },
+
+ _setZoomOffset: function (zoom) {
+ var keys = this._zoomKeys = {},
+ codes = this.keyCodes,
+ i, len;
+
+ for (i = 0, len = codes.zoomIn.length; i < len; i++) {
+ keys[codes.zoomIn[i]] = zoom;
+ }
+ for (i = 0, len = codes.zoomOut.length; i < len; i++) {
+ keys[codes.zoomOut[i]] = -zoom;
+ }
+ },
+
+ _addHooks: function () {
+ L.DomEvent.on(document, 'keydown', this._onKeyDown, this);
+ },
+
+ _removeHooks: function () {
+ L.DomEvent.off(document, 'keydown', this._onKeyDown, this);
+ },
+
+ _onKeyDown: function (e) {
+ var key = e.keyCode,
+ map = this._map;
+
+ if (key in this._panKeys) {
+
+ if (map._panAnim && map._panAnim._inProgress) { return; }
+
+ map.panBy(this._panKeys[key]);
+
+ if (map.options.maxBounds) {
+ map.panInsideBounds(map.options.maxBounds);
+ }
+
+ } else if (key in this._zoomKeys) {
+ map.setZoom(map.getZoom() + this._zoomKeys[key]);
+
+ } else {
+ return;
+ }
+
+ L.DomEvent.stop(e);
+ }
+});
+
+L.Map.addInitHook('addHandler', 'keyboard', L.Map.Keyboard);
+
+
+/*
+ * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.
+ */
+
+L.Handler.MarkerDrag = L.Handler.extend({
+ initialize: function (marker) {
+ this._marker = marker;
+ },
+
+ addHooks: function () {
+ var icon = this._marker._icon;
+ if (!this._draggable) {
+ this._draggable = new L.Draggable(icon, icon);
+ }
+
+ this._draggable
+ .on('dragstart', this._onDragStart, this)
+ .on('drag', this._onDrag, this)
+ .on('dragend', this._onDragEnd, this);
+ this._draggable.enable();
+ L.DomUtil.addClass(this._marker._icon, 'leaflet-marker-draggable');
+ },
+
+ removeHooks: function () {
+ this._draggable
+ .off('dragstart', this._onDragStart, this)
+ .off('drag', this._onDrag, this)
+ .off('dragend', this._onDragEnd, this);
+
+ this._draggable.disable();
+ L.DomUtil.removeClass(this._marker._icon, 'leaflet-marker-draggable');
+ },
+
+ moved: function () {
+ return this._draggable && this._draggable._moved;
+ },
+
+ _onDragStart: function () {
+ this._marker
+ .closePopup()
+ .fire('movestart')
+ .fire('dragstart');
+ },
+
+ _onDrag: function () {
+ var marker = this._marker,
+ shadow = marker._shadow,
+ iconPos = L.DomUtil.getPosition(marker._icon),
+ latlng = marker._map.layerPointToLatLng(iconPos);
+
+ // update shadow position
+ if (shadow) {
+ L.DomUtil.setPosition(shadow, iconPos);
+ }
+
+ marker._latlng = latlng;
+
+ marker
+ .fire('move', {latlng: latlng})
+ .fire('drag');
+ },
+
+ _onDragEnd: function (e) {
+ this._marker
+ .fire('moveend')
+ .fire('dragend', e);
+ }
+});
+
+
+/*
+ * L.Control is a base class for implementing map controls. Handles positioning.
+ * All other controls extend from this class.
+ */
+
+L.Control = L.Class.extend({
+ options: {
+ position: 'topright'
+ },
+
+ initialize: function (options) {
+ L.setOptions(this, options);
+ },
+
+ getPosition: function () {
+ return this.options.position;
+ },
+
+ setPosition: function (position) {
+ var map = this._map;
+
+ if (map) {
+ map.removeControl(this);
+ }
+
+ this.options.position = position;
+
+ if (map) {
+ map.addControl(this);
+ }
+
+ return this;
+ },
+
+ getContainer: function () {
+ return this._container;
+ },
+
+ addTo: function (map) {
+ this._map = map;
+
+ var container = this._container = this.onAdd(map),
+ pos = this.getPosition(),
+ corner = map._controlCorners[pos];
+
+ L.DomUtil.addClass(container, 'leaflet-control');
+
+ if (pos.indexOf('bottom') !== -1) {
+ corner.insertBefore(container, corner.firstChild);
+ } else {
+ corner.appendChild(container);
+ }
+
+ return this;
+ },
+
+ removeFrom: function (map) {
+ var pos = this.getPosition(),
+ corner = map._controlCorners[pos];
+
+ corner.removeChild(this._container);
+ this._map = null;
+
+ if (this.onRemove) {
+ this.onRemove(map);
+ }
+
+ return this;
+ },
+
+ _refocusOnMap: function () {
+ if (this._map) {
+ this._map.getContainer().focus();
+ }
+ }
+});
+
+L.control = function (options) {
+ return new L.Control(options);
+};
+
+
+// adds control-related methods to L.Map
+
+L.Map.include({
+ addControl: function (control) {
+ control.addTo(this);
+ return this;
+ },
+
+ removeControl: function (control) {
+ control.removeFrom(this);
+ return this;
+ },
+
+ _initControlPos: function () {
+ var corners = this._controlCorners = {},
+ l = 'leaflet-',
+ container = this._controlContainer =
+ L.DomUtil.create('div', l + 'control-container', this._container);
+
+ function createCorner(vSide, hSide) {
+ var className = l + vSide + ' ' + l + hSide;
+
+ corners[vSide + hSide] = L.DomUtil.create('div', className, container);
+ }
+
+ createCorner('top', 'left');
+ createCorner('top', 'right');
+ createCorner('bottom', 'left');
+ createCorner('bottom', 'right');
+ },
+
+ _clearControlPos: function () {
+ this._container.removeChild(this._controlContainer);
+ }
+});
+
+
+/*
+ * L.Control.Zoom is used for the default zoom buttons on the map.
+ */
+
+L.Control.Zoom = L.Control.extend({
+ options: {
+ position: 'topleft',
+ zoomInText: '+',
+ zoomInTitle: 'Zoom in',
+ zoomOutText: '-',
+ zoomOutTitle: 'Zoom out'
+ },
+
+ onAdd: function (map) {
+ var zoomName = 'leaflet-control-zoom',
+ container = L.DomUtil.create('div', zoomName + ' leaflet-bar');
+
+ this._map = map;
+
+ this._zoomInButton = this._createButton(
+ this.options.zoomInText, this.options.zoomInTitle,
+ zoomName + '-in', container, this._zoomIn, this);
+ this._zoomOutButton = this._createButton(
+ this.options.zoomOutText, this.options.zoomOutTitle,
+ zoomName + '-out', container, this._zoomOut, this);
+
+ this._updateDisabled();
+ map.on('zoomend zoomlevelschange', this._updateDisabled, this);
+
+ return container;
+ },
+
+ onRemove: function (map) {
+ map.off('zoomend zoomlevelschange', this._updateDisabled, this);
+ },
+
+ _zoomIn: function (e) {
+ this._map.zoomIn(e.shiftKey ? 3 : 1);
+ },
+
+ _zoomOut: function (e) {
+ this._map.zoomOut(e.shiftKey ? 3 : 1);
+ },
+
+ _createButton: function (html, title, className, container, fn, context) {
+ var link = L.DomUtil.create('a', className, container);
+ link.innerHTML = html;
+ link.href = '#';
+ link.title = title;
+
+ var stop = L.DomEvent.stopPropagation;
+
+ L.DomEvent
+ .on(link, 'click', stop)
+ .on(link, 'mousedown', stop)
+ .on(link, 'dblclick', stop)
+ .on(link, 'click', L.DomEvent.preventDefault)
+ .on(link, 'click', fn, context)
+ .on(link, 'click', this._refocusOnMap, context);
+
+ return link;
+ },
+
+ _updateDisabled: function () {
+ var map = this._map,
+ className = 'leaflet-disabled';
+
+ L.DomUtil.removeClass(this._zoomInButton, className);
+ L.DomUtil.removeClass(this._zoomOutButton, className);
+
+ if (map._zoom === map.getMinZoom()) {
+ L.DomUtil.addClass(this._zoomOutButton, className);
+ }
+ if (map._zoom === map.getMaxZoom()) {
+ L.DomUtil.addClass(this._zoomInButton, className);
+ }
+ }
+});
+
+L.Map.mergeOptions({
+ zoomControl: true
+});
+
+L.Map.addInitHook(function () {
+ if (this.options.zoomControl) {
+ this.zoomControl = new L.Control.Zoom();
+ this.addControl(this.zoomControl);
+ }
+});
+
+L.control.zoom = function (options) {
+ return new L.Control.Zoom(options);
+};
+
+
+
+/*
+ * L.Control.Attribution is used for displaying attribution on the map (added by default).
+ */
+
+L.Control.Attribution = L.Control.extend({
+ options: {
+ position: 'bottomright',
+ prefix: 'Leaflet '
+ },
+
+ initialize: function (options) {
+ L.setOptions(this, options);
+
+ this._attributions = {};
+ },
+
+ onAdd: function (map) {
+ this._container = L.DomUtil.create('div', 'leaflet-control-attribution');
+ L.DomEvent.disableClickPropagation(this._container);
+
+ for (var i in map._layers) {
+ if (map._layers[i].getAttribution) {
+ this.addAttribution(map._layers[i].getAttribution());
+ }
+ }
+
+ map
+ .on('layeradd', this._onLayerAdd, this)
+ .on('layerremove', this._onLayerRemove, this);
+
+ this._update();
+
+ return this._container;
+ },
+
+ onRemove: function (map) {
+ map
+ .off('layeradd', this._onLayerAdd)
+ .off('layerremove', this._onLayerRemove);
+
+ },
+
+ setPrefix: function (prefix) {
+ this.options.prefix = prefix;
+ this._update();
+ return this;
+ },
+
+ addAttribution: function (text) {
+ if (!text) { return; }
+
+ if (!this._attributions[text]) {
+ this._attributions[text] = 0;
+ }
+ this._attributions[text]++;
+
+ this._update();
+
+ return this;
+ },
+
+ removeAttribution: function (text) {
+ if (!text) { return; }
+
+ if (this._attributions[text]) {
+ this._attributions[text]--;
+ this._update();
+ }
+
+ return this;
+ },
+
+ _update: function () {
+ if (!this._map) { return; }
+
+ var attribs = [];
+
+ for (var i in this._attributions) {
+ if (this._attributions[i]) {
+ attribs.push(i);
+ }
+ }
+
+ var prefixAndAttribs = [];
+
+ if (this.options.prefix) {
+ prefixAndAttribs.push(this.options.prefix);
+ }
+ if (attribs.length) {
+ prefixAndAttribs.push(attribs.join(', '));
+ }
+
+ this._container.innerHTML = prefixAndAttribs.join(' | ');
+ },
+
+ _onLayerAdd: function (e) {
+ if (e.layer.getAttribution) {
+ this.addAttribution(e.layer.getAttribution());
+ }
+ },
+
+ _onLayerRemove: function (e) {
+ if (e.layer.getAttribution) {
+ this.removeAttribution(e.layer.getAttribution());
+ }
+ }
+});
+
+L.Map.mergeOptions({
+ attributionControl: true
+});
+
+L.Map.addInitHook(function () {
+ if (this.options.attributionControl) {
+ this.attributionControl = (new L.Control.Attribution()).addTo(this);
+ }
+});
+
+L.control.attribution = function (options) {
+ return new L.Control.Attribution(options);
+};
+
+
+/*
+ * L.Control.Scale is used for displaying metric/imperial scale on the map.
+ */
+
+L.Control.Scale = L.Control.extend({
+ options: {
+ position: 'bottomleft',
+ maxWidth: 100,
+ metric: true,
+ imperial: true,
+ updateWhenIdle: false
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+
+ var className = 'leaflet-control-scale',
+ container = L.DomUtil.create('div', className),
+ options = this.options;
+
+ this._addScales(options, className, container);
+
+ map.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);
+ map.whenReady(this._update, this);
+
+ return container;
+ },
+
+ onRemove: function (map) {
+ map.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);
+ },
+
+ _addScales: function (options, className, container) {
+ if (options.metric) {
+ this._mScale = L.DomUtil.create('div', className + '-line', container);
+ }
+ if (options.imperial) {
+ this._iScale = L.DomUtil.create('div', className + '-line', container);
+ }
+ },
+
+ _update: function () {
+ var bounds = this._map.getBounds(),
+ centerLat = bounds.getCenter().lat,
+ halfWorldMeters = 6378137 * Math.PI * Math.cos(centerLat * Math.PI / 180),
+ dist = halfWorldMeters * (bounds.getNorthEast().lng - bounds.getSouthWest().lng) / 180,
+
+ size = this._map.getSize(),
+ options = this.options,
+ maxMeters = 0;
+
+ if (size.x > 0) {
+ maxMeters = dist * (options.maxWidth / size.x);
+ }
+
+ this._updateScales(options, maxMeters);
+ },
+
+ _updateScales: function (options, maxMeters) {
+ if (options.metric && maxMeters) {
+ this._updateMetric(maxMeters);
+ }
+
+ if (options.imperial && maxMeters) {
+ this._updateImperial(maxMeters);
+ }
+ },
+
+ _updateMetric: function (maxMeters) {
+ var meters = this._getRoundNum(maxMeters);
+
+ this._mScale.style.width = this._getScaleWidth(meters / maxMeters) + 'px';
+ this._mScale.innerHTML = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';
+ },
+
+ _updateImperial: function (maxMeters) {
+ var maxFeet = maxMeters * 3.2808399,
+ scale = this._iScale,
+ maxMiles, miles, feet;
+
+ if (maxFeet > 5280) {
+ maxMiles = maxFeet / 5280;
+ miles = this._getRoundNum(maxMiles);
+
+ scale.style.width = this._getScaleWidth(miles / maxMiles) + 'px';
+ scale.innerHTML = miles + ' mi';
+
+ } else {
+ feet = this._getRoundNum(maxFeet);
+
+ scale.style.width = this._getScaleWidth(feet / maxFeet) + 'px';
+ scale.innerHTML = feet + ' ft';
+ }
+ },
+
+ _getScaleWidth: function (ratio) {
+ return Math.round(this.options.maxWidth * ratio) - 10;
+ },
+
+ _getRoundNum: function (num) {
+ var pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),
+ d = num / pow10;
+
+ d = d >= 10 ? 10 : d >= 5 ? 5 : d >= 3 ? 3 : d >= 2 ? 2 : 1;
+
+ return pow10 * d;
+ }
+});
+
+L.control.scale = function (options) {
+ return new L.Control.Scale(options);
+};
+
+
+/*
+ * L.Control.Layers is a control to allow users to switch between different layers on the map.
+ */
+
+L.Control.Layers = L.Control.extend({
+ options: {
+ collapsed: true,
+ position: 'topright',
+ autoZIndex: true
+ },
+
+ initialize: function (baseLayers, overlays, options) {
+ L.setOptions(this, options);
+
+ this._layers = {};
+ this._lastZIndex = 0;
+ this._handlingClick = false;
+
+ for (var i in baseLayers) {
+ this._addLayer(baseLayers[i], i);
+ }
+
+ for (i in overlays) {
+ this._addLayer(overlays[i], i, true);
+ }
+ },
+
+ onAdd: function (map) {
+ this._initLayout();
+ this._update();
+
+ map
+ .on('layeradd', this._onLayerChange, this)
+ .on('layerremove', this._onLayerChange, this);
+
+ return this._container;
+ },
+
+ onRemove: function (map) {
+ map
+ .off('layeradd', this._onLayerChange, this)
+ .off('layerremove', this._onLayerChange, this);
+ },
+
+ addBaseLayer: function (layer, name) {
+ this._addLayer(layer, name);
+ this._update();
+ return this;
+ },
+
+ addOverlay: function (layer, name) {
+ this._addLayer(layer, name, true);
+ this._update();
+ return this;
+ },
+
+ removeLayer: function (layer) {
+ var id = L.stamp(layer);
+ delete this._layers[id];
+ this._update();
+ return this;
+ },
+
+ _initLayout: function () {
+ var className = 'leaflet-control-layers',
+ container = this._container = L.DomUtil.create('div', className);
+
+ //Makes this work on IE10 Touch devices by stopping it from firing a mouseout event when the touch is released
+ container.setAttribute('aria-haspopup', true);
+
+ if (!L.Browser.touch) {
+ L.DomEvent
+ .disableClickPropagation(container)
+ .disableScrollPropagation(container);
+ } else {
+ L.DomEvent.on(container, 'click', L.DomEvent.stopPropagation);
+ }
+
+ var form = this._form = L.DomUtil.create('form', className + '-list');
+
+ if (this.options.collapsed) {
+ if (!L.Browser.android) {
+ L.DomEvent
+ .on(container, 'mouseover', this._expand, this)
+ .on(container, 'mouseout', this._collapse, this);
+ }
+ var link = this._layersLink = L.DomUtil.create('a', className + '-toggle', container);
+ link.href = '#';
+ link.title = 'Layers';
+
+ if (L.Browser.touch) {
+ L.DomEvent
+ .on(link, 'click', L.DomEvent.stop)
+ .on(link, 'click', this._expand, this);
+ }
+ else {
+ L.DomEvent.on(link, 'focus', this._expand, this);
+ }
+ //Work around for Firefox android issue https://github.com/Leaflet/Leaflet/issues/2033
+ L.DomEvent.on(form, 'click', function () {
+ setTimeout(L.bind(this._onInputClick, this), 0);
+ }, this);
+
+ this._map.on('click', this._collapse, this);
+ // TODO keyboard accessibility
+ } else {
+ this._expand();
+ }
+
+ this._baseLayersList = L.DomUtil.create('div', className + '-base', form);
+ this._separator = L.DomUtil.create('div', className + '-separator', form);
+ this._overlaysList = L.DomUtil.create('div', className + '-overlays', form);
+
+ container.appendChild(form);
+ },
+
+ _addLayer: function (layer, name, overlay) {
+ var id = L.stamp(layer);
+
+ this._layers[id] = {
+ layer: layer,
+ name: name,
+ overlay: overlay
+ };
+
+ if (this.options.autoZIndex && layer.setZIndex) {
+ this._lastZIndex++;
+ layer.setZIndex(this._lastZIndex);
+ }
+ },
+
+ _update: function () {
+ if (!this._container) {
+ return;
+ }
+
+ this._baseLayersList.innerHTML = '';
+ this._overlaysList.innerHTML = '';
+
+ var baseLayersPresent = false,
+ overlaysPresent = false,
+ i, obj;
+
+ for (i in this._layers) {
+ obj = this._layers[i];
+ this._addItem(obj);
+ overlaysPresent = overlaysPresent || obj.overlay;
+ baseLayersPresent = baseLayersPresent || !obj.overlay;
+ }
+
+ this._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';
+ },
+
+ _onLayerChange: function (e) {
+ var obj = this._layers[L.stamp(e.layer)];
+
+ if (!obj) { return; }
+
+ if (!this._handlingClick) {
+ this._update();
+ }
+
+ var type = obj.overlay ?
+ (e.type === 'layeradd' ? 'overlayadd' : 'overlayremove') :
+ (e.type === 'layeradd' ? 'baselayerchange' : null);
+
+ if (type) {
+ this._map.fire(type, obj);
+ }
+ },
+
+ // IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see http://bit.ly/PqYLBe)
+ _createRadioElement: function (name, checked) {
+
+ var radioHtml = ' ';
+
+ var radioFragment = document.createElement('div');
+ radioFragment.innerHTML = radioHtml;
+
+ return radioFragment.firstChild;
+ },
+
+ _addItem: function (obj) {
+ var label = document.createElement('label'),
+ input,
+ checked = this._map.hasLayer(obj.layer);
+
+ if (obj.overlay) {
+ input = document.createElement('input');
+ input.type = 'checkbox';
+ input.className = 'leaflet-control-layers-selector';
+ input.defaultChecked = checked;
+ } else {
+ input = this._createRadioElement('leaflet-base-layers', checked);
+ }
+
+ input.layerId = L.stamp(obj.layer);
+
+ L.DomEvent.on(input, 'click', this._onInputClick, this);
+
+ var name = document.createElement('span');
+ name.innerHTML = ' ' + obj.name;
+
+ label.appendChild(input);
+ label.appendChild(name);
+
+ var container = obj.overlay ? this._overlaysList : this._baseLayersList;
+ container.appendChild(label);
+
+ return label;
+ },
+
+ _onInputClick: function () {
+ var i, input, obj,
+ inputs = this._form.getElementsByTagName('input'),
+ inputsLen = inputs.length;
+
+ this._handlingClick = true;
+
+ for (i = 0; i < inputsLen; i++) {
+ input = inputs[i];
+ obj = this._layers[input.layerId];
+
+ if (input.checked && !this._map.hasLayer(obj.layer)) {
+ this._map.addLayer(obj.layer);
+
+ } else if (!input.checked && this._map.hasLayer(obj.layer)) {
+ this._map.removeLayer(obj.layer);
+ }
+ }
+
+ this._handlingClick = false;
+
+ this._refocusOnMap();
+ },
+
+ _expand: function () {
+ L.DomUtil.addClass(this._container, 'leaflet-control-layers-expanded');
+ },
+
+ _collapse: function () {
+ this._container.className = this._container.className.replace(' leaflet-control-layers-expanded', '');
+ }
+});
+
+L.control.layers = function (baseLayers, overlays, options) {
+ return new L.Control.Layers(baseLayers, overlays, options);
+};
+
+
+/*
+ * L.PosAnimation is used by Leaflet internally for pan animations.
+ */
+
+L.PosAnimation = L.Class.extend({
+ includes: L.Mixin.Events,
+
+ run: function (el, newPos, duration, easeLinearity) { // (HTMLElement, Point[, Number, Number])
+ this.stop();
+
+ this._el = el;
+ this._inProgress = true;
+ this._newPos = newPos;
+
+ this.fire('start');
+
+ el.style[L.DomUtil.TRANSITION] = 'all ' + (duration || 0.25) +
+ 's cubic-bezier(0,0,' + (easeLinearity || 0.5) + ',1)';
+
+ L.DomEvent.on(el, L.DomUtil.TRANSITION_END, this._onTransitionEnd, this);
+ L.DomUtil.setPosition(el, newPos);
+
+ // toggle reflow, Chrome flickers for some reason if you don't do this
+ L.Util.falseFn(el.offsetWidth);
+
+ // there's no native way to track value updates of transitioned properties, so we imitate this
+ this._stepTimer = setInterval(L.bind(this._onStep, this), 50);
+ },
+
+ stop: function () {
+ if (!this._inProgress) { return; }
+
+ // if we just removed the transition property, the element would jump to its final position,
+ // so we need to make it stay at the current position
+
+ L.DomUtil.setPosition(this._el, this._getPos());
+ this._onTransitionEnd();
+ L.Util.falseFn(this._el.offsetWidth); // force reflow in case we are about to start a new animation
+ },
+
+ _onStep: function () {
+ var stepPos = this._getPos();
+ if (!stepPos) {
+ this._onTransitionEnd();
+ return;
+ }
+ // jshint camelcase: false
+ // make L.DomUtil.getPosition return intermediate position value during animation
+ this._el._leaflet_pos = stepPos;
+
+ this.fire('step');
+ },
+
+ // you can't easily get intermediate values of properties animated with CSS3 Transitions,
+ // we need to parse computed style (in case of transform it returns matrix string)
+
+ _transformRe: /([-+]?(?:\d*\.)?\d+)\D*, ([-+]?(?:\d*\.)?\d+)\D*\)/,
+
+ _getPos: function () {
+ var left, top, matches,
+ el = this._el,
+ style = window.getComputedStyle(el);
+
+ if (L.Browser.any3d) {
+ matches = style[L.DomUtil.TRANSFORM].match(this._transformRe);
+ if (!matches) { return; }
+ left = parseFloat(matches[1]);
+ top = parseFloat(matches[2]);
+ } else {
+ left = parseFloat(style.left);
+ top = parseFloat(style.top);
+ }
+
+ return new L.Point(left, top, true);
+ },
+
+ _onTransitionEnd: function () {
+ L.DomEvent.off(this._el, L.DomUtil.TRANSITION_END, this._onTransitionEnd, this);
+
+ if (!this._inProgress) { return; }
+ this._inProgress = false;
+
+ this._el.style[L.DomUtil.TRANSITION] = '';
+
+ // jshint camelcase: false
+ // make sure L.DomUtil.getPosition returns the final position value after animation
+ this._el._leaflet_pos = this._newPos;
+
+ clearInterval(this._stepTimer);
+
+ this.fire('step').fire('end');
+ }
+
+});
+
+
+/*
+ * Extends L.Map to handle panning animations.
+ */
+
+L.Map.include({
+
+ setView: function (center, zoom, options) {
+
+ zoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);
+ center = this._limitCenter(L.latLng(center), zoom, this.options.maxBounds);
+ options = options || {};
+
+ if (this._panAnim) {
+ this._panAnim.stop();
+ }
+
+ if (this._loaded && !options.reset && options !== true) {
+
+ if (options.animate !== undefined) {
+ options.zoom = L.extend({animate: options.animate}, options.zoom);
+ options.pan = L.extend({animate: options.animate}, options.pan);
+ }
+
+ // try animating pan or zoom
+ var animated = (this._zoom !== zoom) ?
+ this._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :
+ this._tryAnimatedPan(center, options.pan);
+
+ if (animated) {
+ // prevent resize handler call, the view will refresh after animation anyway
+ clearTimeout(this._sizeTimer);
+ return this;
+ }
+ }
+
+ // animation didn't start, just reset the map view
+ this._resetView(center, zoom);
+
+ return this;
+ },
+
+ panBy: function (offset, options) {
+ offset = L.point(offset).round();
+ options = options || {};
+
+ if (!offset.x && !offset.y) {
+ return this;
+ }
+
+ if (!this._panAnim) {
+ this._panAnim = new L.PosAnimation();
+
+ this._panAnim.on({
+ 'step': this._onPanTransitionStep,
+ 'end': this._onPanTransitionEnd
+ }, this);
+ }
+
+ // don't fire movestart if animating inertia
+ if (!options.noMoveStart) {
+ this.fire('movestart');
+ }
+
+ // animate pan unless animate: false specified
+ if (options.animate !== false) {
+ L.DomUtil.addClass(this._mapPane, 'leaflet-pan-anim');
+
+ var newPos = this._getMapPanePos().subtract(offset);
+ this._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);
+ } else {
+ this._rawPanBy(offset);
+ this.fire('move').fire('moveend');
+ }
+
+ return this;
+ },
+
+ _onPanTransitionStep: function () {
+ this.fire('move');
+ },
+
+ _onPanTransitionEnd: function () {
+ L.DomUtil.removeClass(this._mapPane, 'leaflet-pan-anim');
+ this.fire('moveend');
+ },
+
+ _tryAnimatedPan: function (center, options) {
+ // difference between the new and current centers in pixels
+ var offset = this._getCenterOffset(center)._floor();
+
+ // don't animate too far unless animate: true specified in options
+ if ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }
+
+ this.panBy(offset, options);
+
+ return true;
+ }
+});
+
+
+/*
+ * L.PosAnimation fallback implementation that powers Leaflet pan animations
+ * in browsers that don't support CSS3 Transitions.
+ */
+
+L.PosAnimation = L.DomUtil.TRANSITION ? L.PosAnimation : L.PosAnimation.extend({
+
+ run: function (el, newPos, duration, easeLinearity) { // (HTMLElement, Point[, Number, Number])
+ this.stop();
+
+ this._el = el;
+ this._inProgress = true;
+ this._duration = duration || 0.25;
+ this._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2);
+
+ this._startPos = L.DomUtil.getPosition(el);
+ this._offset = newPos.subtract(this._startPos);
+ this._startTime = +new Date();
+
+ this.fire('start');
+
+ this._animate();
+ },
+
+ stop: function () {
+ if (!this._inProgress) { return; }
+
+ this._step();
+ this._complete();
+ },
+
+ _animate: function () {
+ // animation loop
+ this._animId = L.Util.requestAnimFrame(this._animate, this);
+ this._step();
+ },
+
+ _step: function () {
+ var elapsed = (+new Date()) - this._startTime,
+ duration = this._duration * 1000;
+
+ if (elapsed < duration) {
+ this._runFrame(this._easeOut(elapsed / duration));
+ } else {
+ this._runFrame(1);
+ this._complete();
+ }
+ },
+
+ _runFrame: function (progress) {
+ var pos = this._startPos.add(this._offset.multiplyBy(progress));
+ L.DomUtil.setPosition(this._el, pos);
+
+ this.fire('step');
+ },
+
+ _complete: function () {
+ L.Util.cancelAnimFrame(this._animId);
+
+ this._inProgress = false;
+ this.fire('end');
+ },
+
+ _easeOut: function (t) {
+ return 1 - Math.pow(1 - t, this._easeOutPower);
+ }
+});
+
+
+/*
+ * Extends L.Map to handle zoom animations.
+ */
+
+L.Map.mergeOptions({
+ zoomAnimation: true,
+ zoomAnimationThreshold: 4
+});
+
+if (L.DomUtil.TRANSITION) {
+
+ L.Map.addInitHook(function () {
+ // don't animate on browsers without hardware-accelerated transitions or old Android/Opera
+ this._zoomAnimated = this.options.zoomAnimation && L.DomUtil.TRANSITION &&
+ L.Browser.any3d && !L.Browser.android23 && !L.Browser.mobileOpera;
+
+ // zoom transitions run with the same duration for all layers, so if one of transitionend events
+ // happens after starting zoom animation (propagating to the map pane), we know that it ended globally
+ if (this._zoomAnimated) {
+ L.DomEvent.on(this._mapPane, L.DomUtil.TRANSITION_END, this._catchTransitionEnd, this);
+ }
+ });
+}
+
+L.Map.include(!L.DomUtil.TRANSITION ? {} : {
+
+ _catchTransitionEnd: function (e) {
+ if (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) {
+ this._onZoomTransitionEnd();
+ }
+ },
+
+ _nothingToAnimate: function () {
+ return !this._container.getElementsByClassName('leaflet-zoom-animated').length;
+ },
+
+ _tryAnimatedZoom: function (center, zoom, options) {
+
+ if (this._animatingZoom) { return true; }
+
+ options = options || {};
+
+ // don't animate if disabled, not supported or zoom difference is too large
+ if (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() ||
+ Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }
+
+ // offset is the pixel coords of the zoom origin relative to the current center
+ var scale = this.getZoomScale(zoom),
+ offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale),
+ origin = this._getCenterLayerPoint()._add(offset);
+
+ // don't animate if the zoom origin isn't within one screen from the current center, unless forced
+ if (options.animate !== true && !this.getSize().contains(offset)) { return false; }
+
+ this
+ .fire('movestart')
+ .fire('zoomstart');
+
+ this._animateZoom(center, zoom, origin, scale, null, true);
+
+ return true;
+ },
+
+ _animateZoom: function (center, zoom, origin, scale, delta, backwards, forTouchZoom) {
+
+ if (!forTouchZoom) {
+ this._animatingZoom = true;
+ }
+
+ // put transform transition on all layers with leaflet-zoom-animated class
+ L.DomUtil.addClass(this._mapPane, 'leaflet-zoom-anim');
+
+ // remember what center/zoom to set after animation
+ this._animateToCenter = center;
+ this._animateToZoom = zoom;
+
+ // disable any dragging during animation
+ if (L.Draggable) {
+ L.Draggable._disabled = true;
+ }
+
+ L.Util.requestAnimFrame(function () {
+ this.fire('zoomanim', {
+ center: center,
+ zoom: zoom,
+ origin: origin,
+ scale: scale,
+ delta: delta,
+ backwards: backwards
+ });
+ // horrible hack to work around a Chrome bug https://github.com/Leaflet/Leaflet/issues/3689
+ setTimeout(L.bind(this._onZoomTransitionEnd, this), 250);
+ }, this);
+ },
+
+ _onZoomTransitionEnd: function () {
+ if (!this._animatingZoom) { return; }
+
+ this._animatingZoom = false;
+
+ L.DomUtil.removeClass(this._mapPane, 'leaflet-zoom-anim');
+
+ L.Util.requestAnimFrame(function () {
+ this._resetView(this._animateToCenter, this._animateToZoom, true, true);
+
+ if (L.Draggable) {
+ L.Draggable._disabled = false;
+ }
+ }, this);
+ }
+});
+
+
+/*
+ Zoom animation logic for L.TileLayer.
+*/
+
+L.TileLayer.include({
+ _animateZoom: function (e) {
+ if (!this._animating) {
+ this._animating = true;
+ this._prepareBgBuffer();
+ }
+
+ var bg = this._bgBuffer,
+ transform = L.DomUtil.TRANSFORM,
+ initialTransform = e.delta ? L.DomUtil.getTranslateString(e.delta) : bg.style[transform],
+ scaleStr = L.DomUtil.getScaleString(e.scale, e.origin);
+
+ bg.style[transform] = e.backwards ?
+ scaleStr + ' ' + initialTransform :
+ initialTransform + ' ' + scaleStr;
+ },
+
+ _endZoomAnim: function () {
+ var front = this._tileContainer,
+ bg = this._bgBuffer;
+
+ front.style.visibility = '';
+ front.parentNode.appendChild(front); // Bring to fore
+
+ // force reflow
+ L.Util.falseFn(bg.offsetWidth);
+
+ var zoom = this._map.getZoom();
+ if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {
+ this._clearBgBuffer();
+ }
+
+ this._animating = false;
+ },
+
+ _clearBgBuffer: function () {
+ var map = this._map;
+
+ if (map && !map._animatingZoom && !map.touchZoom._zooming) {
+ this._bgBuffer.innerHTML = '';
+ this._bgBuffer.style[L.DomUtil.TRANSFORM] = '';
+ }
+ },
+
+ _prepareBgBuffer: function () {
+
+ var front = this._tileContainer,
+ bg = this._bgBuffer;
+
+ // if foreground layer doesn't have many tiles but bg layer does,
+ // keep the existing bg layer and just zoom it some more
+
+ var bgLoaded = this._getLoadedTilesPercentage(bg),
+ frontLoaded = this._getLoadedTilesPercentage(front);
+
+ if (bg && bgLoaded > 0.5 && frontLoaded < 0.5) {
+
+ front.style.visibility = 'hidden';
+ this._stopLoadingImages(front);
+ return;
+ }
+
+ // prepare the buffer to become the front tile pane
+ bg.style.visibility = 'hidden';
+ bg.style[L.DomUtil.TRANSFORM] = '';
+
+ // switch out the current layer to be the new bg layer (and vice-versa)
+ this._tileContainer = bg;
+ bg = this._bgBuffer = front;
+
+ this._stopLoadingImages(bg);
+
+ //prevent bg buffer from clearing right after zoom
+ clearTimeout(this._clearBgBufferTimer);
+ },
+
+ _getLoadedTilesPercentage: function (container) {
+ var tiles = container.getElementsByTagName('img'),
+ i, len, count = 0;
+
+ for (i = 0, len = tiles.length; i < len; i++) {
+ if (tiles[i].complete) {
+ count++;
+ }
+ }
+ return count / len;
+ },
+
+ // stops loading all tiles in the background layer
+ _stopLoadingImages: function (container) {
+ var tiles = Array.prototype.slice.call(container.getElementsByTagName('img')),
+ i, len, tile;
+
+ for (i = 0, len = tiles.length; i < len; i++) {
+ tile = tiles[i];
+
+ if (!tile.complete) {
+ tile.onload = L.Util.falseFn;
+ tile.onerror = L.Util.falseFn;
+ tile.src = L.Util.emptyImageUrl;
+
+ tile.parentNode.removeChild(tile);
+ }
+ }
+ }
+});
+
+
+/*
+ * Provides L.Map with convenient shortcuts for using browser geolocation features.
+ */
+
+L.Map.include({
+ _defaultLocateOptions: {
+ watch: false,
+ setView: false,
+ maxZoom: Infinity,
+ timeout: 10000,
+ maximumAge: 0,
+ enableHighAccuracy: false
+ },
+
+ locate: function (/*Object*/ options) {
+
+ options = this._locateOptions = L.extend(this._defaultLocateOptions, options);
+
+ if (!navigator.geolocation) {
+ this._handleGeolocationError({
+ code: 0,
+ message: 'Geolocation not supported.'
+ });
+ return this;
+ }
+
+ var onResponse = L.bind(this._handleGeolocationResponse, this),
+ onError = L.bind(this._handleGeolocationError, this);
+
+ if (options.watch) {
+ this._locationWatchId =
+ navigator.geolocation.watchPosition(onResponse, onError, options);
+ } else {
+ navigator.geolocation.getCurrentPosition(onResponse, onError, options);
+ }
+ return this;
+ },
+
+ stopLocate: function () {
+ if (navigator.geolocation) {
+ navigator.geolocation.clearWatch(this._locationWatchId);
+ }
+ if (this._locateOptions) {
+ this._locateOptions.setView = false;
+ }
+ return this;
+ },
+
+ _handleGeolocationError: function (error) {
+ var c = error.code,
+ message = error.message ||
+ (c === 1 ? 'permission denied' :
+ (c === 2 ? 'position unavailable' : 'timeout'));
+
+ if (this._locateOptions.setView && !this._loaded) {
+ this.fitWorld();
+ }
+
+ this.fire('locationerror', {
+ code: c,
+ message: 'Geolocation error: ' + message + '.'
+ });
+ },
+
+ _handleGeolocationResponse: function (pos) {
+ var lat = pos.coords.latitude,
+ lng = pos.coords.longitude,
+ latlng = new L.LatLng(lat, lng),
+
+ latAccuracy = 180 * pos.coords.accuracy / 40075017,
+ lngAccuracy = latAccuracy / Math.cos(L.LatLng.DEG_TO_RAD * lat),
+
+ bounds = L.latLngBounds(
+ [lat - latAccuracy, lng - lngAccuracy],
+ [lat + latAccuracy, lng + lngAccuracy]),
+
+ options = this._locateOptions;
+
+ if (options.setView) {
+ var zoom = Math.min(this.getBoundsZoom(bounds), options.maxZoom);
+ this.setView(latlng, zoom);
+ }
+
+ var data = {
+ latlng: latlng,
+ bounds: bounds,
+ timestamp: pos.timestamp
+ };
+
+ for (var i in pos.coords) {
+ if (typeof pos.coords[i] === 'number') {
+ data[i] = pos.coords[i];
+ }
+ }
+
+ this.fire('locationfound', data);
+ }
+});
+
+
+}(window, document));
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/leaflet.css b/UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/leaflet.css
new file mode 100644
index 0000000..dea175f
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/leaflet.css
@@ -0,0 +1,479 @@
+/* required styles */
+
+.leaflet-map-pane,
+.leaflet-tile,
+.leaflet-marker-icon,
+.leaflet-marker-shadow,
+.leaflet-tile-pane,
+.leaflet-tile-container,
+.leaflet-overlay-pane,
+.leaflet-shadow-pane,
+.leaflet-marker-pane,
+.leaflet-popup-pane,
+.leaflet-overlay-pane svg,
+.leaflet-zoom-box,
+.leaflet-image-layer,
+.leaflet-layer {
+ position: absolute;
+ left: 0;
+ top: 0;
+ }
+.leaflet-container {
+ overflow: hidden;
+ -ms-touch-action: none;
+ touch-action: none;
+ }
+.leaflet-tile,
+.leaflet-marker-icon,
+.leaflet-marker-shadow {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ -webkit-user-drag: none;
+ }
+.leaflet-marker-icon,
+.leaflet-marker-shadow {
+ display: block;
+ }
+/* map is broken in FF if you have max-width: 100% on tiles */
+.leaflet-container img {
+ max-width: none !important;
+ }
+/* stupid Android 2 doesn't understand "max-width: none" properly */
+.leaflet-container img.leaflet-image-layer {
+ max-width: 15000px !important;
+ }
+.leaflet-tile {
+ filter: inherit;
+ visibility: hidden;
+ }
+.leaflet-tile-loaded {
+ visibility: inherit;
+ }
+.leaflet-zoom-box {
+ width: 0;
+ height: 0;
+ }
+/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
+.leaflet-overlay-pane svg {
+ -moz-user-select: none;
+ }
+
+.leaflet-tile-pane { z-index: 2; }
+.leaflet-objects-pane { z-index: 3; }
+.leaflet-overlay-pane { z-index: 4; }
+.leaflet-shadow-pane { z-index: 5; }
+.leaflet-marker-pane { z-index: 6; }
+.leaflet-popup-pane { z-index: 7; }
+
+.leaflet-vml-shape {
+ width: 1px;
+ height: 1px;
+ }
+.lvml {
+ behavior: url(#default#VML);
+ display: inline-block;
+ position: absolute;
+ }
+
+
+/* control positioning */
+
+.leaflet-control {
+ position: relative;
+ z-index: 7;
+ pointer-events: auto;
+ }
+.leaflet-top,
+.leaflet-bottom {
+ position: absolute;
+ z-index: 1000;
+ pointer-events: none;
+ }
+.leaflet-top {
+ top: 0;
+ }
+.leaflet-right {
+ right: 0;
+ }
+.leaflet-bottom {
+ bottom: 0;
+ }
+.leaflet-left {
+ left: 0;
+ }
+.leaflet-control {
+ float: left;
+ clear: both;
+ }
+.leaflet-right .leaflet-control {
+ float: right;
+ }
+.leaflet-top .leaflet-control {
+ margin-top: 10px;
+ }
+.leaflet-bottom .leaflet-control {
+ margin-bottom: 10px;
+ }
+.leaflet-left .leaflet-control {
+ margin-left: 10px;
+ }
+.leaflet-right .leaflet-control {
+ margin-right: 10px;
+ }
+
+
+/* zoom and fade animations */
+
+.leaflet-fade-anim .leaflet-tile,
+.leaflet-fade-anim .leaflet-popup {
+ opacity: 0;
+ -webkit-transition: opacity 0.2s linear;
+ -moz-transition: opacity 0.2s linear;
+ -o-transition: opacity 0.2s linear;
+ transition: opacity 0.2s linear;
+ }
+.leaflet-fade-anim .leaflet-tile-loaded,
+.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
+ opacity: 1;
+ }
+
+.leaflet-zoom-anim .leaflet-zoom-animated {
+ -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
+ -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
+ -o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1);
+ transition: transform 0.25s cubic-bezier(0,0,0.25,1);
+ }
+.leaflet-zoom-anim .leaflet-tile,
+.leaflet-pan-anim .leaflet-tile,
+.leaflet-touching .leaflet-zoom-animated {
+ -webkit-transition: none;
+ -moz-transition: none;
+ -o-transition: none;
+ transition: none;
+ }
+
+.leaflet-zoom-anim .leaflet-zoom-hide {
+ visibility: hidden;
+ }
+
+
+/* cursors */
+
+.leaflet-clickable {
+ cursor: pointer;
+ }
+.leaflet-container {
+ cursor: -webkit-grab;
+ cursor: -moz-grab;
+ }
+.leaflet-popup-pane,
+.leaflet-control {
+ cursor: auto;
+ }
+.leaflet-dragging .leaflet-container,
+.leaflet-dragging .leaflet-clickable {
+ cursor: move;
+ cursor: -webkit-grabbing;
+ cursor: -moz-grabbing;
+ }
+
+
+/* visual tweaks */
+
+.leaflet-container {
+ background: #ddd;
+ outline: 0;
+ }
+.leaflet-container a {
+ color: #0078A8;
+ }
+.leaflet-container a.leaflet-active {
+ outline: 2px solid orange;
+ }
+.leaflet-zoom-box {
+ border: 2px dotted #38f;
+ background: rgba(255,255,255,0.5);
+ }
+
+
+/* general typography */
+.leaflet-container {
+ font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
+ }
+
+
+/* general toolbar styles */
+
+.leaflet-bar {
+ box-shadow: 0 1px 5px rgba(0,0,0,0.65);
+ border-radius: 4px;
+ }
+.leaflet-bar a,
+.leaflet-bar a:hover {
+ background-color: #fff;
+ border-bottom: 1px solid #ccc;
+ width: 26px;
+ height: 26px;
+ line-height: 26px;
+ display: block;
+ text-align: center;
+ text-decoration: none;
+ color: black;
+ }
+.leaflet-bar a,
+.leaflet-control-layers-toggle {
+ background-position: 50% 50%;
+ background-repeat: no-repeat;
+ display: block;
+ }
+.leaflet-bar a:hover {
+ background-color: #f4f4f4;
+ }
+.leaflet-bar a:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ }
+.leaflet-bar a:last-child {
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ border-bottom: none;
+ }
+.leaflet-bar a.leaflet-disabled {
+ cursor: default;
+ background-color: #f4f4f4;
+ color: #bbb;
+ }
+
+.leaflet-touch .leaflet-bar a {
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+ }
+
+
+/* zoom control */
+
+.leaflet-control-zoom-in,
+.leaflet-control-zoom-out {
+ font: bold 18px 'Lucida Console', Monaco, monospace;
+ text-indent: 1px;
+ }
+.leaflet-control-zoom-out {
+ font-size: 20px;
+ }
+
+.leaflet-touch .leaflet-control-zoom-in {
+ font-size: 22px;
+ }
+.leaflet-touch .leaflet-control-zoom-out {
+ font-size: 24px;
+ }
+
+
+/* layers control */
+
+.leaflet-control-layers {
+ box-shadow: 0 1px 5px rgba(0,0,0,0.4);
+ background: #fff;
+ border-radius: 5px;
+ }
+.leaflet-control-layers-toggle {
+ background-image: url(images/layers.png);
+ width: 36px;
+ height: 36px;
+ }
+.leaflet-retina .leaflet-control-layers-toggle {
+ background-image: url(images/layers-2x.png);
+ background-size: 26px 26px;
+ }
+.leaflet-touch .leaflet-control-layers-toggle {
+ width: 44px;
+ height: 44px;
+ }
+.leaflet-control-layers .leaflet-control-layers-list,
+.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
+ display: none;
+ }
+.leaflet-control-layers-expanded .leaflet-control-layers-list {
+ display: block;
+ position: relative;
+ }
+.leaflet-control-layers-expanded {
+ padding: 6px 10px 6px 6px;
+ color: #333;
+ background: #fff;
+ }
+.leaflet-control-layers-selector {
+ margin-top: 2px;
+ position: relative;
+ top: 1px;
+ }
+.leaflet-control-layers label {
+ display: block;
+ }
+.leaflet-control-layers-separator {
+ height: 0;
+ border-top: 1px solid #ddd;
+ margin: 5px -10px 5px -6px;
+ }
+
+
+/* attribution and scale controls */
+
+.leaflet-container .leaflet-control-attribution {
+ background: #fff;
+ background: rgba(255, 255, 255, 0.7);
+ margin: 0;
+ }
+.leaflet-control-attribution,
+.leaflet-control-scale-line {
+ padding: 0 5px;
+ color: #333;
+ }
+.leaflet-control-attribution a {
+ text-decoration: none;
+ }
+.leaflet-control-attribution a:hover {
+ text-decoration: underline;
+ }
+.leaflet-container .leaflet-control-attribution,
+.leaflet-container .leaflet-control-scale {
+ font-size: 11px;
+ }
+.leaflet-left .leaflet-control-scale {
+ margin-left: 5px;
+ }
+.leaflet-bottom .leaflet-control-scale {
+ margin-bottom: 5px;
+ }
+.leaflet-control-scale-line {
+ border: 2px solid #777;
+ border-top: none;
+ line-height: 1.1;
+ padding: 2px 5px 1px;
+ font-size: 11px;
+ white-space: nowrap;
+ overflow: hidden;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+
+ background: #fff;
+ background: rgba(255, 255, 255, 0.5);
+ }
+.leaflet-control-scale-line:not(:first-child) {
+ border-top: 2px solid #777;
+ border-bottom: none;
+ margin-top: -2px;
+ }
+.leaflet-control-scale-line:not(:first-child):not(:last-child) {
+ border-bottom: 2px solid #777;
+ }
+
+.leaflet-touch .leaflet-control-attribution,
+.leaflet-touch .leaflet-control-layers,
+.leaflet-touch .leaflet-bar {
+ box-shadow: none;
+ }
+.leaflet-touch .leaflet-control-layers,
+.leaflet-touch .leaflet-bar {
+ border: 2px solid rgba(0,0,0,0.2);
+ background-clip: padding-box;
+ }
+
+
+/* popup */
+
+.leaflet-popup {
+ position: absolute;
+ text-align: center;
+ }
+.leaflet-popup-content-wrapper {
+ padding: 1px;
+ text-align: left;
+ border-radius: 12px;
+ }
+.leaflet-popup-content {
+ margin: 13px 19px;
+ line-height: 1.4;
+ }
+.leaflet-popup-content p {
+ margin: 18px 0;
+ }
+.leaflet-popup-tip-container {
+ margin: 0 auto;
+ width: 40px;
+ height: 20px;
+ position: relative;
+ overflow: hidden;
+ }
+.leaflet-popup-tip {
+ width: 17px;
+ height: 17px;
+ padding: 1px;
+
+ margin: -10px auto 0;
+
+ -webkit-transform: rotate(45deg);
+ -moz-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ -o-transform: rotate(45deg);
+ transform: rotate(45deg);
+ }
+.leaflet-popup-content-wrapper,
+.leaflet-popup-tip {
+ background: white;
+
+ box-shadow: 0 3px 14px rgba(0,0,0,0.4);
+ }
+.leaflet-container a.leaflet-popup-close-button {
+ position: absolute;
+ top: 0;
+ right: 0;
+ padding: 4px 4px 0 0;
+ text-align: center;
+ width: 18px;
+ height: 14px;
+ font: 16px/14px Tahoma, Verdana, sans-serif;
+ color: #c3c3c3;
+ text-decoration: none;
+ font-weight: bold;
+ background: transparent;
+ }
+.leaflet-container a.leaflet-popup-close-button:hover {
+ color: #999;
+ }
+.leaflet-popup-scrolled {
+ overflow: auto;
+ border-bottom: 1px solid #ddd;
+ border-top: 1px solid #ddd;
+ }
+
+.leaflet-oldie .leaflet-popup-content-wrapper {
+ zoom: 1;
+ }
+.leaflet-oldie .leaflet-popup-tip {
+ width: 24px;
+ margin: 0 auto;
+
+ -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
+ filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
+ }
+.leaflet-oldie .leaflet-popup-tip-container {
+ margin-top: -1px;
+ }
+
+.leaflet-oldie .leaflet-control-zoom,
+.leaflet-oldie .leaflet-control-layers,
+.leaflet-oldie .leaflet-popup-content-wrapper,
+.leaflet-oldie .leaflet-popup-tip {
+ border: 1px solid #999;
+ }
+
+
+/* div icon */
+
+.leaflet-div-icon {
+ background: #fff;
+ border: 1px solid #666;
+ }
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/leaflet.js b/UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/leaflet.js
new file mode 100644
index 0000000..ee5ff5a
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/assets/leaflet/leaflet.js
@@ -0,0 +1,9 @@
+/*
+ Leaflet, a JavaScript library for mobile-friendly interactive maps. http://leafletjs.com
+ (c) 2010-2013, Vladimir Agafonkin
+ (c) 2010-2011, CloudMade
+*/
+!function(t,e,i){var n=t.L,o={};o.version="0.7.7","object"==typeof module&&"object"==typeof module.exports?module.exports=o:"function"==typeof define&&define.amd&&define(o),o.noConflict=function(){return t.L=n,this},t.L=o,o.Util={extend:function(t){var e,i,n,o,s=Array.prototype.slice.call(arguments,1);for(i=0,n=s.length;n>i;i++){o=s[i]||{};for(e in o)o.hasOwnProperty(e)&&(t[e]=o[e])}return t},bind:function(t,e){var i=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(e,i||arguments)}},stamp:function(){var t=0,e="_leaflet_id";return function(i){return i[e]=i[e]||++t,i[e]}}(),invokeEach:function(t,e,i){var n,o;if("object"==typeof t){o=Array.prototype.slice.call(arguments,3);for(n in t)e.apply(i,[n,t[n]].concat(o));return!0}return!1},limitExecByInterval:function(t,e,i){var n,o;return function s(){var a=arguments;return n?void(o=!0):(n=!0,setTimeout(function(){n=!1,o&&(s.apply(i,a),o=!1)},e),void t.apply(i,a))}},falseFn:function(){return!1},formatNum:function(t,e){var i=Math.pow(10,e||5);return Math.round(t*i)/i},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},splitWords:function(t){return o.Util.trim(t).split(/\s+/)},setOptions:function(t,e){return t.options=o.extend({},t.options,e),t.options},getParamString:function(t,e,i){var n=[];for(var o in t)n.push(encodeURIComponent(i?o.toUpperCase():o)+"="+encodeURIComponent(t[o]));return(e&&-1!==e.indexOf("?")?"&":"?")+n.join("&")},template:function(t,e){return t.replace(/\{ *([\w_]+) *\}/g,function(t,n){var o=e[n];if(o===i)throw new Error("No value provided for variable "+t);return"function"==typeof o&&(o=o(e)),o})},isArray:Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function e(e){var i,n,o=["webkit","moz","o","ms"];for(i=0;it;t++)n._initHooks[t].call(this)}},e},o.Class.include=function(t){o.extend(this.prototype,t)},o.Class.mergeOptions=function(t){o.extend(this.prototype.options,t)},o.Class.addInitHook=function(t){var e=Array.prototype.slice.call(arguments,1),i="function"==typeof t?t:function(){this[t].apply(this,e)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(i)};var s="_leaflet_events";o.Mixin={},o.Mixin.Events={addEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d=this[s]=this[s]||{},p=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)r={action:e,context:i||this},h=t[n],p?(l=h+"_idx",u=l+"_len",c=d[l]=d[l]||{},c[p]||(c[p]=[],d[u]=(d[u]||0)+1),c[p].push(r)):(d[h]=d[h]||[],d[h].push(r));return this},hasEventListeners:function(t){var e=this[s];return!!e&&(t in e&&e[t].length>0||t+"_idx"in e&&e[t+"_idx_len"]>0)},removeEventListener:function(t,e,i){if(!this[s])return this;if(!t)return this.clearAllEventListeners();if(o.Util.invokeEach(t,this.removeEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d,p,_=this[s],m=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)if(r=t[n],u=r+"_idx",c=u+"_len",d=_[u],e){if(h=m&&d?d[m]:_[r]){for(l=h.length-1;l>=0;l--)h[l].action!==e||i&&h[l].context!==i||(p=h.splice(l,1),p[0].action=o.Util.falseFn);i&&d&&0===h.length&&(delete d[m],_[c]--)}}else delete _[r],delete _[u],delete _[c];return this},clearAllEventListeners:function(){return delete this[s],this},fireEvent:function(t,e){if(!this.hasEventListeners(t))return this;var i,n,a,r,h,l=o.Util.extend({},e,{type:t,target:this}),u=this[s];if(u[t])for(i=u[t].slice(),n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);r=u[t+"_idx"];for(h in r)if(i=r[h].slice())for(n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);return this},addOneTimeEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addOneTimeEventListener,this,e,i))return this;var n=o.bind(function(){this.removeEventListener(t,e,i).removeEventListener(t,n,i)},this);return this.addEventListener(t,e,i).addEventListener(t,n,i)}},o.Mixin.Events.on=o.Mixin.Events.addEventListener,o.Mixin.Events.off=o.Mixin.Events.removeEventListener,o.Mixin.Events.once=o.Mixin.Events.addOneTimeEventListener,o.Mixin.Events.fire=o.Mixin.Events.fireEvent,function(){var n="ActiveXObject"in t,s=n&&!e.addEventListener,a=navigator.userAgent.toLowerCase(),r=-1!==a.indexOf("webkit"),h=-1!==a.indexOf("chrome"),l=-1!==a.indexOf("phantom"),u=-1!==a.indexOf("android"),c=-1!==a.search("android [23]"),d=-1!==a.indexOf("gecko"),p=typeof orientation!=i+"",_=!t.PointerEvent&&t.MSPointerEvent,m=t.PointerEvent&&t.navigator.pointerEnabled||_,f="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,g=e.documentElement,v=n&&"transition"in g.style,y="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix&&!c,P="MozPerspective"in g.style,L="OTransition"in g.style,x=!t.L_DISABLE_3D&&(v||y||P||L)&&!l,w=!t.L_NO_TOUCH&&!l&&(m||"ontouchstart"in t||t.DocumentTouch&&e instanceof t.DocumentTouch);o.Browser={ie:n,ielt9:s,webkit:r,gecko:d&&!r&&!t.opera&&!n,android:u,android23:c,chrome:h,ie3d:v,webkit3d:y,gecko3d:P,opera3d:L,any3d:x,mobile:p,mobileWebkit:p&&r,mobileWebkit3d:p&&y,mobileOpera:p&&t.opera,touch:w,msPointer:_,pointer:m,retina:f}}(),o.Point=function(t,e,i){this.x=i?Math.round(t):t,this.y=i?Math.round(e):e},o.Point.prototype={clone:function(){return new o.Point(this.x,this.y)},add:function(t){return this.clone()._add(o.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(o.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=o.point(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=o.point(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=o.point(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+o.Util.formatNum(this.x)+", "+o.Util.formatNum(this.y)+")"}},o.point=function(t,e,n){return t instanceof o.Point?t:o.Util.isArray(t)?new o.Point(t[0],t[1]):t===i||null===t?t:new o.Point(t,e,n)},o.Bounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.Bounds.prototype={extend:function(t){return t=o.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new o.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new o.Point(this.min.x,this.max.y)},getTopRight:function(){return new o.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var e,i;return t="number"==typeof t[0]||t instanceof o.Point?o.point(t):o.bounds(t),t instanceof o.Bounds?(e=t.min,i=t.max):e=i=t,e.x>=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=o.bounds(t);var e=this.min,i=this.max,n=t.min,s=t.max,a=s.x>=e.x&&n.x<=i.x,r=s.y>=e.y&&n.y<=i.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},o.bounds=function(t,e){return!t||t instanceof o.Bounds?t:new o.Bounds(t,e)},o.Transformation=function(t,e,i,n){this._a=t,this._b=e,this._c=i,this._d=n},o.Transformation.prototype={transform:function(t,e){return this._transform(t.clone(),e)},_transform:function(t,e){return e=e||1,t.x=e*(this._a*t.x+this._b),t.y=e*(this._c*t.y+this._d),t},untransform:function(t,e){return e=e||1,new o.Point((t.x/e-this._b)/this._a,(t.y/e-this._d)/this._c)}},o.DomUtil={get:function(t){return"string"==typeof t?e.getElementById(t):t},getStyle:function(t,i){var n=t.style[i];if(!n&&t.currentStyle&&(n=t.currentStyle[i]),(!n||"auto"===n)&&e.defaultView){var o=e.defaultView.getComputedStyle(t,null);n=o?o[i]:null}return"auto"===n?null:n},getViewportOffset:function(t){var i,n=0,s=0,a=t,r=e.body,h=e.documentElement;do{if(n+=a.offsetTop||0,s+=a.offsetLeft||0,n+=parseInt(o.DomUtil.getStyle(a,"borderTopWidth"),10)||0,s+=parseInt(o.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,i=o.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===i)break;if("fixed"===i){n+=r.scrollTop||h.scrollTop||0,s+=r.scrollLeft||h.scrollLeft||0;break}if("relative"===i&&!a.offsetLeft){var l=o.DomUtil.getStyle(a,"width"),u=o.DomUtil.getStyle(a,"max-width"),c=a.getBoundingClientRect();("none"!==l||"none"!==u)&&(s+=c.left+a.clientLeft),n+=c.top+(r.scrollTop||h.scrollTop||0);break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;n-=a.scrollTop||0,s-=a.scrollLeft||0,a=a.parentNode}while(a);return new o.Point(s,n)},documentIsLtr:function(){return o.DomUtil._docIsLtrCached||(o.DomUtil._docIsLtrCached=!0,o.DomUtil._docIsLtr="ltr"===o.DomUtil.getStyle(e.body,"direction")),o.DomUtil._docIsLtr},create:function(t,i,n){var o=e.createElement(t);return o.className=i,n&&n.appendChild(o),o},hasClass:function(t,e){if(t.classList!==i)return t.classList.contains(e);var n=o.DomUtil._getClass(t);return n.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(n)},addClass:function(t,e){if(t.classList!==i)for(var n=o.Util.splitWords(e),s=0,a=n.length;a>s;s++)t.classList.add(n[s]);else if(!o.DomUtil.hasClass(t,e)){var r=o.DomUtil._getClass(t);o.DomUtil._setClass(t,(r?r+" ":"")+e)}},removeClass:function(t,e){t.classList!==i?t.classList.remove(e):o.DomUtil._setClass(t,o.Util.trim((" "+o.DomUtil._getClass(t)+" ").replace(" "+e+" "," ")))},_setClass:function(t,e){t.className.baseVal===i?t.className=e:t.className.baseVal=e},_getClass:function(t){return t.className.baseVal===i?t.className:t.className.baseVal},setOpacity:function(t,e){if("opacity"in t.style)t.style.opacity=e;else if("filter"in t.style){var i=!1,n="DXImageTransform.Microsoft.Alpha";try{i=t.filters.item(n)}catch(o){if(1===e)return}e=Math.round(100*e),i?(i.Enabled=100!==e,i.Opacity=e):t.style.filter+=" progid:"+n+"(opacity="+e+")"}},testProp:function(t){for(var i=e.documentElement.style,n=0;ni||i===e?e:t),new o.LatLng(this.lat,i)}},o.latLng=function(t,e){return t instanceof o.LatLng?t:o.Util.isArray(t)?"number"==typeof t[0]||"string"==typeof t[0]?new o.LatLng(t[0],t[1],t[2]):null:t===i||null===t?t:"object"==typeof t&&"lat"in t?new o.LatLng(t.lat,"lng"in t?t.lng:t.lon):e===i?null:new o.LatLng(t,e)},o.LatLngBounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.LatLngBounds.prototype={extend:function(t){if(!t)return this;var e=o.latLng(t);return t=null!==e?e:o.latLngBounds(t),t instanceof o.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new o.LatLng(t.lat,t.lng),this._northEast=new o.LatLng(t.lat,t.lng)):t instanceof o.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var e=this._southWest,i=this._northEast,n=Math.abs(e.lat-i.lat)*t,s=Math.abs(e.lng-i.lng)*t;return new o.LatLngBounds(new o.LatLng(e.lat-n,e.lng-s),new o.LatLng(i.lat+n,i.lng+s))},getCenter:function(){return new o.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new o.LatLng(this.getNorth(),this.getWest())},getSouthEast:function(){return new o.LatLng(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t="number"==typeof t[0]||t instanceof o.LatLng?o.latLng(t):o.latLngBounds(t);var e,i,n=this._southWest,s=this._northEast;return t instanceof o.LatLngBounds?(e=t.getSouthWest(),i=t.getNorthEast()):e=i=t,e.lat>=n.lat&&i.lat<=s.lat&&e.lng>=n.lng&&i.lng<=s.lng},intersects:function(t){t=o.latLngBounds(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),s=t.getNorthEast(),a=s.lat>=e.lat&&n.lat<=i.lat,r=s.lng>=e.lng&&n.lng<=i.lng;return a&&r},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(",")},equals:function(t){return t?(t=o.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},o.latLngBounds=function(t,e){return!t||t instanceof o.LatLngBounds?t:new o.LatLngBounds(t,e)},o.Projection={},o.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=t.lng*e,a=n*e;return a=Math.log(Math.tan(Math.PI/4+a/2)),new o.Point(s,a)},unproject:function(t){var e=o.LatLng.RAD_TO_DEG,i=t.x*e,n=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*e;return new o.LatLng(n,i)}},o.Projection.LonLat={project:function(t){return new o.Point(t.lng,t.lat)},unproject:function(t){return new o.LatLng(t.y,t.x)}},o.CRS={latLngToPoint:function(t,e){var i=this.projection.project(t),n=this.scale(e);return this.transformation._transform(i,n)},pointToLatLng:function(t,e){var i=this.scale(e),n=this.transformation.untransform(t,i);return this.projection.unproject(n)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)},getSize:function(t){var e=this.scale(t);return o.point(e,e)}},o.CRS.Simple=o.extend({},o.CRS,{projection:o.Projection.LonLat,transformation:new o.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),o.CRS.EPSG3857=o.extend({},o.CRS,{code:"EPSG:3857",projection:o.Projection.SphericalMercator,transformation:new o.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var e=this.projection.project(t),i=6378137;return e.multiplyBy(i)}}),o.CRS.EPSG900913=o.extend({},o.CRS.EPSG3857,{code:"EPSG:900913"}),o.CRS.EPSG4326=o.extend({},o.CRS,{code:"EPSG:4326",projection:o.Projection.LonLat,transformation:new o.Transformation(1/360,.5,-1/360,.5)}),o.Map=o.Class.extend({includes:o.Mixin.Events,options:{crs:o.CRS.EPSG3857,fadeAnimation:o.DomUtil.TRANSITION&&!o.Browser.android23,trackResize:!0,markerZoomAnimation:o.DomUtil.TRANSITION&&o.Browser.any3d},initialize:function(t,e){e=o.setOptions(this,e),this._initContainer(t),this._initLayout(),this._onResize=o.bind(this._onResize,this),this._initEvents(),e.maxBounds&&this.setMaxBounds(e.maxBounds),e.center&&e.zoom!==i&&this.setView(o.latLng(e.center),e.zoom,{reset:!0}),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0,this.callInitHooks(),this._addLayers(e.layers)},setView:function(t,e){return e=e===i?this.getZoom():e,this._resetView(o.latLng(t),this._limitZoom(e)),this},setZoom:function(t,e){return this._loaded?this.setView(this.getCenter(),t,{zoom:e}):(this._zoom=this._limitZoom(t),this)},zoomIn:function(t,e){return this.setZoom(this._zoom+(t||1),e)},zoomOut:function(t,e){return this.setZoom(this._zoom-(t||1),e)},setZoomAround:function(t,e,i){var n=this.getZoomScale(e),s=this.getSize().divideBy(2),a=t instanceof o.Point?t:this.latLngToContainerPoint(t),r=a.subtract(s).multiplyBy(1-1/n),h=this.containerPointToLatLng(s.add(r));return this.setView(h,e,{zoom:i})},fitBounds:function(t,e){e=e||{},t=t.getBounds?t.getBounds():o.latLngBounds(t);var i=o.point(e.paddingTopLeft||e.padding||[0,0]),n=o.point(e.paddingBottomRight||e.padding||[0,0]),s=this.getBoundsZoom(t,!1,i.add(n));s=e.maxZoom?Math.min(e.maxZoom,s):s;var a=n.subtract(i).divideBy(2),r=this.project(t.getSouthWest(),s),h=this.project(t.getNorthEast(),s),l=this.unproject(r.add(h).divideBy(2).add(a),s);return this.setView(l,s,e)},fitWorld:function(t){return this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,e){return this.setView(t,this._zoom,{pan:e})},panBy:function(t){return this.fire("movestart"),this._rawPanBy(o.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){return t=o.latLngBounds(t),this.options.maxBounds=t,t?(this._loaded&&this._panInsideMaxBounds(),this.on("moveend",this._panInsideMaxBounds,this)):this.off("moveend",this._panInsideMaxBounds,this)},panInsideBounds:function(t,e){var i=this.getCenter(),n=this._limitCenter(i,this._zoom,t);return i.equals(n)?this:this.panTo(n,e)},addLayer:function(t){var e=o.stamp(t);return this._layers[e]?this:(this._layers[e]=t,!t.options||isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[e]=t,this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum++,this._tileLayersToLoad++,t.on("load",this._onTileLayerLoad,this)),this._loaded&&this._layerAdd(t),this)},removeLayer:function(t){var e=o.stamp(t);return this._layers[e]?(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&this.fire("layerremove",{layer:t}),this._zoomBoundLayers[e]&&(delete this._zoomBoundLayers[e],this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum--,this._tileLayersToLoad--,t.off("load",this._onTileLayerLoad,this)),this):this},hasLayer:function(t){return t?o.stamp(t)in this._layers:!1},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},invalidateSize:function(t){if(!this._loaded)return this;t=o.extend({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._initialCenter=null;var i=this.getSize(),n=e.divideBy(2).round(),s=i.divideBy(2).round(),a=n.subtract(s);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(o.bind(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i})):this},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){this._loaded&&this.fire("unload"),this._initEvents("off");try{delete this._container._leaflet}catch(t){this._container._leaflet=i}return this._clearPanes(),this._clearControlPos&&this._clearControlPos(),this._clearHandlers(),this},getCenter:function(){return this._checkIfLoaded(),this._initialCenter&&!this._moved()?this._initialCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new o.LatLngBounds(e,i)},getMinZoom:function(){return this.options.minZoom===i?this._layersMinZoom===i?0:this._layersMinZoom:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===i?this._layersMaxZoom===i?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=o.latLngBounds(t);var n,s=this.getMinZoom()-(e?1:0),a=this.getMaxZoom(),r=this.getSize(),h=t.getNorthWest(),l=t.getSouthEast(),u=!0;i=o.point(i||[0,0]);do s++,n=this.project(l,s).subtract(this.project(h,s)).add(i),u=e?n.x=s);return u&&e?null:e?s:s-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new o.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new o.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var e=this.options.crs;return e.scale(t)/e.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,e){return e=e===i?this._zoom:e,this.options.crs.latLngToPoint(o.latLng(t),e)},unproject:function(t,e){return e=e===i?this._zoom:e,this.options.crs.pointToLatLng(o.point(t),e)},layerPointToLatLng:function(t){var e=o.point(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(o.latLng(t))._round();return e._subtract(this.getPixelOrigin())},containerPointToLayerPoint:function(t){return o.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return o.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(o.point(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(o.latLng(t)))},mouseEventToContainerPoint:function(t){return o.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=o.DomUtil.get(t);if(!e)throw new Error("Map container not found.");if(e._leaflet)throw new Error("Map container is already initialized.");e._leaflet=!0},_initLayout:function(){var t=this._container;o.DomUtil.addClass(t,"leaflet-container"+(o.Browser.touch?" leaflet-touch":"")+(o.Browser.retina?" leaflet-retina":"")+(o.Browser.ielt9?" leaflet-oldie":"")+(this.options.fadeAnimation?" leaflet-fade-anim":""));var e=o.DomUtil.getStyle(t,"position");"absolute"!==e&&"relative"!==e&&"fixed"!==e&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var e=" leaflet-zoom-hide";this.options.markerZoomAnimation||(o.DomUtil.addClass(t.markerPane,e),o.DomUtil.addClass(t.shadowPane,e),o.DomUtil.addClass(t.popupPane,e))},_createPane:function(t,e){return o.DomUtil.create("div",t,e||this._panes.objectsPane)},_clearPanes:function(){this._container.removeChild(this._mapPane)},_addLayers:function(t){t=t?o.Util.isArray(t)?t:[t]:[];for(var e=0,i=t.length;i>e;e++)this.addLayer(t[e])},_resetView:function(t,e,i,n){var s=this._zoom!==e;n||(this.fire("movestart"),s&&this.fire("zoomstart")),this._zoom=e,this._initialCenter=t,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),i?this._initialTopLeftPoint._add(this._getMapPanePos()):o.DomUtil.setPosition(this._mapPane,new o.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!i}),a&&(this.fire("load"),this.eachLayer(this._layerAdd,this)),this.fire("move"),(s||n)&&this.fire("zoomend"),this.fire("moveend",{hard:!i})},_rawPanBy:function(t){o.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_updateZoomLevels:function(){var t,e=1/0,n=-(1/0),o=this._getZoomSpan();for(t in this._zoomBoundLayers){var s=this._zoomBoundLayers[t];isNaN(s.options.minZoom)||(e=Math.min(e,s.options.minZoom)),isNaN(s.options.maxZoom)||(n=Math.max(n,s.options.maxZoom))}t===i?this._layersMaxZoom=this._layersMinZoom=i:(this._layersMaxZoom=n,this._layersMinZoom=e),o!==this._getZoomSpan()&&this.fire("zoomlevelschange")},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(e){if(o.DomEvent){e=e||"on",o.DomEvent[e](this._container,"click",this._onMouseClick,this);var i,n,s=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,n=s.length;n>i;i++)o.DomEvent[e](this._container,s[i],this._fireMouseEvent,this);this.options.trackResize&&o.DomEvent[e](t,"resize",this._onResize,this)}},_onResize:function(){o.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=o.Util.requestAnimFrame(function(){this.invalidateSize({debounceMoveend:!0})},this,!1,this._container)},_onMouseClick:function(t){!this._loaded||!t._simulated&&(this.dragging&&this.dragging.moved()||this.boxZoom&&this.boxZoom.moved())||o.DomEvent._skipped(t)||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded&&!o.DomEvent._skipped(t)){var e=t.type;if(e="mouseenter"===e?"mouseover":"mouseleave"===e?"mouseout":e,this.hasEventListeners(e)){"contextmenu"===e&&o.DomEvent.preventDefault(t);var i=this.mouseEventToContainerPoint(t),n=this.containerPointToLayerPoint(i),s=this.layerPointToLatLng(n);this.fire(e,{latlng:s,layerPoint:n,containerPoint:i,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this.fire("tilelayersload")},_clearHandlers:function(){for(var t=0,e=this._handlers.length;e>t;t++)this._handlers[t].disable()},whenReady:function(t,e){return this._loaded?t.call(e||this,this):this.on("load",t,e),this},_layerAdd:function(t){t.onAdd(this),this.fire("layeradd",{layer:t})},_getMapPanePos:function(){return o.DomUtil.getPosition(this._mapPane)},_moved:function(){var t=this._getMapPanePos();return t&&!t.equals([0,0])},_getTopLeftPoint:function(){return this.getPixelOrigin().subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,e){var i=this.getSize()._divideBy(2);return this.project(t,e)._subtract(i)._round()},_latLngToNewLayerPoint:function(t,e,i){var n=this._getNewTopLeftPoint(i,e).add(this._getMapPanePos());return this.project(t,e)._subtract(n)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,e,i){if(!i)return t;var n=this.project(t,e),s=this.getSize().divideBy(2),a=new o.Bounds(n.subtract(s),n.add(s)),r=this._getBoundsOffset(a,i,e);return this.unproject(n.add(r),e)},_limitOffset:function(t,e){if(!e)return t;var i=this.getPixelBounds(),n=new o.Bounds(i.min.add(t),i.max.add(t));return t.add(this._getBoundsOffset(n,e))},_getBoundsOffset:function(t,e,i){var n=this.project(e.getNorthWest(),i).subtract(t.min),s=this.project(e.getSouthEast(),i).subtract(t.max),a=this._rebound(n.x,-s.x),r=this._rebound(n.y,-s.y);return new o.Point(a,r)},_rebound:function(t,e){return t+e>0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom();return Math.max(e,Math.min(i,t))}}),o.map=function(t,e){return new o.Map(t,e)},o.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.314245179,R_MAJOR:6378137,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=this.R_MAJOR,a=this.R_MINOR,r=t.lng*e*s,h=n*e,l=a/s,u=Math.sqrt(1-l*l),c=u*Math.sin(h);c=Math.pow((1-c)/(1+c),.5*u);var d=Math.tan(.5*(.5*Math.PI-h))/c;return h=-s*Math.log(d),new o.Point(r,h)},unproject:function(t){for(var e,i=o.LatLng.RAD_TO_DEG,n=this.R_MAJOR,s=this.R_MINOR,a=t.x*i/n,r=s/n,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),u=Math.PI/2-2*Math.atan(l),c=15,d=1e-7,p=c,_=.1;Math.abs(_)>d&&--p>0;)e=h*Math.sin(u),_=Math.PI/2-2*Math.atan(l*Math.pow((1-e)/(1+e),.5*h))-u,u+=_;return new o.LatLng(u*i,a)}},o.CRS.EPSG3395=o.extend({},o.CRS,{code:"EPSG:3395",projection:o.Projection.Mercator,
+transformation:function(){var t=o.Projection.Mercator,e=t.R_MAJOR,i=.5/(Math.PI*e);return new o.Transformation(i,.5,-i,.5)}()}),o.TileLayer=o.Class.extend({includes:o.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:o.Browser.mobile,updateWhenIdle:o.Browser.mobile},initialize:function(t,e){e=o.setOptions(this,e),e.detectRetina&&o.Browser.retina&&e.maxZoom>0&&(e.tileSize=Math.floor(e.tileSize/2),e.zoomOffset++,e.minZoom>0&&e.minZoom--,this.options.maxZoom--),e.bounds&&(e.bounds=o.latLngBounds(e.bounds)),this._url=t;var i=this.options.subdomains;"string"==typeof i&&(this.options.subdomains=i.split(""))},onAdd:function(t){this._map=t,this._animated=t._zoomAnimated,this._initContainer(),t.on({viewreset:this._reset,moveend:this._update},this),this._animated&&t.on({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||(this._limitedUpdate=o.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._reset,moveend:this._update},this),this._animated&&t.off({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,e){return this._url=t,e||this.redraw(),this},redraw:function(){return this._map&&(this._reset({hard:!0}),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==i&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,e){var i,n,o,s=t.children,a=-e(1/0,-(1/0));for(n=0,o=s.length;o>n;n++)s[n]!==this._container&&(i=parseInt(s[n].style.zIndex,10),isNaN(i)||(a=e(a,i)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+e(1,-1)},_updateOpacity:function(){var t,e=this._tiles;if(o.Browser.ielt9)for(t in e)o.DomUtil.setOpacity(e[t],this.options.opacity);else o.DomUtil.setOpacity(this._container,this.options.opacity)},_initContainer:function(){var t=this._map._panes.tilePane;if(!this._container){if(this._container=o.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),this._animated){var e="leaflet-tile-container";this._bgBuffer=o.DomUtil.create("div",e,this._container),this._tileContainer=o.DomUtil.create("div",e,this._container)}else this._tileContainer=this._container;t.appendChild(this._container),this.options.opacity<1&&this._updateOpacity()}},_reset:function(t){for(var e in this._tiles)this.fire("tileunload",{tile:this._tiles[e]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),this._tileContainer.innerHTML="",this._animated&&t&&t.hard&&this._clearBgBuffer(),this._initContainer()},_getTileSize:function(){var t=this._map,e=t.getZoom()+this.options.zoomOffset,i=this.options.maxNativeZoom,n=this.options.tileSize;return i&&e>i&&(n=Math.round(t.getZoomScale(e)/t.getZoomScale(i)*n)),n},_update:function(){if(this._map){var t=this._map,e=t.getPixelBounds(),i=t.getZoom(),n=this._getTileSize();if(!(i>this.options.maxZoom||in;n++)this._addTile(a[n],l);this._tileContainer.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;var e=this.options;if(!e.continuousWorld){var i=this._getWrapTileNum();if(e.noWrap&&(t.x<0||t.x>=i.x)||t.y<0||t.y>=i.y)return!1}if(e.bounds){var n=this._getTileSize(),o=t.multiplyBy(n),s=o.add([n,n]),a=this._map.unproject(o),r=this._map.unproject(s);if(e.continuousWorld||e.noWrap||(a=a.wrap(),r=r.wrap()),!e.bounds.intersects([a,r]))return!1}return!0},_removeOtherTiles:function(t){var e,i,n,o;for(o in this._tiles)e=o.split(":"),i=parseInt(e[0],10),n=parseInt(e[1],10),(it.max.x||nt.max.y)&&this._removeTile(o)},_removeTile:function(t){var e=this._tiles[t];this.fire("tileunload",{tile:e,url:e.src}),this.options.reuseTiles?(o.DomUtil.removeClass(e,"leaflet-tile-loaded"),this._unusedTiles.push(e)):e.parentNode===this._tileContainer&&this._tileContainer.removeChild(e),o.Browser.android||(e.onload=null,e.src=o.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,e){var i=this._getTilePos(t),n=this._getTile();o.DomUtil.setPosition(n,i,o.Browser.chrome),this._tiles[t.x+":"+t.y]=n,this._loadTile(n,t),n.parentNode!==this._tileContainer&&e.appendChild(n)},_getZoomForUrl:function(){var t=this.options,e=this._map.getZoom();return t.zoomReverse&&(e=t.maxZoom-e),e+=t.zoomOffset,t.maxNativeZoom?Math.min(e,t.maxNativeZoom):e},_getTilePos:function(t){var e=this._map.getPixelOrigin(),i=this._getTileSize();return t.multiplyBy(i).subtract(e)},getTileUrl:function(t){return o.Util.template(this._url,o.extend({s:this._getSubdomain(t),z:t.z,x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){var t=this._map.options.crs,e=t.getSize(this._map.getZoom());return e.divideBy(this._getTileSize())._floor()},_adjustTilePoint:function(t){var e=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%e.x+e.x)%e.x),this.options.tms&&(t.y=e.y-t.y-1),t.z=this._getZoomForUrl()},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=o.DomUtil.create("img","leaflet-tile");return t.style.width=t.style.height=this._getTileSize()+"px",t.galleryimg="no",t.onselectstart=t.onmousemove=o.Util.falseFn,o.Browser.ielt9&&this.options.opacity!==i&&o.DomUtil.setOpacity(t,this.options.opacity),o.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden"),t},_loadTile:function(t,e){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,this._adjustTilePoint(e),t.src=this.getTileUrl(e),this.fire("tileloadstart",{tile:t,url:t.src})},_tileLoaded:function(){this._tilesToLoad--,this._animated&&o.DomUtil.addClass(this._tileContainer,"leaflet-zoom-animated"),this._tilesToLoad||(this.fire("load"),this._animated&&(clearTimeout(this._clearBgBufferTimer),this._clearBgBufferTimer=setTimeout(o.bind(this._clearBgBuffer,this),500)))},_tileOnLoad:function(){var t=this._layer;this.src!==o.Util.emptyImageUrl&&(o.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var e=t.options.errorTileUrl;e&&(this.src=e),t._tileLoaded()}}),o.tileLayer=function(t,e){return new o.TileLayer(t,e)},o.TileLayer.WMS=o.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,e){this._url=t;var i=o.extend({},this.defaultWmsParams),n=e.tileSize||this.options.tileSize;e.detectRetina&&o.Browser.retina?i.width=i.height=2*n:i.width=i.height=n;for(var s in e)this.options.hasOwnProperty(s)||"crs"===s||(i[s]=e[s]);this.wmsParams=i,o.setOptions(this,e)},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,o.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._map,i=this.options.tileSize,n=t.multiplyBy(i),s=n.add([i,i]),a=this._crs.project(e.unproject(n,t.z)),r=this._crs.project(e.unproject(s,t.z)),h=this._wmsVersion>=1.3&&this._crs===o.CRS.EPSG4326?[r.y,a.x,a.y,r.x].join(","):[a.x,r.y,r.x,a.y].join(","),l=o.Util.template(this._url,{s:this._getSubdomain(t)});return l+o.Util.getParamString(this.wmsParams,l,!0)+"&BBOX="+h},setParams:function(t,e){return o.extend(this.wmsParams,t),e||this.redraw(),this}}),o.tileLayer.wms=function(t,e){return new o.TileLayer.WMS(t,e)},o.TileLayer.Canvas=o.TileLayer.extend({options:{async:!1},initialize:function(t){o.setOptions(this,t)},redraw:function(){this._map&&(this._reset({hard:!0}),this._update());for(var t in this._tiles)this._redrawTile(this._tiles[t]);return this},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTile:function(){var t=o.DomUtil.create("canvas","leaflet-tile");return t.width=t.height=this.options.tileSize,t.onselectstart=t.onmousemove=o.Util.falseFn,t},_loadTile:function(t,e){t._layer=this,t._tilePoint=e,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),o.tileLayer.canvas=function(t){return new o.TileLayer.Canvas(t)},o.ImageOverlay=o.Class.extend({includes:o.Mixin.Events,options:{opacity:1},initialize:function(t,e,i){this._url=t,this._bounds=o.latLngBounds(e),o.setOptions(this,i)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&o.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},setUrl:function(t){this._url=t,this._image.src=this._url},getAttribution:function(){return this.options.attribution},_initImage:function(){this._image=o.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&o.Browser.any3d?o.DomUtil.addClass(this._image,"leaflet-zoom-animated"):o.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),o.extend(this._image,{galleryimg:"no",onselectstart:o.Util.falseFn,onmousemove:o.Util.falseFn,onload:o.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var e=this._map,i=this._image,n=e.getZoomScale(t.zoom),s=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=e._latLngToNewLayerPoint(s,t.zoom,t.center),h=e._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/n)));i.style[o.DomUtil.TRANSFORM]=o.DomUtil.getTranslateString(l)+" scale("+n+") "},_reset:function(){var t=this._image,e=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),i=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(e);o.DomUtil.setPosition(t,e),t.style.width=i.x+"px",t.style.height=i.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){o.DomUtil.setOpacity(this._image,this.options.opacity)}}),o.imageOverlay=function(t,e,i){return new o.ImageOverlay(t,e,i)},o.Icon=o.Class.extend({options:{className:""},initialize:function(t){o.setOptions(this,t)},createIcon:function(t){return this._createIcon("icon",t)},createShadow:function(t){return this._createIcon("shadow",t)},_createIcon:function(t,e){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw new Error("iconUrl not set in Icon options (see the docs).");return null}var n;return n=e&&"IMG"===e.tagName?this._createImg(i,e):this._createImg(i),this._setIconStyles(n,t),n},_setIconStyles:function(t,e){var i,n=this.options,s=o.point(n[e+"Size"]);i="shadow"===e?o.point(n.shadowAnchor||n.iconAnchor):o.point(n.iconAnchor),!i&&s&&(i=s.divideBy(2,!0)),t.className="leaflet-marker-"+e+" "+n.className,i&&(t.style.marginLeft=-i.x+"px",t.style.marginTop=-i.y+"px"),s&&(t.style.width=s.x+"px",t.style.height=s.y+"px")},_createImg:function(t,i){return i=i||e.createElement("img"),i.src=t,i},_getIconUrl:function(t){return o.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),o.icon=function(t){return new o.Icon(t)},o.Icon.Default=o.Icon.extend({options:{iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41]},_getIconUrl:function(t){var e=t+"Url";if(this.options[e])return this.options[e];o.Browser.retina&&"icon"===t&&(t+="-2x");var i=o.Icon.Default.imagePath;if(!i)throw new Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return i+"/marker-"+t+".png"}}),o.Icon.Default.imagePath=function(){var t,i,n,o,s,a=e.getElementsByTagName("script"),r=/[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,i=a.length;i>t;t++)if(n=a[t].src,o=n.match(r))return s=n.split(r)[0],(s?s+"/":"")+"images"}(),o.Marker=o.Class.extend({includes:o.Mixin.Events,options:{icon:new o.Icon.Default,title:"",alt:"",clickable:!0,draggable:!1,keyboard:!0,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,e){o.setOptions(this,e),this._latlng=o.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),this.fire("add"),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this.dragging&&this.dragging.disable(),this._removeIcon(),this._removeShadow(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=o.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup),this},update:function(){return this._icon&&this._setPos(this._map.latLngToLayerPoint(this._latlng).round()),this},_initIcon:function(){var t=this.options,e=this._map,i=e.options.zoomAnimation&&e.options.markerZoomAnimation,n=i?"leaflet-zoom-animated":"leaflet-zoom-hide",s=t.icon.createIcon(this._icon),a=!1;s!==this._icon&&(this._icon&&this._removeIcon(),a=!0,t.title&&(s.title=t.title),t.alt&&(s.alt=t.alt)),o.DomUtil.addClass(s,n),t.keyboard&&(s.tabIndex="0"),this._icon=s,this._initInteraction(),t.riseOnHover&&o.DomEvent.on(s,"mouseover",this._bringToFront,this).on(s,"mouseout",this._resetZIndex,this);var r=t.icon.createShadow(this._shadow),h=!1;r!==this._shadow&&(this._removeShadow(),h=!0),r&&o.DomUtil.addClass(r,n),this._shadow=r,t.opacity<1&&this._updateOpacity();var l=this._map._panes;a&&l.markerPane.appendChild(this._icon),r&&h&&l.shadowPane.appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&o.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),this._map._panes.markerPane.removeChild(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&this._map._panes.shadowPane.removeChild(this._shadow),this._shadow=null},_setPos:function(t){o.DomUtil.setPosition(this._icon,t),this._shadow&&o.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(e)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,e=["dblclick","mousedown","mouseover","mouseout","contextmenu"];o.DomUtil.addClass(t,"leaflet-clickable"),o.DomEvent.on(t,"click",this._onMouseClick,this),o.DomEvent.on(t,"keypress",this._onKeyPress,this);for(var i=0;is?(e.height=s+"px",o.DomUtil.addClass(t,a)):o.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),e=this._animated,i=o.point(this.options.offset);e&&o.DomUtil.setPosition(this._container,t),this._containerBottom=-i.y-(e?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+i.x+(e?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);o.DomUtil.setPosition(this._container,e)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,e=this._container.offsetHeight,i=this._containerWidth,n=new o.Point(this._containerLeft,-e-this._containerBottom);this._animated&&n._add(o.DomUtil.getPosition(this._container));var s=t.layerPointToContainerPoint(n),a=o.point(this.options.autoPanPadding),r=o.point(this.options.autoPanPaddingTopLeft||a),h=o.point(this.options.autoPanPaddingBottomRight||a),l=t.getSize(),u=0,c=0;s.x+i+h.x>l.x&&(u=s.x+i-l.x+h.x),s.x-u-r.x<0&&(u=s.x-r.x),s.y+e+h.y>l.y&&(c=s.y+e-l.y+h.y),s.y-c-r.y<0&&(c=s.y-r.y),(u||c)&&t.fire("autopanstart").panBy([u,c])}},_onCloseButtonClick:function(t){this._close(),o.DomEvent.stop(t)}}),o.popup=function(t,e){return new o.Popup(t,e)},o.Map.include({openPopup:function(t,e,i){if(this.closePopup(),!(t instanceof o.Popup)){var n=t;t=new o.Popup(i).setLatLng(e).setContent(n)}return t._isOpen=!0,this._popup=t,this.addLayer(t)},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&(this.removeLayer(t),t._isOpen=!1),this}}),o.Marker.include({openPopup:function(){return this._popup&&this._map&&!this._map.hasLayer(this._popup)&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(){return this._popup&&(this._popup._isOpen?this.closePopup():this.openPopup()),this},bindPopup:function(t,e){var i=o.point(this.options.icon.options.popupAnchor||[0,0]);return i=i.add(o.Popup.prototype.options.offset),e&&e.offset&&(i=i.add(e.offset)),e=o.extend({offset:i},e),this._popupHandlersAdded||(this.on("click",this.togglePopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popupHandlersAdded=!0),t instanceof o.Popup?(o.setOptions(t,e),this._popup=t,t._source=this):this._popup=new o.Popup(e,this).setContent(t),this},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.togglePopup,this).off("remove",this.closePopup,this).off("move",this._movePopup,this),this._popupHandlersAdded=!1),this},getPopup:function(){return this._popup},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),o.LayerGroup=o.Class.extend({initialize:function(t){this._layers={};var e,i;if(t)for(e=0,i=t.length;i>e;e++)this.addLayer(t[e])},addLayer:function(t){var e=this.getLayerId(t);return this._layers[e]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var e=t in this._layers?t:this.getLayerId(t);return this._map&&this._layers[e]&&this._map.removeLayer(this._layers[e]),delete this._layers[e],this},hasLayer:function(t){return t?t in this._layers||this.getLayerId(t)in this._layers:!1},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var e,i,n=Array.prototype.slice.call(arguments,1);for(e in this._layers)i=this._layers[e],i[t]&&i[t].apply(i,n);return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},getLayer:function(t){return this._layers[t]},getLayers:function(){var t=[];for(var e in this._layers)t.push(this._layers[e]);return t},setZIndex:function(t){return this.invoke("setZIndex",t)},getLayerId:function(t){return o.stamp(t)}}),o.layerGroup=function(t){return new o.LayerGroup(t)},o.FeatureGroup=o.LayerGroup.extend({includes:o.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose"},addLayer:function(t){return this.hasLayer(t)?this:("on"in t&&t.on(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?(t in this._layers&&(t=this._layers[t]),"off"in t&&t.off(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})):this},bindPopup:function(t,e){return this._popupContent=t,this._popupOptions=e,this.invoke("bindPopup",t,e)},openPopup:function(t){for(var e in this._layers){this._layers[e].openPopup(t);break}return this},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new o.LatLngBounds;return this.eachLayer(function(e){t.extend(e instanceof o.Marker?e.getLatLng():e.getBounds())}),t},_propagateEvent:function(t){t=o.extend({layer:t.target,target:this},t),this.fire(t.type,t)}}),o.featureGroup=function(t){return new o.FeatureGroup(t)},o.Path=o.Class.extend({includes:[o.Mixin.Events],statics:{CLIP_PADDING:function(){var e=o.Browser.mobile?1280:2e3,i=(e/Math.max(t.outerWidth,t.outerHeight)-1)/2;return Math.max(0,Math.min(.5,i))}()},options:{stroke:!0,color:"#0033ff",dashArray:null,lineCap:null,lineJoin:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){o.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,o.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return o.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),o.Map.include({_updatePathViewport:function(){var t=o.Path.CLIP_PADDING,e=this.getSize(),i=o.DomUtil.getPosition(this._mapPane),n=i.multiplyBy(-1)._subtract(e.multiplyBy(t)._round()),s=n.add(e.multiplyBy(1+2*t)._round());this._pathViewport=new o.Bounds(n,s)}}),o.Path.SVG_NS="http://www.w3.org/2000/svg",o.Browser.svg=!(!e.createElementNS||!e.createElementNS(o.Path.SVG_NS,"svg").createSVGRect),o.Path=o.Path.extend({statics:{SVG:o.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,e=this._container;return e&&t.lastChild!==e&&t.appendChild(e),this},bringToBack:function(){var t=this._map._pathRoot,e=this._container,i=t.firstChild;return e&&i!==e&&t.insertBefore(e,i),this},getPathString:function(){},_createElement:function(t){return e.createElementNS(o.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this.options.className&&o.DomUtil.addClass(this._path,this.options.className),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this.options.pointerEvents&&this._path.setAttribute("pointer-events",this.options.pointerEvents),this.options.clickable||this.options.pointerEvents||this._path.setAttribute("pointer-events","none"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray"),this.options.lineCap&&this._path.setAttribute("stroke-linecap",this.options.lineCap),this.options.lineJoin&&this._path.setAttribute("stroke-linejoin",this.options.lineJoin)):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(o.Browser.svg||!o.Browser.vml)&&o.DomUtil.addClass(this._path,"leaflet-clickable"),o.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],e=0;e ';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(n){return!1}}(),o.Path=o.Browser.svg||!o.Browser.vml?o.Path:o.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return e.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return e.createElement("')}}catch(t){return function(t){return e.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");o.DomUtil.addClass(t,"leaflet-vml-shape"+(this.options.className?" "+this.options.className:"")),this.options.clickable&&o.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,e=this._fill,i=this.options,n=this._container;n.stroked=i.stroke,n.filled=i.fill,i.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",n.appendChild(t)),t.weight=i.weight+"px",t.color=i.color,t.opacity=i.opacity,i.dashArray?t.dashStyle=o.Util.isArray(i.dashArray)?i.dashArray.join(" "):i.dashArray.replace(/( *, *)/g," "):t.dashStyle="",i.lineCap&&(t.endcap=i.lineCap.replace("butt","flat")),i.lineJoin&&(t.joinstyle=i.lineJoin)):t&&(n.removeChild(t),this._stroke=null),i.fill?(e||(e=this._fill=this._createElement("fill"),n.appendChild(e)),e.color=i.fillColor||i.color,e.opacity=i.fillOpacity):e&&(n.removeChild(e),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),o.Map.include(o.Browser.svg||!o.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=e.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),o.Browser.canvas=function(){return!!e.createElement("canvas").getContext}(),o.Path=o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?o.Path:o.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return o.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&(this._map.off("click",this._onClick,this),this._map.off("mousemove",this._onMouseMove,this)),this._requestUpdate(),this.fire("remove"),this._map=null},_requestUpdate:function(){this._map&&!o.Path._updateRequest&&(o.Path._updateRequest=o.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){o.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color),t.lineCap&&(this._ctx.lineCap=t.lineCap),t.lineJoin&&(this._ctx.lineJoin=t.lineJoin)},_drawPath:function(){var t,e,i,n,s,a;for(this._ctx.beginPath(),t=0,i=this._parts.length;i>t;t++){for(e=0,n=this._parts[t].length;n>e;e++)s=this._parts[t][e],a=(0===e?"move":"line")+"To",this._ctx[a](s.x,s.y);this instanceof o.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,e=this.options;this._drawPath(),t.save(),this._updateStyle(),e.fill&&(t.globalAlpha=e.fillOpacity,t.fill(e.fillRule||"evenodd")),e.stroke&&(t.globalAlpha=e.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&(this._map.on("mousemove",this._onMouseMove,this),this._map.on("click dblclick contextmenu",this._fireMouseEvent,this))},_fireMouseEvent:function(t){this._containsPoint(t.layerPoint)&&this.fire(t.type,t)},_onMouseMove:function(t){this._map&&!this._map._animatingZoom&&(this._containsPoint(t.layerPoint)?(this._ctx.canvas.style.cursor="pointer",this._mouseInside=!0,this.fire("mouseover",t)):this._mouseInside&&(this._ctx.canvas.style.cursor="",this._mouseInside=!1,this.fire("mouseout",t)))}}),o.Map.include(o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?{}:{_initPathRoot:function(){var t,i=this._pathRoot;i||(i=this._pathRoot=e.createElement("canvas"),i.style.position="absolute",t=this._canvasCtx=i.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(i),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,e=t.min,i=t.max.subtract(e),n=this._pathRoot;o.DomUtil.setPosition(n,e),n.width=i.x,n.height=i.y,n.getContext("2d").translate(-e.x,-e.y)}}}),o.LineUtil={simplify:function(t,e){if(!e||!t.length)return t.slice();var i=e*e;return t=this._reducePoints(t,i),t=this._simplifyDP(t,i)},pointToSegmentDistance:function(t,e,i){return Math.sqrt(this._sqClosestPointOnSegment(t,e,i,!0))},closestPointOnSegment:function(t,e,i){return this._sqClosestPointOnSegment(t,e,i)},_simplifyDP:function(t,e){var n=t.length,o=typeof Uint8Array!=i+""?Uint8Array:Array,s=new o(n);s[0]=s[n-1]=1,this._simplifyDPStep(t,s,e,0,n-1);var a,r=[];for(a=0;n>a;a++)s[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,e,i,n,o){var s,a,r,h=0;for(a=n+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[n],t[o],!0),r>h&&(s=a,h=r);h>i&&(e[s]=1,this._simplifyDPStep(t,e,i,n,s),this._simplifyDPStep(t,e,i,s,o))},_reducePoints:function(t,e){for(var i=[t[0]],n=1,o=0,s=t.length;s>n;n++)this._sqDist(t[n],t[o])>e&&(i.push(t[n]),o=n);return s-1>o&&i.push(t[s-1]),i},clipSegment:function(t,e,i,n){var o,s,a,r=n?this._lastCode:this._getBitCode(t,i),h=this._getBitCode(e,i);for(this._lastCode=h;;){if(!(r|h))return[t,e];if(r&h)return!1;o=r||h,s=this._getEdgeIntersection(t,e,o,i),a=this._getBitCode(s,i),o===r?(t=s,r=a):(e=s,h=a)}},_getEdgeIntersection:function(t,e,i,n){var s=e.x-t.x,a=e.y-t.y,r=n.min,h=n.max;return 8&i?new o.Point(t.x+s*(h.y-t.y)/a,h.y):4&i?new o.Point(t.x+s*(r.y-t.y)/a,r.y):2&i?new o.Point(h.x,t.y+a*(h.x-t.x)/s):1&i?new o.Point(r.x,t.y+a*(r.x-t.x)/s):void 0},_getBitCode:function(t,e){var i=0;return t.xe.max.x&&(i|=2),t.ye.max.y&&(i|=8),i},_sqDist:function(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n},_sqClosestPointOnSegment:function(t,e,i,n){var s,a=e.x,r=e.y,h=i.x-a,l=i.y-r,u=h*h+l*l;return u>0&&(s=((t.x-a)*h+(t.y-r)*l)/u,s>1?(a=i.x,r=i.y):s>0&&(a+=h*s,r+=l*s)),h=t.x-a,l=t.y-r,n?h*h+l*l:new o.Point(a,r)}},o.Polyline=o.Path.extend({initialize:function(t,e){o.Path.prototype.initialize.call(this,e),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,e=this._latlngs.length;e>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,e=this._parts.length,i="";e>t;t++)i+=this._getPathPartStr(this._parts[t]);return i},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(o.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs,!0),this.redraw(),t},closestLayerPoint:function(t){for(var e,i,n=1/0,s=this._parts,a=null,r=0,h=s.length;h>r;r++)for(var l=s[r],u=1,c=l.length;c>u;u++){e=l[u-1],i=l[u];var d=o.LineUtil._sqClosestPointOnSegment(t,e,i,!0);n>d&&(n=d,a=o.LineUtil._sqClosestPointOnSegment(t,e,i))}return a&&(a.distance=Math.sqrt(n)),a},getBounds:function(){return new o.LatLngBounds(this.getLatLngs())},_convertLatLngs:function(t,e){var i,n,s=e?t:[];for(i=0,n=t.length;n>i;i++){if(o.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;s[i]=o.latLng(t[i])}return s},_initEvents:function(){o.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var e,i=o.Path.VML,n=0,s=t.length,a="";s>n;n++)e=t[n],i&&e._round(),a+=(n?"L":"M")+e.x+" "+e.y;return a},_clipPoints:function(){var t,e,i,n=this._originalPoints,s=n.length;if(this.options.noClip)return void(this._parts=[n]);this._parts=[];var a=this._parts,r=this._map._pathViewport,h=o.LineUtil;for(t=0,e=0;s-1>t;t++)i=h.clipSegment(n[t],n[t+1],r,t),i&&(a[e]=a[e]||[],a[e].push(i[0]),(i[1]!==n[t+1]||t===s-2)&&(a[e].push(i[1]),e++))},_simplifyPoints:function(){for(var t=this._parts,e=o.LineUtil,i=0,n=t.length;n>i;i++)t[i]=e.simplify(t[i],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),o.Path.prototype._updatePath.call(this))}}),o.polyline=function(t,e){return new o.Polyline(t,e)},o.PolyUtil={},o.PolyUtil.clipPolygon=function(t,e){var i,n,s,a,r,h,l,u,c,d=[1,4,2,8],p=o.LineUtil;for(n=0,l=t.length;l>n;n++)t[n]._code=p._getBitCode(t[n],e);for(a=0;4>a;a++){for(u=d[a],i=[],n=0,l=t.length,s=l-1;l>n;s=n++)r=t[n],h=t[s],r._code&u?h._code&u||(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)):(h._code&u&&(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)),i.push(r));t=i}return t},o.Polygon=o.Polyline.extend({options:{fill:!0},initialize:function(t,e){o.Polyline.prototype.initialize.call(this,t,e),this._initWithHoles(t)},_initWithHoles:function(t){var e,i,n;if(t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0])for(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1),e=0,i=this._holes.length;i>e;e++)n=this._holes[e]=this._convertLatLngs(this._holes[e]),n[0].equals(n[n.length-1])&&n.pop();t=this._latlngs,t.length>=2&&t[0].equals(t[t.length-1])&&t.pop()},projectLatlngs:function(){if(o.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,e,i,n;for(t=0,i=this._holes.length;i>t;t++)for(this._holePoints[t]=[],e=0,n=this._holes[t].length;n>e;e++)this._holePoints[t][e]=this._map.latLngToLayerPoint(this._holes[t][e])}},setLatLngs:function(t){return t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0]?(this._initWithHoles(t),this.redraw()):o.Polyline.prototype.setLatLngs.call(this,t)},_clipPoints:function(){var t=this._originalPoints,e=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var i=0,n=this._parts.length;n>i;i++){var s=o.PolyUtil.clipPolygon(this._parts[i],this._map._pathViewport);s.length&&e.push(s)}this._parts=e}},_getPathPartStr:function(t){var e=o.Polyline.prototype._getPathPartStr.call(this,t);return e+(o.Browser.svg?"z":"x")}}),o.polygon=function(t,e){return new o.Polygon(t,e)},function(){function t(t){return o.FeatureGroup.extend({initialize:function(t,e){this._layers={},this._options=e,this.setLatLngs(t)},setLatLngs:function(e){var i=0,n=e.length;for(this.eachLayer(function(t){n>i?t.setLatLngs(e[i++]):this.removeLayer(t)},this);n>i;)this.addLayer(new t(e[i++],this._options));return this},getLatLngs:function(){var t=[];return this.eachLayer(function(e){t.push(e.getLatLngs())}),t}})}o.MultiPolyline=t(o.Polyline),o.MultiPolygon=t(o.Polygon),o.multiPolyline=function(t,e){return new o.MultiPolyline(t,e)},o.multiPolygon=function(t,e){return new o.MultiPolygon(t,e)}}(),o.Rectangle=o.Polygon.extend({initialize:function(t,e){o.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=o.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),o.rectangle=function(t,e){return new o.Rectangle(t,e)},o.Circle=o.Path.extend({initialize:function(t,e,i){o.Path.prototype.initialize.call(this,i),this._latlng=o.latLng(t),this._mRadius=e},options:{fill:!0},setLatLng:function(t){return this._latlng=o.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),e=this._latlng,i=this._map.latLngToLayerPoint([e.lat,e.lng-t]);this._point=this._map.latLngToLayerPoint(e),this._radius=Math.max(this._point.x-i.x,1)},getBounds:function(){var t=this._getLngRadius(),e=this._mRadius/40075017*360,i=this._latlng;return new o.LatLngBounds([i.lat-e,i.lng-t],[i.lat+e,i.lng+t])},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,e=this._radius;return this._checkIfEmpty()?"":o.Browser.svg?"M"+t.x+","+(t.y-e)+"A"+e+","+e+",0,1,1,"+(t.x-.1)+","+(t.y-e)+" z":(t._round(),e=Math.round(e),"AL "+t.x+","+t.y+" "+e+","+e+" 0,23592600")},getRadius:function(){return this._mRadius},_getLatRadius:function(){return this._mRadius/40075017*360},_getLngRadius:function(){return this._getLatRadius()/Math.cos(o.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,e=this._radius,i=this._point;return i.x-e>t.max.x||i.y-e>t.max.y||i.x+ei;i++)for(l=this._parts[i],n=0,r=l.length,s=r-1;r>n;s=n++)if((e||0!==n)&&(h=o.LineUtil.pointToSegmentDistance(t,l[s],l[n]),u>=h))return!0;return!1}}:{}),o.Polygon.include(o.Path.CANVAS?{_containsPoint:function(t){var e,i,n,s,a,r,h,l,u=!1;if(o.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(s=0,h=this._parts.length;h>s;s++)for(e=this._parts[s],a=0,l=e.length,r=l-1;l>a;r=a++)i=e[a],n=e[r],i.y>t.y!=n.y>t.y&&t.x<(n.x-i.x)*(t.y-i.y)/(n.y-i.y)+i.x&&(u=!u);return u}}:{}),o.Circle.include(o.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var e=this._point,i=this.options.stroke?this.options.weight/2:0;return t.distanceTo(e)<=this._radius+i}}:{}),o.CircleMarker.include(o.Path.CANVAS?{_updateStyle:function(){o.Path.prototype._updateStyle.call(this)}}:{}),o.GeoJSON=o.FeatureGroup.extend({initialize:function(t,e){o.setOptions(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,i,n,s=o.Util.isArray(t)?t:t.features;if(s){for(e=0,i=s.length;i>e;e++)n=s[e],(n.geometries||n.geometry||n.features||n.coordinates)&&this.addData(s[e]);return this}var a=this.options;if(!a.filter||a.filter(t)){var r=o.GeoJSON.geometryToLayer(t,a.pointToLayer,a.coordsToLatLng,a);return r.feature=o.GeoJSON.asFeature(t),r.defaultOptions=r.options,this.resetStyle(r),a.onEachFeature&&a.onEachFeature(t,r),this.addLayer(r)}},resetStyle:function(t){var e=this.options.style;e&&(o.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,e))},setStyle:function(t){this.eachLayer(function(e){this._setLayerStyle(e,t)},this)},_setLayerStyle:function(t,e){"function"==typeof e&&(e=e(t.feature)),t.setStyle&&t.setStyle(e)}}),o.extend(o.GeoJSON,{geometryToLayer:function(t,e,i,n){var s,a,r,h,l="Feature"===t.type?t.geometry:t,u=l.coordinates,c=[];switch(i=i||this.coordsToLatLng,l.type){case"Point":return s=i(u),e?e(t,s):new o.Marker(s);case"MultiPoint":for(r=0,h=u.length;h>r;r++)s=i(u[r]),c.push(e?e(t,s):new o.Marker(s));return new o.FeatureGroup(c);case"LineString":return a=this.coordsToLatLngs(u,0,i),new o.Polyline(a,n);case"Polygon":if(2===u.length&&!u[1].length)throw new Error("Invalid GeoJSON object.");return a=this.coordsToLatLngs(u,1,i),new o.Polygon(a,n);case"MultiLineString":return a=this.coordsToLatLngs(u,1,i),new o.MultiPolyline(a,n);case"MultiPolygon":return a=this.coordsToLatLngs(u,2,i),new o.MultiPolygon(a,n);case"GeometryCollection":for(r=0,h=l.geometries.length;h>r;r++)c.push(this.geometryToLayer({geometry:l.geometries[r],type:"Feature",properties:t.properties},e,i,n));return new o.FeatureGroup(c);default:throw new Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t){return new o.LatLng(t[1],t[0],t[2])},coordsToLatLngs:function(t,e,i){var n,o,s,a=[];for(o=0,s=t.length;s>o;o++)n=e?this.coordsToLatLngs(t[o],e-1,i):(i||this.coordsToLatLng)(t[o]),a.push(n);return a},latLngToCoords:function(t){var e=[t.lng,t.lat];return t.alt!==i&&e.push(t.alt),e},latLngsToCoords:function(t){for(var e=[],i=0,n=t.length;n>i;i++)e.push(o.GeoJSON.latLngToCoords(t[i]));return e},getFeature:function(t,e){return t.feature?o.extend({},t.feature,{geometry:e}):o.GeoJSON.asFeature(e)},asFeature:function(t){return"Feature"===t.type?t:{type:"Feature",properties:{},geometry:t}}});var a={toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"Point",coordinates:o.GeoJSON.latLngToCoords(this.getLatLng())})}};o.Marker.include(a),o.Circle.include(a),o.CircleMarker.include(a),o.Polyline.include({toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"LineString",coordinates:o.GeoJSON.latLngsToCoords(this.getLatLngs())})}}),o.Polygon.include({toGeoJSON:function(){var t,e,i,n=[o.GeoJSON.latLngsToCoords(this.getLatLngs())];if(n[0].push(n[0][0]),this._holes)for(t=0,e=this._holes.length;e>t;t++)i=o.GeoJSON.latLngsToCoords(this._holes[t]),i.push(i[0]),n.push(i);return o.GeoJSON.getFeature(this,{type:"Polygon",coordinates:n})}}),function(){function t(t){return function(){var e=[];return this.eachLayer(function(t){e.push(t.toGeoJSON().geometry.coordinates)}),o.GeoJSON.getFeature(this,{type:t,coordinates:e})}}o.MultiPolyline.include({toGeoJSON:t("MultiLineString")}),o.MultiPolygon.include({toGeoJSON:t("MultiPolygon")}),o.LayerGroup.include({toGeoJSON:function(){var e,i=this.feature&&this.feature.geometry,n=[];if(i&&"MultiPoint"===i.type)return t("MultiPoint").call(this);var s=i&&"GeometryCollection"===i.type;return this.eachLayer(function(t){t.toGeoJSON&&(e=t.toGeoJSON(),n.push(s?e.geometry:o.GeoJSON.asFeature(e)))}),s?o.GeoJSON.getFeature(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}})}(),o.geoJson=function(t,e){return new o.GeoJSON(t,e)},o.DomEvent={addListener:function(t,e,i,n){var s,a,r,h=o.stamp(i),l="_leaflet_"+e+h;return t[l]?this:(s=function(e){return i.call(n||t,e||o.DomEvent._getEvent())},o.Browser.pointer&&0===e.indexOf("touch")?this.addPointerListener(t,e,s,h):(o.Browser.touch&&"dblclick"===e&&this.addDoubleTapListener&&this.addDoubleTapListener(t,s,h),"addEventListener"in t?"mousewheel"===e?(t.addEventListener("DOMMouseScroll",s,!1),t.addEventListener(e,s,!1)):"mouseenter"===e||"mouseleave"===e?(a=s,r="mouseenter"===e?"mouseover":"mouseout",s=function(e){return o.DomEvent._checkMouse(t,e)?a(e):void 0},t.addEventListener(r,s,!1)):"click"===e&&o.Browser.android?(a=s,s=function(t){return o.DomEvent._filterClick(t,a)},t.addEventListener(e,s,!1)):t.addEventListener(e,s,!1):"attachEvent"in t&&t.attachEvent("on"+e,s),t[l]=s,this))},removeListener:function(t,e,i){var n=o.stamp(i),s="_leaflet_"+e+n,a=t[s];return a?(o.Browser.pointer&&0===e.indexOf("touch")?this.removePointerListener(t,e,n):o.Browser.touch&&"dblclick"===e&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,n):"removeEventListener"in t?"mousewheel"===e?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(e,a,!1)):"mouseenter"===e||"mouseleave"===e?t.removeEventListener("mouseenter"===e?"mouseover":"mouseout",a,!1):t.removeEventListener(e,a,!1):"detachEvent"in t&&t.detachEvent("on"+e,a),t[s]=null,this):this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,o.DomEvent._skipped(t),this},disableScrollPropagation:function(t){var e=o.DomEvent.stopPropagation;return o.DomEvent.on(t,"mousewheel",e).on(t,"MozMousePixelScroll",e)},disableClickPropagation:function(t){for(var e=o.DomEvent.stopPropagation,i=o.Draggable.START.length-1;i>=0;i--)o.DomEvent.on(t,o.Draggable.START[i],e);return o.DomEvent.on(t,"click",o.DomEvent._fakeStop).on(t,"dblclick",e)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return o.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,e){if(!e)return new o.Point(t.clientX,t.clientY);var i=e.getBoundingClientRect();return new o.Point(t.clientX-i.left-e.clientLeft,t.clientY-i.top-e.clientTop)},getWheelDelta:function(t){var e=0;return t.wheelDelta&&(e=t.wheelDelta/120),t.detail&&(e=-t.detail/3),e},_skipEvents:{},_fakeStop:function(t){o.DomEvent._skipEvents[t.type]=!0},_skipped:function(t){var e=this._skipEvents[t.type];return this._skipEvents[t.type]=!1,e},_checkMouse:function(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch(n){return!1}return i!==t},_getEvent:function(){var e=t.event;if(!e)for(var i=arguments.callee.caller;i&&(e=i.arguments[0],!e||t.Event!==e.constructor);)i=i.caller;return e},_filterClick:function(t,e){var i=t.timeStamp||t.originalEvent.timeStamp,n=o.DomEvent._lastClick&&i-o.DomEvent._lastClick;return n&&n>100&&500>n||t.target._simulatedClick&&!t._simulated?void o.DomEvent.stop(t):(o.DomEvent._lastClick=i,e(t))}},o.DomEvent.on=o.DomEvent.addListener,o.DomEvent.off=o.DomEvent.removeListener,o.Draggable=o.Class.extend({includes:o.Mixin.Events,statics:{START:o.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"}},initialize:function(t,e){this._element=t,this._dragStartTarget=e||t},enable:function(){if(!this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.on(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.off(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(this._moved=!1,!t.shiftKey&&(1===t.which||1===t.button||t.touches)&&(o.DomEvent.stopPropagation(t),!o.Draggable._disabled&&(o.DomUtil.disableImageDrag(),o.DomUtil.disableTextSelection(),!this._moving))){var i=t.touches?t.touches[0]:t;this._startPoint=new o.Point(i.clientX,i.clientY),this._startPos=this._newPos=o.DomUtil.getPosition(this._element),o.DomEvent.on(e,o.Draggable.MOVE[t.type],this._onMove,this).on(e,o.Draggable.END[t.type],this._onUp,this)}},_onMove:function(t){if(t.touches&&t.touches.length>1)return void(this._moved=!0);var i=t.touches&&1===t.touches.length?t.touches[0]:t,n=new o.Point(i.clientX,i.clientY),s=n.subtract(this._startPoint);(s.x||s.y)&&(o.Browser.touch&&Math.abs(s.x)+Math.abs(s.y)<3||(o.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=o.DomUtil.getPosition(this._element).subtract(s),o.DomUtil.addClass(e.body,"leaflet-dragging"),this._lastTarget=t.target||t.srcElement,o.DomUtil.addClass(this._lastTarget,"leaflet-drag-target")),this._newPos=this._startPos.add(s),this._moving=!0,o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget)))},_updatePosition:function(){this.fire("predrag"),o.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(){o.DomUtil.removeClass(e.body,"leaflet-dragging"),this._lastTarget&&(o.DomUtil.removeClass(this._lastTarget,"leaflet-drag-target"),this._lastTarget=null);for(var t in o.Draggable.MOVE)o.DomEvent.off(e,o.Draggable.MOVE[t],this._onMove).off(e,o.Draggable.END[t],this._onUp);o.DomUtil.enableImageDrag(),o.DomUtil.enableTextSelection(),this._moved&&this._moving&&(o.Util.cancelAnimFrame(this._animRequest),this.fire("dragend",{distance:this._newPos.distanceTo(this._startPos)})),this._moving=!1}}),o.Handler=o.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),o.Map.mergeOptions({dragging:!0,inertia:!o.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:o.Browser.touch?32:18,easeLinearity:.25,worldCopyJump:!1}),o.Map.Drag=o.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new o.Draggable(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this),t.whenReady(this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,e=this._lastPos=this._draggable._newPos;this._positions.push(e),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.project([0,180]).x},_onPreDrag:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,s=(n+e+i)%t-e-i,a=Math.abs(o+i)i.inertiaThreshold||!this._positions[0];if(e.fire("dragend",t),s)e.fire("moveend");else{var a=this._lastPos.subtract(this._positions[0]),r=(this._lastTime+n-this._times[0])/1e3,h=i.easeLinearity,l=a.multiplyBy(h/r),u=l.distanceTo([0,0]),c=Math.min(i.inertiaMaxSpeed,u),d=l.multiplyBy(c/u),p=c/(i.inertiaDeceleration*h),_=d.multiplyBy(-p/2).round();_.x&&_.y?(_=e._limitOffset(_,e.options.maxBounds),o.Util.requestAnimFrame(function(){e.panBy(_,{duration:p,easeLinearity:h,noMoveStart:!0})})):e.fire("moveend")}}}),o.Map.addInitHook("addHandler","dragging",o.Map.Drag),o.Map.mergeOptions({doubleClickZoom:!0}),o.Map.DoubleClickZoom=o.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom()+(t.originalEvent.shiftKey?-1:1);"center"===e.options.doubleClickZoom?e.setZoom(i):e.setZoomAround(t.containerPoint,i)}}),o.Map.addInitHook("addHandler","doubleClickZoom",o.Map.DoubleClickZoom),o.Map.mergeOptions({scrollWheelZoom:!0}),o.Map.ScrollWheelZoom=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),o.DomEvent.on(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault),this._delta=0},removeHooks:function(){o.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll),o.DomEvent.off(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault)},_onWheelScroll:function(t){var e=o.DomEvent.getWheelDelta(t);this._delta+=e,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var i=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(o.bind(this._performZoom,this),i),o.DomEvent.preventDefault(t),o.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,e=this._delta,i=t.getZoom();e=e>0?Math.ceil(e):Math.floor(e),e=Math.max(Math.min(e,4),-4),e=t._limitZoom(i+e)-i,this._delta=0,this._startTime=null,e&&("center"===t.options.scrollWheelZoom?t.setZoom(i+e):t.setZoomAround(this._lastMousePos,i+e))}}),o.Map.addInitHook("addHandler","scrollWheelZoom",o.Map.ScrollWheelZoom),o.extend(o.DomEvent,{_touchstart:o.Browser.msPointer?"MSPointerDown":o.Browser.pointer?"pointerdown":"touchstart",_touchend:o.Browser.msPointer?"MSPointerUp":o.Browser.pointer?"pointerup":"touchend",addDoubleTapListener:function(t,i,n){function s(t){var e;if(o.Browser.pointer?(_.push(t.pointerId),e=_.length):e=t.touches.length,!(e>1)){var i=Date.now(),n=i-(r||i);h=t.touches?t.touches[0]:t,l=n>0&&u>=n,r=i}}function a(t){if(o.Browser.pointer){var e=_.indexOf(t.pointerId);if(-1===e)return;_.splice(e,1)}if(l){if(o.Browser.pointer){var n,s={};for(var a in h)n=h[a],"function"==typeof n?s[a]=n.bind(h):s[a]=n;h=s}h.type="dblclick",i(h),r=null}}var r,h,l=!1,u=250,c="_leaflet_",d=this._touchstart,p=this._touchend,_=[];t[c+d+n]=s,t[c+p+n]=a;var m=o.Browser.pointer?e.documentElement:t;return t.addEventListener(d,s,!1),m.addEventListener(p,a,!1),o.Browser.pointer&&m.addEventListener(o.DomEvent.POINTER_CANCEL,a,!1),this},removeDoubleTapListener:function(t,i){var n="_leaflet_";return t.removeEventListener(this._touchstart,t[n+this._touchstart+i],!1),(o.Browser.pointer?e.documentElement:t).removeEventListener(this._touchend,t[n+this._touchend+i],!1),o.Browser.pointer&&e.documentElement.removeEventListener(o.DomEvent.POINTER_CANCEL,t[n+this._touchend+i],!1),this}}),o.extend(o.DomEvent,{POINTER_DOWN:o.Browser.msPointer?"MSPointerDown":"pointerdown",POINTER_MOVE:o.Browser.msPointer?"MSPointerMove":"pointermove",POINTER_UP:o.Browser.msPointer?"MSPointerUp":"pointerup",POINTER_CANCEL:o.Browser.msPointer?"MSPointerCancel":"pointercancel",_pointers:[],_pointerDocumentListener:!1,addPointerListener:function(t,e,i,n){switch(e){case"touchstart":return this.addPointerListenerStart(t,e,i,n);
+case"touchend":return this.addPointerListenerEnd(t,e,i,n);case"touchmove":return this.addPointerListenerMove(t,e,i,n);default:throw"Unknown touch event type"}},addPointerListenerStart:function(t,i,n,s){var a="_leaflet_",r=this._pointers,h=function(t){"mouse"!==t.pointerType&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&o.DomEvent.preventDefault(t);for(var e=!1,i=0;i1))&&(this._moved||(o.DomUtil.addClass(e._mapPane,"leaflet-touching"),e.fire("movestart").fire("zoomstart"),this._moved=!0),o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),o.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,e=this._getScaleOrigin(),i=t.layerPointToLatLng(e),n=t.getScaleZoom(this._scale);t._animateZoom(i,n,this._startCenter,this._scale,this._delta,!1,!0)},_onTouchEnd:function(){if(!this._moved||!this._zooming)return void(this._zooming=!1);var t=this._map;this._zooming=!1,o.DomUtil.removeClass(t._mapPane,"leaflet-touching"),o.Util.cancelAnimFrame(this._animRequest),o.DomEvent.off(e,"touchmove",this._onTouchMove).off(e,"touchend",this._onTouchEnd);var i=this._getScaleOrigin(),n=t.layerPointToLatLng(i),s=t.getZoom(),a=t.getScaleZoom(this._scale)-s,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(s+r),l=t.getZoomScale(h)/this._scale;t._animateZoom(n,h,i,l)},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),o.Map.addInitHook("addHandler","touchZoom",o.Map.TouchZoom),o.Map.mergeOptions({tap:!0,tapTolerance:15}),o.Map.Tap=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){o.DomEvent.off(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(o.DomEvent.preventDefault(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],n=i.target;this._startPos=this._newPos=new o.Point(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.addClass(n,"leaflet-active"),this._holdTimeout=setTimeout(o.bind(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),o.DomEvent.on(e,"touchmove",this._onMove,this).on(e,"touchend",this._onUp,this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),o.DomEvent.off(e,"touchmove",this._onMove,this).off(e,"touchend",this._onUp,this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],n=i.target;n&&n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.removeClass(n,"leaflet-active"),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var e=t.touches[0];this._newPos=new o.Point(e.clientX,e.clientY)},_simulateEvent:function(i,n){var o=e.createEvent("MouseEvents");o._simulated=!0,n.target._simulatedClick=!0,o.initMouseEvent(i,!0,!0,t,1,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),n.target.dispatchEvent(o)}}),o.Browser.touch&&!o.Browser.pointer&&o.Map.addInitHook("addHandler","tap",o.Map.Tap),o.Map.mergeOptions({boxZoom:!0}),o.Map.BoxZoom=o.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._moved=!1},addHooks:function(){o.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){o.DomEvent.off(this._container,"mousedown",this._onMouseDown),this._moved=!1},moved:function(){return this._moved},_onMouseDown:function(t){return this._moved=!1,!t.shiftKey||1!==t.which&&1!==t.button?!1:(o.DomUtil.disableTextSelection(),o.DomUtil.disableImageDrag(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),void o.DomEvent.on(e,"mousemove",this._onMouseMove,this).on(e,"mouseup",this._onMouseUp,this).on(e,"keydown",this._onKeyDown,this))},_onMouseMove:function(t){this._moved||(this._box=o.DomUtil.create("div","leaflet-zoom-box",this._pane),o.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",this._map.fire("boxzoomstart"));var e=this._startLayerPoint,i=this._box,n=this._map.mouseEventToLayerPoint(t),s=n.subtract(e),a=new o.Point(Math.min(n.x,e.x),Math.min(n.y,e.y));o.DomUtil.setPosition(i,a),this._moved=!0,i.style.width=Math.max(0,Math.abs(s.x)-4)+"px",i.style.height=Math.max(0,Math.abs(s.y)-4)+"px"},_finish:function(){this._moved&&(this._pane.removeChild(this._box),this._container.style.cursor=""),o.DomUtil.enableTextSelection(),o.DomUtil.enableImageDrag(),o.DomEvent.off(e,"mousemove",this._onMouseMove).off(e,"mouseup",this._onMouseUp).off(e,"keydown",this._onKeyDown)},_onMouseUp:function(t){this._finish();var e=this._map,i=e.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(i)){var n=new o.LatLngBounds(e.layerPointToLatLng(this._startLayerPoint),e.layerPointToLatLng(i));e.fitBounds(n),e.fire("boxzoomend",{boxZoomBounds:n})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}}),o.Map.addInitHook("addHandler","boxZoom",o.Map.BoxZoom),o.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),o.Map.Keyboard=o.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),o.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;o.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){if(!this._focused){var i=e.body,n=e.documentElement,o=i.scrollTop||n.scrollTop,s=i.scrollLeft||n.scrollLeft;this._map._container.focus(),t.scrollTo(s,o)}},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var e,i,n=this._panKeys={},o=this.keyCodes;for(e=0,i=o.left.length;i>e;e++)n[o.left[e]]=[-1*t,0];for(e=0,i=o.right.length;i>e;e++)n[o.right[e]]=[t,0];for(e=0,i=o.down.length;i>e;e++)n[o.down[e]]=[0,t];for(e=0,i=o.up.length;i>e;e++)n[o.up[e]]=[0,-1*t]},_setZoomOffset:function(t){var e,i,n=this._zoomKeys={},o=this.keyCodes;for(e=0,i=o.zoomIn.length;i>e;e++)n[o.zoomIn[e]]=t;for(e=0,i=o.zoomOut.length;i>e;e++)n[o.zoomOut[e]]=-t},_addHooks:function(){o.DomEvent.on(e,"keydown",this._onKeyDown,this)},_removeHooks:function(){o.DomEvent.off(e,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var e=t.keyCode,i=this._map;if(e in this._panKeys){if(i._panAnim&&i._panAnim._inProgress)return;i.panBy(this._panKeys[e]),i.options.maxBounds&&i.panInsideBounds(i.options.maxBounds)}else{if(!(e in this._zoomKeys))return;i.setZoom(i.getZoom()+this._zoomKeys[e])}o.DomEvent.stop(t)}}),o.Map.addInitHook("addHandler","keyboard",o.Map.Keyboard),o.Handler.MarkerDrag=o.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new o.Draggable(t,t)),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this),this._draggable.enable(),o.DomUtil.addClass(this._marker._icon,"leaflet-marker-draggable")},removeHooks:function(){this._draggable.off("dragstart",this._onDragStart,this).off("drag",this._onDrag,this).off("dragend",this._onDragEnd,this),this._draggable.disable(),o.DomUtil.removeClass(this._marker._icon,"leaflet-marker-draggable")},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,e=t._shadow,i=o.DomUtil.getPosition(t._icon),n=t._map.layerPointToLatLng(i);e&&o.DomUtil.setPosition(e,i),t._latlng=n,t.fire("move",{latlng:n}).fire("drag")},_onDragEnd:function(t){this._marker.fire("moveend").fire("dragend",t)}}),o.Control=o.Class.extend({options:{position:"topright"},initialize:function(t){o.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return o.DomUtil.addClass(e,"leaflet-control"),-1!==i.indexOf("bottom")?n.insertBefore(e,n.firstChild):n.appendChild(e),this},removeFrom:function(t){var e=this.getPosition(),i=t._controlCorners[e];return i.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this},_refocusOnMap:function(){this._map&&this._map.getContainer().focus()}}),o.control=function(t){return new o.Control(t)},o.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,s){var a=i+t+" "+i+s;e[t+s]=o.DomUtil.create("div",a,n)}var e=this._controlCorners={},i="leaflet-",n=this._controlContainer=o.DomUtil.create("div",i+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){this._container.removeChild(this._controlContainer)}}),o.Control.Zoom=o.Control.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"-",zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=o.DomUtil.create("div",e+" leaflet-bar");return this._map=t,this._zoomInButton=this._createButton(this.options.zoomInText,this.options.zoomInTitle,e+"-in",i,this._zoomIn,this),this._zoomOutButton=this._createButton(this.options.zoomOutText,this.options.zoomOutTitle,e+"-out",i,this._zoomOut,this),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,e,i,n,s,a){var r=o.DomUtil.create("a",i,n);r.innerHTML=t,r.href="#",r.title=e;var h=o.DomEvent.stopPropagation;return o.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",o.DomEvent.preventDefault).on(r,"click",s,a).on(r,"click",this._refocusOnMap,a),r},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";o.DomUtil.removeClass(this._zoomInButton,e),o.DomUtil.removeClass(this._zoomOutButton,e),t._zoom===t.getMinZoom()&&o.DomUtil.addClass(this._zoomOutButton,e),t._zoom===t.getMaxZoom()&&o.DomUtil.addClass(this._zoomInButton,e)}}),o.Map.mergeOptions({zoomControl:!0}),o.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new o.Control.Zoom,this.addControl(this.zoomControl))}),o.control.zoom=function(t){return new o.Control.Zoom(t)},o.Control.Attribution=o.Control.extend({options:{position:"bottomright",prefix:'Leaflet '},initialize:function(t){o.setOptions(this,t),this._attributions={}},onAdd:function(t){this._container=o.DomUtil.create("div","leaflet-control-attribution"),o.DomEvent.disableClickPropagation(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):void 0},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):void 0},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(" | ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),o.Map.mergeOptions({attributionControl:!0}),o.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new o.Control.Attribution).addTo(this))}),o.control.attribution=function(t){return new o.Control.Attribution(t)},o.Control.Scale=o.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var e="leaflet-control-scale",i=o.DomUtil.create("div",e),n=this.options;return this._addScales(n,e,i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=o.DomUtil.create("div",e+"-line",i)),t.imperial&&(this._iScale=o.DomUtil.create("div",e+"-line",i))},_update:function(){var t=this._map.getBounds(),e=t.getCenter().lat,i=6378137*Math.PI*Math.cos(e*Math.PI/180),n=i*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),s=this.options,a=0;o.x>0&&(a=n*(s.maxWidth/o.x)),this._updateScales(s,a)},_updateScales:function(t,e){t.metric&&e&&this._updateMetric(e),t.imperial&&e&&this._updateImperial(e)},_updateMetric:function(t){var e=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(e/t)+"px",this._mScale.innerHTML=1e3>e?e+" m":e/1e3+" km"},_updateImperial:function(t){var e,i,n,o=3.2808399*t,s=this._iScale;o>5280?(e=o/5280,i=this._getRoundNum(e),s.style.width=this._getScaleWidth(i/e)+"px",s.innerHTML=i+" mi"):(n=this._getRoundNum(o),s.style.width=this._getScaleWidth(n/o)+"px",s.innerHTML=n+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),o.control.scale=function(t){return new o.Control.Scale(t)},o.Control.Layers=o.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,e,i){o.setOptions(this,i),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var n in t)this._addLayer(t[n],n);for(n in e)this._addLayer(e[n],n,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange,this).off("layerremove",this._onLayerChange,this)},addBaseLayer:function(t,e){return this._addLayer(t,e),this._update(),this},addOverlay:function(t,e){return this._addLayer(t,e,!0),this._update(),this},removeLayer:function(t){var e=o.stamp(t);return delete this._layers[e],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",e=this._container=o.DomUtil.create("div",t);e.setAttribute("aria-haspopup",!0),o.Browser.touch?o.DomEvent.on(e,"click",o.DomEvent.stopPropagation):o.DomEvent.disableClickPropagation(e).disableScrollPropagation(e);var i=this._form=o.DomUtil.create("form",t+"-list");if(this.options.collapsed){o.Browser.android||o.DomEvent.on(e,"mouseover",this._expand,this).on(e,"mouseout",this._collapse,this);var n=this._layersLink=o.DomUtil.create("a",t+"-toggle",e);n.href="#",n.title="Layers",o.Browser.touch?o.DomEvent.on(n,"click",o.DomEvent.stop).on(n,"click",this._expand,this):o.DomEvent.on(n,"focus",this._expand,this),o.DomEvent.on(i,"click",function(){setTimeout(o.bind(this._onInputClick,this),0)},this),this._map.on("click",this._collapse,this)}else this._expand();this._baseLayersList=o.DomUtil.create("div",t+"-base",i),this._separator=o.DomUtil.create("div",t+"-separator",i),this._overlaysList=o.DomUtil.create("div",t+"-overlays",i),e.appendChild(i)},_addLayer:function(t,e,i){var n=o.stamp(t);this._layers[n]={layer:t,name:e,overlay:i},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t,e,i=!1,n=!1;for(t in this._layers)e=this._layers[t],this._addItem(e),n=n||e.overlay,i=i||!e.overlay;this._separator.style.display=n&&i?"":"none"}},_onLayerChange:function(t){var e=this._layers[o.stamp(t.layer)];if(e){this._handlingClick||this._update();var i=e.overlay?"layeradd"===t.type?"overlayadd":"overlayremove":"layeradd"===t.type?"baselayerchange":null;i&&this._map.fire(i,e)}},_createRadioElement:function(t,i){var n=' ";var o=e.createElement("div");return o.innerHTML=n,o.firstChild},_addItem:function(t){var i,n=e.createElement("label"),s=this._map.hasLayer(t.layer);t.overlay?(i=e.createElement("input"),i.type="checkbox",i.className="leaflet-control-layers-selector",i.defaultChecked=s):i=this._createRadioElement("leaflet-base-layers",s),i.layerId=o.stamp(t.layer),o.DomEvent.on(i,"click",this._onInputClick,this);var a=e.createElement("span");a.innerHTML=" "+t.name,n.appendChild(i),n.appendChild(a);var r=t.overlay?this._overlaysList:this._baseLayersList;return r.appendChild(n),n},_onInputClick:function(){var t,e,i,n=this._form.getElementsByTagName("input"),o=n.length;for(this._handlingClick=!0,t=0;o>t;t++)e=n[t],i=this._layers[e.layerId],e.checked&&!this._map.hasLayer(i.layer)?this._map.addLayer(i.layer):!e.checked&&this._map.hasLayer(i.layer)&&this._map.removeLayer(i.layer);this._handlingClick=!1,this._refocusOnMap()},_expand:function(){o.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),o.control.layers=function(t,e,i){return new o.Control.Layers(t,e,i)},o.PosAnimation=o.Class.extend({includes:o.Mixin.Events,run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._newPos=e,this.fire("start"),t.style[o.DomUtil.TRANSITION]="all "+(i||.25)+"s cubic-bezier(0,0,"+(n||.5)+",1)",o.DomEvent.on(t,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),o.DomUtil.setPosition(t,e),o.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(o.bind(this._onStep,this),50)},stop:function(){this._inProgress&&(o.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),o.Util.falseFn(this._el.offsetWidth))},_onStep:function(){var t=this._getPos();return t?(this._el._leaflet_pos=t,void this.fire("step")):void this._onTransitionEnd()},_transformRe:/([-+]?(?:\d*\.)?\d+)\D*, ([-+]?(?:\d*\.)?\d+)\D*\)/,_getPos:function(){var e,i,n,s=this._el,a=t.getComputedStyle(s);if(o.Browser.any3d){if(n=a[o.DomUtil.TRANSFORM].match(this._transformRe),!n)return;e=parseFloat(n[1]),i=parseFloat(n[2])}else e=parseFloat(a.left),i=parseFloat(a.top);return new o.Point(e,i,!0)},_onTransitionEnd:function(){o.DomEvent.off(this._el,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[o.DomUtil.TRANSITION]="",this._el._leaflet_pos=this._newPos,clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),o.Map.include({setView:function(t,e,n){if(e=e===i?this._zoom:this._limitZoom(e),t=this._limitCenter(o.latLng(t),e,this.options.maxBounds),n=n||{},this._panAnim&&this._panAnim.stop(),this._loaded&&!n.reset&&n!==!0){n.animate!==i&&(n.zoom=o.extend({animate:n.animate},n.zoom),n.pan=o.extend({animate:n.animate},n.pan));var s=this._zoom!==e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,n.zoom):this._tryAnimatedPan(t,n.pan);if(s)return clearTimeout(this._sizeTimer),this}return this._resetView(t,e),this},panBy:function(t,e){if(t=o.point(t).round(),e=e||{},!t.x&&!t.y)return this;if(this._panAnim||(this._panAnim=new o.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),e.noMoveStart||this.fire("movestart"),e.animate!==!1){o.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var i=this._getMapPanePos().subtract(t);this._panAnim.run(this._mapPane,i,e.duration||.25,e.easeLinearity)}else this._rawPanBy(t),this.fire("move").fire("moveend");return this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){o.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._floor();return(e&&e.animate)===!0||this.getSize().contains(i)?(this.panBy(i,e),!0):!1}}),o.PosAnimation=o.DomUtil.TRANSITION?o.PosAnimation:o.PosAnimation.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=o.DomUtil.getPosition(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=o.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,e=1e3*this._duration;e>t?this._runFrame(this._easeOut(t/e)):(this._runFrame(1),this._complete())},_runFrame:function(t){var e=this._startPos.add(this._offset.multiplyBy(t));o.DomUtil.setPosition(this._el,e),this.fire("step")},_complete:function(){o.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),o.Map.mergeOptions({zoomAnimation:!0,zoomAnimationThreshold:4}),o.DomUtil.TRANSITION&&o.Map.addInitHook(function(){this._zoomAnimated=this.options.zoomAnimation&&o.DomUtil.TRANSITION&&o.Browser.any3d&&!o.Browser.android23&&!o.Browser.mobileOpera,this._zoomAnimated&&o.DomEvent.on(this._mapPane,o.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),o.Map.include(o.DomUtil.TRANSITION?{_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),o=this._getCenterOffset(t)._divideBy(1-1/n),s=this._getCenterLayerPoint()._add(o);return i.animate===!0||this.getSize().contains(o)?(this.fire("movestart").fire("zoomstart"),this._animateZoom(t,e,s,n,null,!0),!0):!1},_animateZoom:function(t,e,i,n,s,a,r){r||(this._animatingZoom=!0),o.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this._animateToCenter=t,this._animateToZoom=e,o.Draggable&&(o.Draggable._disabled=!0),o.Util.requestAnimFrame(function(){this.fire("zoomanim",{center:t,zoom:e,origin:i,scale:n,delta:s,backwards:a}),setTimeout(o.bind(this._onZoomTransitionEnd,this),250)},this)},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._animatingZoom=!1,o.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),o.Util.requestAnimFrame(function(){this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),o.Draggable&&(o.Draggable._disabled=!1)},this))}}:{}),o.TileLayer.include({_animateZoom:function(t){this._animating||(this._animating=!0,this._prepareBgBuffer());var e=this._bgBuffer,i=o.DomUtil.TRANSFORM,n=t.delta?o.DomUtil.getTranslateString(t.delta):e.style[i],s=o.DomUtil.getScaleString(t.scale,t.origin);e.style[i]=t.backwards?s+" "+n:n+" "+s},_endZoomAnim:function(){var t=this._tileContainer,e=this._bgBuffer;t.style.visibility="",t.parentNode.appendChild(t),o.Util.falseFn(e.offsetWidth);var i=this._map.getZoom();(i>this.options.maxZoom||i.5&&.5>n?(t.style.visibility="hidden",void this._stopLoadingImages(t)):(e.style.visibility="hidden",e.style[o.DomUtil.TRANSFORM]="",this._tileContainer=e,e=this._bgBuffer=t,this._stopLoadingImages(e),void clearTimeout(this._clearBgBufferTimer))},_getLoadedTilesPercentage:function(t){var e,i,n=t.getElementsByTagName("img"),o=0;for(e=0,i=n.length;i>e;e++)n[e].complete&&o++;return o/i},_stopLoadingImages:function(t){var e,i,n,s=Array.prototype.slice.call(t.getElementsByTagName("img"));for(e=0,i=s.length;i>e;e++)n=s[e],n.complete||(n.onload=o.Util.falseFn,n.onerror=o.Util.falseFn,n.src=o.Util.emptyImageUrl,n.parentNode.removeChild(n))}}),o.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locateOptions=o.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=o.bind(this._handleGeolocationResponse,this),i=o.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e=t.code,i=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})},_handleGeolocationResponse:function(t){var e=t.coords.latitude,i=t.coords.longitude,n=new o.LatLng(e,i),s=180*t.coords.accuracy/40075017,a=s/Math.cos(o.LatLng.DEG_TO_RAD*e),r=o.latLngBounds([e-s,i-a],[e+s,i+a]),h=this._locateOptions;if(h.setView){var l=Math.min(this.getBoundsZoom(r),h.maxZoom);this.setView(n,l)}var u={latlng:n,bounds:r,timestamp:t.timestamp};for(var c in t.coords)"number"==typeof t.coords[c]&&(u[c]=t.coords[c]);this.fire("locationfound",u)}})}(window,document);
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/da-dk.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/da-dk.js
new file mode 100644
index 0000000..9dc75e0
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/da-dk.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Ups! Der var et problem med at finde adressen! Prøv venligst igen.",
+ "locationSet":"Adresse sat til",
+ "resetTxt":"Nulstil position"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/de-de.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/de-de.js
new file mode 100644
index 0000000..4f56685
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/de-de.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oops! Adresse konnte nicht gefunden werden!",
+ "locationSet":"Standort gesetzt auf",
+ "resetTxt":"Position zurücksetzten"
+}
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/en-gb.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/en-gb.js
new file mode 100644
index 0000000..0b71daa
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/en-gb.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oops! Having trouble geocoding specified address! Please try again.",
+ "locationSet":"Location set to",
+ "resetTxt":"Reset position"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/en-us.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/en-us.js
new file mode 100644
index 0000000..0b71daa
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/en-us.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oops! Having trouble geocoding specified address! Please try again.",
+ "locationSet":"Location set to",
+ "resetTxt":"Reset position"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/es-es.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/es-es.js
new file mode 100644
index 0000000..0b71daa
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/es-es.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oops! Having trouble geocoding specified address! Please try again.",
+ "locationSet":"Location set to",
+ "resetTxt":"Reset position"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/fr-fr.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/fr-fr.js
new file mode 100644
index 0000000..0b71daa
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/fr-fr.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oops! Having trouble geocoding specified address! Please try again.",
+ "locationSet":"Location set to",
+ "resetTxt":"Reset position"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/he-il.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/he-il.js
new file mode 100644
index 0000000..0b71daa
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/he-il.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oops! Having trouble geocoding specified address! Please try again.",
+ "locationSet":"Location set to",
+ "resetTxt":"Reset position"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/it-it.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/it-it.js
new file mode 100644
index 0000000..0b71daa
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/it-it.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oops! Having trouble geocoding specified address! Please try again.",
+ "locationSet":"Location set to",
+ "resetTxt":"Reset position"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/ja-jp.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/ja-jp.js
new file mode 100644
index 0000000..0b71daa
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/ja-jp.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oops! Having trouble geocoding specified address! Please try again.",
+ "locationSet":"Location set to",
+ "resetTxt":"Reset position"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/ko-kr.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/ko-kr.js
new file mode 100644
index 0000000..0b71daa
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/ko-kr.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oops! Having trouble geocoding specified address! Please try again.",
+ "locationSet":"Location set to",
+ "resetTxt":"Reset position"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/nb-no.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/nb-no.js
new file mode 100644
index 0000000..0b71daa
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/nb-no.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oops! Having trouble geocoding specified address! Please try again.",
+ "locationSet":"Location set to",
+ "resetTxt":"Reset position"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/nl-nl.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/nl-nl.js
new file mode 100644
index 0000000..8ee74eb
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/nl-nl.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oeps! De locatie van het adres kan momenteel niet opgezocht worden!",
+ "locationSet":"Locatie ingesteld op",
+ "resetTxt":"Positie resetten"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/pl-pl.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/pl-pl.js
new file mode 100644
index 0000000..0b71daa
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/pl-pl.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oops! Having trouble geocoding specified address! Please try again.",
+ "locationSet":"Location set to",
+ "resetTxt":"Reset position"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/pt-br.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/pt-br.js
new file mode 100644
index 0000000..0b71daa
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/pt-br.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oops! Having trouble geocoding specified address! Please try again.",
+ "locationSet":"Location set to",
+ "resetTxt":"Reset position"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/ru-ru.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/ru-ru.js
new file mode 100644
index 0000000..0b71daa
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/ru-ru.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oops! Having trouble geocoding specified address! Please try again.",
+ "locationSet":"Location set to",
+ "resetTxt":"Reset position"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/sv-se.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/sv-se.js
new file mode 100644
index 0000000..0b71daa
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/sv-se.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oops! Having trouble geocoding specified address! Please try again.",
+ "locationSet":"Location set to",
+ "resetTxt":"Reset position"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/langs/zh-cn.js b/UmbracoPackages/App_Plugins/OsmMaps/langs/zh-cn.js
new file mode 100644
index 0000000..0b71daa
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/langs/zh-cn.js
@@ -0,0 +1,5 @@
+{
+ "geoCodeError":"Oops! Having trouble geocoding specified address! Please try again.",
+ "locationSet":"Location set to",
+ "resetTxt":"Reset position"
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/OsmMaps/package.manifest b/UmbracoPackages/App_Plugins/OsmMaps/package.manifest
new file mode 100644
index 0000000..08a6a95
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/OsmMaps/package.manifest
@@ -0,0 +1,45 @@
+{
+ propertyEditors:
+ [
+ {
+ alias: "Our.Umbraco.OsmMaps",
+ name: "Open street maps",
+ editor:
+ {
+ view: "~/App_Plugins/OsmMaps/OsmMaps.html"
+
+ },
+ prevalues: {
+ fields:[
+ {
+ label: "Latitude",
+ description: "Enter your default starting latitude",
+ key: "lat",
+ view: "textstring"
+ },
+ {
+ label: "Longitude",
+ description: "Enter your default starting longitude",
+ key: "lng",
+ view: "textstring"
+ },
+ {
+ label: "Zoom level",
+ description: "Enter your default zoom level",
+ key: "zoomlevel",
+ view: "textstring"
+ }
+ ]
+ },
+ defaultConfig:{
+ lat: 55.40626,
+ lng: 10.38840,
+ zoomlevel: 15
+ }
+ }
+ ],
+ javascript:
+ [
+ "~/App_Plugins/OsmMaps/OsmMaps.controller.js"
+ ]
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/StarterKit/StarterKitHelp.Controller.js b/UmbracoPackages/App_Plugins/StarterKit/StarterKitHelp.Controller.js
new file mode 100644
index 0000000..658562b
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/StarterKit/StarterKitHelp.Controller.js
@@ -0,0 +1,34 @@
+angular.module("umbraco").controller("Umbraco.Starterkit.HelpController", function ($scope, lessonsService) {
+
+ vm = this;
+ vm.currentLesson = null;
+ vm.currentStep = null;
+ vm.currentStepIndex = 0;
+
+ this.lessons = null;
+ this.steps = null;
+
+ this.loadLesson = function (lesson) {
+ vm.currentLesson = lesson;
+ lessonsService.getLessonSteps(lesson.path).then(function (steps) {
+ vm.steps = steps;
+ vm.currentStep = steps[0];
+ vm.currentStepIndex = 0;
+ });
+ };
+
+ this.exitLesson = function () {
+ this.currentLesson = null;
+ this.currentStep = null;
+ this.steps = null;
+ };
+
+ this.loadStep = function (index) {
+ this.currentStep = this.steps[index];
+ this.currentStepIndex = index;
+ };
+
+ lessonsService.getLessons("Tutorials/Starter-kit/Lessons").then(function (lessons) {
+ vm.lessons = lessons;
+ });
+});
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/StarterKit/backoffice/tours/create-content.json b/UmbracoPackages/App_Plugins/StarterKit/backoffice/tours/create-content.json
new file mode 100644
index 0000000..a56eab8
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/StarterKit/backoffice/tours/create-content.json
@@ -0,0 +1,319 @@
+[
+ {
+ "name": "The Content section",
+ "alias": "theStarterKitTheContentSection",
+ "group": "Create content",
+ "groupOrder": 110,
+ "requiredSections": [
+ "content"
+ ],
+ "steps": [
+ {
+ "title": "The Content section",
+ "content": "In this tour you will get a short introduction to the Content section in Umbraco.
The Content section is where all the pages and content for the website lives.
You will learn how to navigate the content, update some content, and preview the website.
",
+ "type": "intro"
+ },
+ {
+ "element": "#applications [data-element='section-content']",
+ "title": "Navigate to the Content section",
+ "content": "In the Content section you can create and manage the content of the website.
The Content section contains the content of your website. Content is displayed as nodes in the content tree.
",
+ "event": "click",
+ "backdropOpacity": 0.6
+ },
+ {
+ "element": "#tree [data-element='tree-item-Home']",
+ "title": "The Home page",
+ "event": "click",
+ "content": "The first node you will see in the content tree is the Home page.
Click on the arrow on the left of the Home page to see the pages underneath the Home page.
",
+ "eventElement": "#tree [data-element='tree-item-Home'] [data-element='tree-item-expand']"
+ },
+ {
+ "element": "#tree [data-element='tree-item-Home']",
+ "elementPreventClick": true,
+ "title": "The site structure",
+ "content": "In the content tree you will see the site structure. You can expand trees by clicking the arrow to the left of the node.
"
+ },
+ {
+ "element": "#tree [data-element='tree-item-Home'] a.umb-tree-item__label",
+ "title": "Open the Home page",
+ "content": "Let's have a look at what the content of a page could look like.
Click on the Home page name to open the node.
",
+ "event": "click",
+ "eventElement": "#tree [data-element='tree-item-Home'] a.umb-tree-item__label"
+ },
+ {
+ "element": "[data-element='editor-name-field']",
+ "elementPreventClick": true,
+ "title": "The page name",
+ "content": "At the top of the page you will find the name of the content you are editing.
"
+ },
+ {
+ "element": "[data-element='property-heroHeader']",
+ "elementPreventClick": true,
+ "title": "Properties",
+ "content": "In the center of the page you will find the content Properties .
These are all the pieces of information the content consist of. Properties can vary depending on which Document type the current item is based on.
"
+ },
+ {
+ "element": "[data-element='group-Hero']",
+ "elementPreventClick": true,
+ "title": "Organise with groups",
+ "content": "The properties of a page are organised in groups making it easy to find the right place to update the content.
"
+ },
+ {
+ "element": "[data-element='button-preview']",
+ "title": "Preview content",
+ "content": "Before a page is published to your website you can preview any changes you have made to the page.
Click the Preview button to see how the page looks now.
",
+ "event": "click"
+ },
+ {
+ "element": "[data-element='property-heroHeader']",
+ "title": "Update the header",
+ "content": "Let's make an update to the content in the Header property.
Try changing it to: Welcome to my website
"
+ },
+ {
+ "element": "[data-element='button-preview']",
+ "title": "Preview update",
+ "content": "Click the Preview button to see the changes you've just made.
",
+ "event": "click"
+ },
+ {
+ "element": "[data-element='button-saveAndPublish']",
+ "title": "Save and Publish",
+ "content": "Click on the Publish button to publish the changes and make them visible to the public.
",
+ "event": "click"
+ }
+ ]
+ },
+ {
+ "name": "Creating Content",
+ "alias": "theStarterKitCreatingContent",
+ "group": "Create content",
+ "groupOrder": 110,
+ "requiredSections": [
+ "content"
+ ],
+ "steps": [
+ {
+ "title": "Creating your first content page",
+ "content": "In this tour you will learn how to create new content for your website.
",
+ "type": "intro"
+ },
+ {
+ "element": "#applications [data-element='section-content']",
+ "title": "Navigate to the Content section",
+ "content": "In the Content section you can create and manage the content of the website.
The Content section contains the content of your website. Content is displayed as nodes in the content tree.
",
+ "event": "click",
+ "backdropOpacity": 0.6
+ },
+ {
+ "element": "#tree [data-element='tree-item-Home']",
+ "title": "Open the context menu",
+ "content": "Open the context menu by hovering the Home node.
Now click the three small dots to the right.
",
+ "event": "click",
+ "eventElement": "[data-element='tree-item-Home'] [data-element='tree-item-options']"
+ },
+ {
+ "element": "#dialog [data-element='action-create-contentPage']",
+ "title": "Create new Content Page",
+ "content": "Now you can see all the options you have for creating content in this part of the site.
Select the Content Page option to create a new page of that type.
",
+ "event": "click"
+ },
+ {
+ "element": "[data-element='editor-content'] [data-element='editor-name-field']",
+ "title": "Give your new page a name",
+ "content": "Our new page needs a name. Enter My Page in the field and click Next .
",
+ "view": "/App_Plugins/StarterKit/tours/views/validateText.html",
+ "customProperties": {
+ "validateText": "My Page"
+ }
+ },
+ {
+ "element": "[data-element='editor-content'] [data-element='property-pageTitle'] input",
+ "title": "Add a page title",
+ "content": "On this page we are also required to fill out the Page Title property.
Enter Welcome to My Page in the field and click Next .
",
+ "view": "/App_Plugins/StarterKit/tours/views/validateText.html",
+ "customProperties": {
+ "validateText": "Welcome to My Page"
+ }
+ },
+ {
+ "element": "[data-element='editor-footer'] [data-element='button-save']",
+ "title": "Save as draft",
+ "content": "Before we can preview the page we need to save it as a draft.
Click the Save option to save your changes without making them public.
",
+ "event": "click"
+ },
+ {
+ "element": "[data-element='editor-footer'] [data-element='button-preview']",
+ "title": "Preview",
+ "content": "Click the Preview button to preview the new page before publishing it.
",
+ "event": "click"
+ },
+ {
+ "element": "[data-element='editor-container']",
+ "elementPreventClick": true,
+ "title": "Go explore",
+ "content": "The page still looks a bit empty. You can now try and fill out some of the other properties on the page.
"
+ }
+ ]
+ },
+ {
+ "name": "The Media Library",
+ "alias": "theStarterKitTheMediaLibrary",
+ "group": "Create content",
+ "groupOrder": 110,
+ "requiredSections": [
+ "media"
+ ],
+ "steps": [
+ {
+ "title": "How to use the media library",
+ "content": "A website would be boring without media content. In Umbraco you can manage all your images, documents, videos etc. in the Media section . Here you can upload and organise your media items and see details about each item.
In this tour you will learn how to upload and organise your Media library in Umbraco. It will also show you how to view details about a specific media item.
",
+ "type": "intro"
+ },
+ {
+ "element": "#applications [data-element='section-media']",
+ "title": "Navigate to the Media section",
+ "content": "The Media section is where you manage all your media items.",
+ "event": "click",
+ "backdropOpacity": 0.6
+ },
+ {
+ "element": "#tree",
+ "elementPreventClick": true,
+ "title": "The media tree",
+ "content": "Like the Content section the Media section also has a tree.
"
+ },
+ {
+ "element": "#tree [data-element='tree-item-Design']",
+ "title": "Folders",
+ "content": "In this Starter kit we have added a couple of folders. One of them is called Design .
This folder is meant to hold all the design related media items like background images etc.
Click the folder name to open the folder.
",
+ "event": "click",
+ "eventElement": "#tree [data-element='tree-item-Design'] a.umb-tree-item__label"
+ },
+ {
+ "element": "[data-element='editor-media'] [data-element='dropzone']",
+ "elementPreventClick": true,
+ "title": "Upload area",
+ "content": "Inside a folder you will find an area to upload your media files...
"
+ },
+ {
+ "element": "[data-element='editor-media'] [data-element='media-grid']",
+ "elementPreventClick": true,
+ "title": "Uploaded media",
+ "content": "...and an area with all your uploaded files.
"
+ },
+ {
+ "element": "[data-element='editor-media'] [data-element='dropzone']",
+ "title": "Upload a background image",
+ "content": "Let's upload a new image we can use as background image on the Home page in the next tour.
Click the or click here to choose files -button and select an image on your computer to upload.
",
+ "view": "/App_Plugins/StarterKit/Tours/views/medialibrary/uploadimages.html"
+ },
+ {
+ "element": "[data-element='editor-media'] [data-element='media-grid-item-0']",
+ "title": "View media item details",
+ "content": "Hover the media item and Click the white bar to view details about the media item.",
+ "event": "click",
+ "eventElement": "[data-element='editor-media'] [data-element='media-grid-item-0'] [data-element='media-grid-item-edit']"
+ },
+ {
+ "element": "[data-element='editor-media'] [data-element='property-umbracoFile']",
+ "elementPreventClick": true,
+ "title": "The uploaded image",
+ "content": "Here you can see the image you have uploaded.
"
+ },
+ {
+ "element": "[data-element='editor-media'] [data-element='property-umbracoBytes']",
+ "elementPreventClick": true,
+ "title": "Image size",
+ "content": "You will also find other details about the image, like the size.
Media items work in much the same way as content. Properties can vary depending on which Media type the current item belongs to.
"
+ },
+ {
+ "element": "[data-element='editor-media'] [data-element='sub-view-umbInfo']",
+ "title": "Info",
+ "content": "Under the Info-app you will find default information about the media item.",
+ "event": "click"
+ },
+ {
+ "element": "[data-element='editor-media'] [data-element='node-info-urls']",
+ "elementPreventClick": true,
+ "title": "Link to media",
+ "content": "The path to the media item..."
+ },
+ {
+ "element": "[data-element='editor-media'] [data-element='node-info-general']",
+ "elementPreventClick": true,
+ "title": "General information",
+ "content": "...and information about when the media item has been created and edited."
+ }
+ ]
+ },
+ {
+ "name": "Adding media to content",
+ "alias": "theStarterKitAddingMediaToContent",
+ "group": "Create content",
+ "groupOrder": 110,
+ "requiredSections": [
+ "content"
+ ],
+ "steps": [
+ {
+ "title": "Adding media to content",
+ "content": "In this tour you will learn how to add media to a content page using a Media picker .
Your will use the image you uploaded to the Design folder as a new background image for the Home page .
",
+ "type": "intro"
+ },
+ {
+ "element": "#applications [data-element='section-content']",
+ "title": "Navigate to the Content section",
+ "content": "Click the Content section icon to open the content section.
",
+ "event": "click",
+ "backdropOpacity": 0.6
+ },
+ {
+ "element": "#tree [data-element='tree-item-Home']",
+ "title": "Home",
+ "content": "Click the Home node to open it.
",
+ "event": "click",
+ "eventElement": "#tree [data-element='tree-item-Home'] a.umb-tree-item__label"
+ },
+ {
+ "element": "[data-element='group-Design']",
+ "elementPreventClick": true,
+ "title": "Design",
+ "content": "Under the Design group you will find the property to change the background image.
"
+ },
+ {
+ "element": "[data-element='editor-content'] [data-element='property-HeroBackgroundImage'] [data-element='sortable-thumbnails'] [data-element='sortable-thumbnail-0']",
+ "title": "Remove the current image",
+ "content": "First we need to remove the current image so we can add our new image.
Hover the image and Click on the red X i the bottom right corner of the image.
",
+ "event": "click",
+ "eventElement": "[data-element='editor-content'] [data-element='property-HeroBackgroundImage'] [data-element='sortable-thumbnails'] [data-element='sortable-thumbnail-0'] [data-element='action-remove']"
+ },
+ {
+ "element": "[data-element='editor-content'] [data-element='property-HeroBackgroundImage'] [data-element='sortable-thumbnails'] [data-element='sortable-thumbnails-add']",
+ "title": "Open the Media picker",
+ "content": "Click the Add icon to open the Media Picker .
",
+ "event": "click"
+ },
+ {
+ "element": "[ng-controller*='Umbraco.Editors.MediaPickerController'] [data-element='editor-container']",
+ "title": "Select image",
+ "content": "This Media picker is configured to only show images from the Design folder.
Click on the image you just uploaded to select it.
"
+ },
+ {
+ "element": "[ng-controller*='Umbraco.Editors.MediaPickerController'] [button-style='success'] [data-element]",
+ "title": "Submit dialog",
+ "content": "Click Select image to add the selected image.",
+ "event": "click"
+ },
+ {
+ "element": "[data-element='button-preview']",
+ "title": "Preview",
+ "content": "Click Preview to see the changed background image.
",
+ "event": "click"
+ },
+ {
+ "title": "Remember to Save or Publish",
+ "content": "If you want to keep the changes you've made, remember to Save or Publish the content item.
"
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/StarterKit/backoffice/tours/data-structure.json b/UmbracoPackages/App_Plugins/StarterKit/backoffice/tours/data-structure.json
new file mode 100644
index 0000000..a91af26
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/StarterKit/backoffice/tours/data-structure.json
@@ -0,0 +1,237 @@
+[
+ {
+ "name": "Document types",
+ "alias": "theStarterKitDocumentTypes",
+ "group": "Data structure",
+ "groupOrder": 120,
+ "requiredSections": [
+ "content",
+ "settings"
+ ],
+ "steps": [
+ {
+ "title": "Document types = content structure",
+ "content": "The first thing you do with a new Umbraco installation is to create a Document Type . A Document Type is a template for content. For each type of content you want to create, you'll create a Document Type.
The document type defines where content can be created, how many properties it holds and what the input method should be for these properties.
When you have at least one Document type in place you can start creating content
In this tour you will get an introduction to the Starter kits data structure and learn how to add a new property to a Document type.
",
+ "type": "intro"
+ },
+ {
+ "element": "#applications [data-element='section-settings']",
+ "title": "Navigate to the Settings sections",
+ "content": "In the Settings section you will find the document types.",
+ "event": "click",
+ "backdropOpacity": 0.6
+ },
+ {
+ "element": "#tree [data-element='tree-item-documentTypes']",
+ "title": "Document types tree",
+ "content": "To see all the document types click the arrow to the left of the Document Types node.
",
+ "event": "click",
+ "eventElement": "#tree [data-element='tree-item-documentTypes'] [data-element='tree-item-expand']"
+ },
+ {
+ "element": "#tree [data-element='tree-item-documentTypes']",
+ "elementPreventClick": true,
+ "title": "Document types",
+ "content": "In the tree you will find all the document types for the different types of content we can create for our website.
You can see a document type for a Blog and one for a Blog post . There is also a document type for a standard Content Page and one for a special Contact page.
"
+ },
+ {
+ "element": "#tree [data-element='tree-item-documentTypes'] [data-element='tree-item-Home']",
+ "title": "Home document type",
+ "content": "We want to add a new piece of text on our Home page.
Let's have a look at how a Document type is set up. Click on the Home document type to open the document type editor.
",
+ "event": "click",
+ "eventElement": "#tree [data-element='tree-item-documentTypes'] [data-element='tree-item-Home'] a.umb-tree-item__label"
+ },
+ {
+ "element": "[data-element='editor-document-types'] .umb-editor-wrapper",
+ "elementPreventClick": true,
+ "title": "The Document Type Editor",
+ "content": "In the document type editor you can manage all the settings for a document type."
+ },
+ {
+ "element": "[data-element='editor-icon']",
+ "elementPreventClick": true,
+ "title": "The icon",
+ "content": "In the top of the screen you will find the Document type icon .
Use the icon to help choose the right Document type when creating content.
"
+ },
+ {
+ "element": "[data-element='editor-name-field']",
+ "elementPreventClick": true,
+ "title": "The name",
+ "content": "The name of the Document type.
"
+ },
+ {
+ "element": "[data-element='editor-sub-views']",
+ "elementPreventClick": true,
+ "title": "Navigation",
+ "content": "The document type settings are split up into multiple views to keep them organized.
Right now we are on the Design view where we structure the Properties .
"
+ },
+ {
+ "element": "[data-element='group-Hero']",
+ "elementPreventClick": true,
+ "title": "Tabs to structure properties",
+ "content": "Properties are organised in groups.
Use them to group your properties so it is easy to find the right place to update a piece of content.
"
+ },
+ {
+ "element": "[data-element='group-Hero'] [data-element='property-heroHeader']",
+ "elementPreventClick": true,
+ "title": "Property",
+ "content": "Every document type has properties. These are the fields that the content editor is allowed to edit for the node.
"
+ },
+ {
+ "element": "[data-element='group-Content'] [data-element='property-add']",
+ "title": "Add new property",
+ "content": "Let's add a new property to the Content group where we can add an About text to our Home page.
",
+ "event": "click"
+ },
+ {
+ "element": "[ng-controller*='Umbraco.Editors.PropertySettingsController'] [data-element='property-name']",
+ "title": "Enter a name",
+ "content": "Enter Welcome Text as name for the property.",
+ "view": "/App_Plugins/StarterKit/tours/views/validateText.html",
+ "customProperties": {
+ "validateText": "Welcome Text"
+ }
+ },
+ {
+ "element": "[ng-controller*='Umbraco.Editors.PropertySettingsController'] [data-element='property-description']",
+ "title": "Enter a description",
+ "content": "A description will help to fill in the right content.
Enter a description for the property. It could be:
Write a nice introduction so the visitors feel welcome
"
+ },
+ {
+ "element": "[ng-controller*='Umbraco.Editors.PropertySettingsController'] [data-element='editor-add']",
+ "title": "Add editor",
+ "content": "The editor defines what data type the property is based on. Click Add editor to open the editor picker dialog.",
+ "event": "click"
+ },
+ {
+ "element": "[ng-controller*='Umbraco.Editors.DataTypePickerController'] [data-element='editor-data-type-picker']",
+ "elementPreventClick": true,
+ "title": "Editor picker",
+ "content": "In the editor picker dialog we can pick one of the many built-in editors.
"
+ },
+ {
+ "element": "[data-element~='editor-data-type-picker'] [data-element='editor-Textarea']",
+ "title": "Select editor",
+ "content": "Select the Textarea editor which allows us to enter long texts.",
+ "event": "click"
+ },
+ {
+ "element": "[ng-controller~='Umbraco.Editors.DataTypeSettingsController'] [data-element='editor-data-type-settings']",
+ "elementPreventClick": true,
+ "title": "Editor settings",
+ "content": "Each property editor can have individual settings. We don't want to change any of these now."
+ },
+ {
+ "element": "[data-element~='editor-data-type-settings'] [data-element='button-submit']",
+ "title": "Save editor",
+ "content": "Click Submit to save the editor.",
+ "event": "click"
+ },
+ {
+ "element": "[data-element~='editor-property-settings'] [data-element='button-submit']",
+ "title": "Add property to document type",
+ "content": "Click Submit to add the property to the document type.",
+ "event": "click"
+ },
+ {
+ "element": "[data-element='button-save']",
+ "title": "Save the document type",
+ "content": "All we need now is to save the document type. Click Save to save the document type.",
+ "event": "click"
+ },
+ {
+ "element": "#applications [data-element='section-content']",
+ "title": "Navigate to the Content section",
+ "content": "To see the property we just added, let's head back to the Content section.",
+ "event": "click",
+ "backdropOpacity": 0.6
+ },
+ {
+ "element": "#tree [data-element='tree-item-Home']",
+ "title": "The Home page",
+ "event": "click",
+ "content": "Click the Home node.
",
+ "eventElement": "#tree [data-element='tree-item-Home'] a.umb-tree-item__label"
+ },
+ {
+ "element": "[data-element='editor-content'] [data-element='group-Content']",
+ "elementPreventClick": true,
+ "title": "The Content group",
+ "content": "Under the Content group you will find the new property.
"
+ },
+ {
+ "element": "[data-element='property-welcomeText']",
+ "title": "Add an About text",
+ "content": "Here you can see the text area you added. Try entering some text. This could be
This is the Home page! "
+ },
+ {
+ "element": "[data-element='button-saveAndPublish']",
+ "title": "Save and Publish",
+ "content": "Click on the Publish button to publish the changes and make them visible to the public.
In the next tour you will learn how to update the template to render content from the new Welcome Text property.
",
+ "event": "click"
+ }
+ ]
+ },
+ {
+ "name": "Templating",
+ "alias": "theStarterKitTemplates",
+ "group": "Data structure",
+ "groupOrder": 120,
+ "requiredSections": [
+ "content",
+ "settings"
+ ],
+ "steps": [
+ {
+ "title": "Render your content in a template",
+ "content": "Templating in Umbraco builds on the concept of Razor Views from asp.net MVC. - This tour is a sneak peek on how to write templates in Umbraco.
In this tour you will learn how to render content from the new Welcome Text property we added to the Home document type, so you can see the content added to our Home content page.
",
+ "type": "intro"
+ },
+ {
+ "element": "#applications [data-element='section-settings']",
+ "title": "Navigate to the Settings section",
+ "content": "In the Settings section you will find all the templates.
It is of course also possible to edit all your code files in your favorite code editor.
",
+ "event": "click",
+ "backdropOpacity": 0.6
+ },
+ {
+ "element": "#tree [data-element='tree-item-templates']",
+ "title": "Expand the Templates node",
+ "content": "To see all our templates click the arrow to the left of the Templates node.
",
+ "event": "click",
+ "eventElement": "#tree [data-element='tree-item-templates'] [data-element='tree-item-expand']"
+ },
+ {
+ "element": "#tree [data-element='tree-item-templates'] [data-element='tree-item-Master']",
+ "title": "Master templates",
+ "content": "The first template you will see is the Master template .
When creating new templates we don't want to duplicate header, footer etc. across all our templates so they get inherited from the Master.
Click the arrow to the left of the Master template node to see the child templates.
",
+ "event": "click",
+ "eventElement": "#tree [data-element='tree-item-templates'] [data-element='tree-item-Master'] [data-element='tree-item-expand']"
+ },
+ {
+ "element": "#tree [data-element='tree-item-templates'] [data-element='tree-item-Home']",
+ "title": "Open Home template",
+ "content": "When a document type is created you can choose to get a matching template created.
Click the Home template to open it.
",
+ "eventElement": "#tree [data-element='tree-item-templates'] [data-element='tree-item-Home'] a.umb-tree-item__label",
+ "event": "click"
+ },
+ {
+ "element": "[data-element='editor-templates'] [data-element='editor-container']",
+ "title": "Edit template",
+ "content": "To render the field Welcome Text from the Home document type copy/paste the following code on line 20 underneath the first section :
<section class=\"section section--themed section--content-center\"><h1>@Model.WelcomeText</h1></section> "
+ },
+ {
+ "element": "[data-element='editor-templates'] [data-element='button-save']",
+ "title": "Save the template",
+ "content": "Click the Save button and your template will be saved.",
+ "event": "click"
+ },
+ {
+ "element": "[data-element='editor-container']",
+ "elementPreventClick": true,
+ "title": "Preview Home page",
+ "content": "The Document type, template and content is now ready to preview.
You can now go back to you Home page and preview your new content.
"
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/StarterKit/lang/en-GB.xml b/UmbracoPackages/App_Plugins/StarterKit/lang/en-GB.xml
new file mode 100644
index 0000000..1fc3cec
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/StarterKit/lang/en-GB.xml
@@ -0,0 +1,6 @@
+
+
+
+ Learn Umbraco
+
+
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/StarterKit/lang/en-US.xml b/UmbracoPackages/App_Plugins/StarterKit/lang/en-US.xml
new file mode 100644
index 0000000..1fc3cec
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/StarterKit/lang/en-US.xml
@@ -0,0 +1,6 @@
+
+
+
+ Learn Umbraco
+
+
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/StarterKit/lessons.service.js b/UmbracoPackages/App_Plugins/StarterKit/lessons.service.js
new file mode 100644
index 0000000..c942256
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/StarterKit/lessons.service.js
@@ -0,0 +1,20 @@
+angular.module('umbraco.services').factory('lessonsService', function ($http, $q, umbRequestHelper) {
+
+ var service = {
+
+ getLessons: function (path) {
+ var qs = "?path=" + path;
+ var url = umbRequestHelper.getApiUrl("lessonsApiBaseUrl", "GetLessons" + qs);
+ return umbRequestHelper.resourcePromise($http.get(url), "Failed to get lessons content");
+ },
+
+ getLessonSteps: function (path) {
+ var qs = "?path=" + path;
+ var url = umbRequestHelper.getApiUrl("lessonsApiBaseUrl", "GetLessonSteps" + qs);
+ return umbRequestHelper.resourcePromise($http.get(url), "Failed to get lessons content");
+ }
+ };
+
+ return service;
+
+});
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/StarterKit/package.manifest b/UmbracoPackages/App_Plugins/StarterKit/package.manifest
new file mode 100644
index 0000000..28267b0
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/StarterKit/package.manifest
@@ -0,0 +1,15 @@
+{
+ "javascript": [
+ "~/App_Plugins/Starterkit/lessons.service.js",
+ "~/App_Plugins/Starterkit/starterkithelp.controller.js",
+ "~/App_Plugins/Starterkit/tours/views/medialibrary/uploadimages.controller.js",
+ "~/App_Plugins/Starterkit/tours/views/validatetext.controller.js"
+ ],
+ "dashboards":[
+ {
+ "alias": "lessons",
+ "view": "/App_Plugins/StarterKit/starterkithelp.html",
+ "sections": ["user-help"]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/StarterKit/starterkithelp.html b/UmbracoPackages/App_Plugins/StarterKit/starterkithelp.html
new file mode 100644
index 0000000..5043409
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/StarterKit/starterkithelp.html
@@ -0,0 +1,36 @@
+
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/StarterKit/tours/views/medialibrary/uploadimages.controller.js b/UmbracoPackages/App_Plugins/StarterKit/tours/views/medialibrary/uploadimages.controller.js
new file mode 100644
index 0000000..7cc919b
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/StarterKit/tours/views/medialibrary/uploadimages.controller.js
@@ -0,0 +1,56 @@
+(function () {
+ "use strict";
+
+ function UploadImagesController($scope, editorState, mediaResource) {
+
+ var vm = this;
+ var element = angular.element($scope.model.currentStep.element);
+ var currentNode = editorState.getCurrent();
+ var imageCount = 0;
+
+ vm.error = false;
+ vm.loading = false;
+
+ vm.initNextStep = initNextStep;
+
+ function init() {
+
+ vm.loading = true;
+
+ mediaResource.getChildren(currentNode.id)
+ .then(function (data) {
+ imageCount = data.totalItems;
+ vm.loading = false;
+ });
+
+ }
+
+ function initNextStep() {
+
+ vm.error = false;
+ vm.buttonState = "busy";
+
+ // make sure we have uploaded at least one image
+ mediaResource.getChildren(currentNode.id)
+ .then(function (data) {
+
+ var children = data;
+
+ if(children.items && children.totalItems > imageCount) {
+ $scope.model.nextStep();
+ } else {
+ vm.error = true;
+ }
+
+ vm.buttonState = "init";
+
+ });
+
+ }
+
+ init();
+
+ }
+
+ angular.module("umbraco").controller("Umbraco.Starterkit.Tours.MediaLibrary.UploadImagesController", UploadImagesController);
+})();
diff --git a/UmbracoPackages/App_Plugins/StarterKit/tours/views/medialibrary/uploadimages.html b/UmbracoPackages/App_Plugins/StarterKit/tours/views/medialibrary/uploadimages.html
new file mode 100644
index 0000000..f6cd210
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/StarterKit/tours/views/medialibrary/uploadimages.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+ Please upload an image
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/StarterKit/tours/views/validatetext.controller.js b/UmbracoPackages/App_Plugins/StarterKit/tours/views/validatetext.controller.js
new file mode 100644
index 0000000..a77e1d5
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/StarterKit/tours/views/validatetext.controller.js
@@ -0,0 +1,25 @@
+(function () {
+ "use strict";
+
+ function ValidateTextController($scope) {
+
+ var vm = this;
+ var element = angular.element($scope.model.currentStep.element);
+ var validateText = $scope.model.currentStep.customProperties.validateText ? $scope.model.currentStep.customProperties.validateText : "";
+
+ vm.error = false;
+
+ vm.initNextStep = initNextStep;
+
+ function initNextStep() {
+ if(element.val() === validateText) {
+ $scope.model.nextStep();
+ } else {
+ vm.error = true;
+ }
+ }
+
+ }
+
+ angular.module("umbraco").controller("Umbraco.Starterkit.Tours.ValidateTextController", ValidateTextController);
+})();
diff --git a/UmbracoPackages/App_Plugins/StarterKit/tours/views/validatetext.html b/UmbracoPackages/App_Plugins/StarterKit/tours/views/validatetext.html
new file mode 100644
index 0000000..11ffebd
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/StarterKit/tours/views/validatetext.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+ Please fill out the field
+ Please enter {{ model.currentStep.customProperties.validateText }} in the field
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/brothers.uNesting/_nc.js b/UmbracoPackages/App_Plugins/brothers.uNesting/_nc.js
new file mode 100644
index 0000000..cb2db49
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/brothers.uNesting/_nc.js
@@ -0,0 +1,576 @@
+angular.module("umbraco").controller("Umbraco.PropertyEditors.NestedContent.PropertyEditorController", [
+
+ "$scope",
+ "$interpolate",
+ "$filter",
+ "$timeout",
+ "contentResource",
+ "localizationService",
+ "iconHelper",
+ "clipboardService",
+ "eventsService",
+ "overlayService",
+
+ function ($scope, $interpolate, $filter, $timeout, contentResource, localizationService, iconHelper, clipboardService, eventsService, overlayService)
+ {
+
+ var contentTypeAliases = [];
+ _.each($scope.model.config.contentTypes, function (contentType)
+ {
+ contentTypeAliases.push(contentType.ncAlias);
+ });
+
+ _.each($scope.model.config.contentTypes, function (contentType)
+ {
+ contentType.nameExp = !!contentType.nameTemplate
+ ? $interpolate(contentType.nameTemplate)
+ : undefined;
+ });
+
+ $scope.nodes = [];
+ $scope.currentNode = undefined;
+ $scope.realCurrentNode = undefined;
+ $scope.scaffolds = undefined;
+ $scope.sorting = false;
+ $scope.inited = false;
+
+ $scope.minItems = $scope.model.config.minItems || 0;
+ $scope.maxItems = $scope.model.config.maxItems || 0;
+
+ if ($scope.maxItems === 0)
+ $scope.maxItems = 1000;
+
+ $scope.singleMode = $scope.minItems === 1 && $scope.maxItems === 1;
+ $scope.showIcons = Object.toBoolean($scope.model.config.showIcons);
+ $scope.wideMode = Object.toBoolean($scope.model.config.hideLabel);
+ $scope.hasContentTypes = $scope.model.config.contentTypes.length > 0;
+
+ $scope.labels = {};
+ localizationService.localizeMany(["grid_addElement", "content_createEmpty"]).then(function (data)
+ {
+ $scope.labels.grid_addElement = data[0];
+ $scope.labels.content_createEmpty = data[1];
+ });
+
+ // helper to force the current form into the dirty state
+ $scope.setDirty = function ()
+ {
+ if ($scope.propertyForm)
+ {
+ $scope.propertyForm.$setDirty();
+ }
+ };
+
+ $scope.addNode = function (alias)
+ {
+ var scaffold = $scope.getScaffold(alias);
+
+ var newNode = createNode(scaffold, null);
+
+ $scope.currentNode = newNode;
+ $scope.setDirty();
+ };
+
+ $scope.openNodeTypePicker = function ($event)
+ {
+ if ($scope.nodes.length >= $scope.maxItems)
+ {
+ return;
+ }
+
+ $scope.overlayMenu = {
+ show: false,
+ style: {},
+ filter: $scope.scaffolds.length > 12 ? true : false,
+ orderBy: "$index",
+ view: "itempicker",
+ event: $event,
+ clickPasteItem: function (item)
+ {
+ $scope.pasteFromClipboard(item.data);
+ $scope.overlayMenu.show = false;
+ $scope.overlayMenu = null;
+ },
+ submit: function (model)
+ {
+ if (model && model.selectedItem)
+ {
+ $scope.addNode(model.selectedItem.alias);
+ }
+ $scope.overlayMenu.show = false;
+ $scope.overlayMenu = null;
+ },
+ close: function ()
+ {
+ $scope.overlayMenu.show = false;
+ $scope.overlayMenu = null;
+ }
+ };
+
+ // this could be used for future limiting on node types
+ $scope.overlayMenu.availableItems = [];
+ _.each($scope.scaffolds, function (scaffold)
+ {
+ $scope.overlayMenu.availableItems.push({
+ alias: scaffold.contentTypeAlias,
+ name: scaffold.contentTypeName,
+ icon: iconHelper.convertFromLegacyIcon(scaffold.icon)
+ });
+ });
+
+ if ($scope.overlayMenu.availableItems.length === 0)
+ {
+ return;
+ }
+
+ $scope.overlayMenu.size = $scope.overlayMenu.availableItems.length > 6 ? "medium" : "small";
+
+ $scope.overlayMenu.pasteItems = [];
+ var availableNodesForPaste = clipboardService.retriveDataOfType("elementType", contentTypeAliases);
+ _.each(availableNodesForPaste, function (node)
+ {
+ $scope.overlayMenu.pasteItems.push({
+ alias: node.contentTypeAlias,
+ name: node.name, //contentTypeName
+ data: node,
+ icon: iconHelper.convertFromLegacyIcon(node.icon)
+ });
+ });
+
+ $scope.overlayMenu.title = $scope.overlayMenu.pasteItems.length > 0 ? $scope.labels.grid_addElement : $scope.labels.content_createEmpty;
+
+ $scope.overlayMenu.clickClearPaste = function ($event)
+ {
+ $event.stopPropagation();
+ $event.preventDefault();
+ clipboardService.clearEntriesOfType("elementType", contentTypeAliases);
+ $scope.overlayMenu.pasteItems = [];// This dialog is not connected via the clipboardService events, so we need to update manually.
+ };
+
+ if ($scope.overlayMenu.availableItems.length === 1 && $scope.overlayMenu.pasteItems.length === 0)
+ {
+ // only one scaffold type - no need to display the picker
+ $scope.addNode($scope.scaffolds[0].contentTypeAlias);
+ return;
+ }
+
+ $scope.overlayMenu.show = true;
+ };
+
+ $scope.editNode = function (idx)
+ {
+ if ($scope.currentNode && $scope.currentNode.key === $scope.nodes[idx].key)
+ {
+ $scope.currentNode = undefined;
+ } else
+ {
+ $scope.currentNode = $scope.nodes[idx];
+ }
+ };
+
+ $scope.deleteNode = function (idx)
+ {
+ if ($scope.nodes.length > $scope.model.config.minItems)
+ {
+ $scope.nodes.splice(idx, 1);
+ $scope.setDirty();
+ updateModel();
+ }
+ };
+ $scope.requestDeleteNode = function (idx)
+ {
+ if ($scope.model.config.confirmDeletes === true)
+ {
+ localizationService.localizeMany(["content_nestedContentDeleteItem", "general_delete", "general_cancel", "contentTypeEditor_yesDelete"]).then(function (data)
+ {
+ const overlay = {
+ title: data[1],
+ content: data[0],
+ closeButtonLabel: data[2],
+ submitButtonLabel: data[3],
+ submitButtonStyle: "danger",
+ close: function ()
+ {
+ overlayService.close();
+ },
+ submit: function ()
+ {
+ $scope.deleteNode(idx);
+ overlayService.close();
+ }
+ };
+
+ overlayService.open(overlay);
+ });
+ } else
+ {
+ $scope.deleteNode(idx);
+ }
+ };
+
+ $scope.getName = function (idx)
+ {
+
+ var name = "";
+
+ if ($scope.model.value[idx])
+ {
+
+ var contentType = $scope.getContentTypeConfig($scope.model.value[idx].ncContentTypeAlias);
+
+ if (contentType != null)
+ {
+ // first try getting a name using the configured label template
+ if (contentType.nameExp)
+ {
+ // Run the expression against the stored dictionary value, NOT the node object
+ var item = $scope.model.value[idx];
+
+ // Add a temporary index property
+ item["$index"] = (idx + 1);
+
+ var newName = contentType.nameExp(item);
+ if (newName && (newName = $.trim(newName)))
+ {
+ name = newName;
+ }
+
+ // Delete the index property as we don't want to persist it
+ delete item["$index"];
+ }
+
+ // if we still do not have a name and we have multiple content types to choose from, use the content type name (same as is shown in the content type picker)
+ if (!name && $scope.scaffolds.length > 1)
+ {
+ var scaffold = $scope.getScaffold(contentType.ncAlias);
+ if (scaffold)
+ {
+ name = scaffold.contentTypeName;
+ }
+ }
+ }
+
+ }
+
+ if (!name)
+ {
+ name = "Item " + (idx + 1);
+ }
+
+ // Update the nodes actual name value
+ if ($scope.nodes[idx].name !== name)
+ {
+ $scope.nodes[idx].name = name;
+ }
+
+ return name;
+ };
+
+ $scope.getIcon = function (idx)
+ {
+ var scaffold = $scope.getScaffold($scope.model.value[idx].ncContentTypeAlias);
+ return scaffold && scaffold.icon ? iconHelper.convertFromLegacyIcon(scaffold.icon) : "icon-folder";
+ }
+ $scope.sortableOptions = {
+ axis: "y",
+ cursor: "move",
+ handle: '.umb-nested-content__header-bar',
+ distance: 10,
+ opacity: 0.7,
+ tolerance: "pointer",
+ scroll: true,
+ start: function (ev, ui)
+ {
+ updateModel();
+ // Yea, yea, we shouldn't modify the dom, sue me
+ $("#umb-nested-content--" + $scope.model.id + " .umb-rte textarea").each(function ()
+ {
+ tinymce.execCommand("mceRemoveEditor", false, $(this).attr("id"));
+ $(this).css("visibility", "hidden");
+ });
+ $scope.$apply(function ()
+ {
+ $scope.sorting = true;
+ });
+ },
+ update: function (ev, ui)
+ {
+ $scope.setDirty();
+ },
+ stop: function (ev, ui)
+ {
+ $("#umb-nested-content--" + $scope.model.id + " .umb-rte textarea").each(function ()
+ {
+ tinymce.execCommand("mceAddEditor", true, $(this).attr("id"));
+ $(this).css("visibility", "visible");
+ });
+ $scope.$apply(function ()
+ {
+ $scope.sorting = false;
+ updateModel();
+ });
+ }
+ };
+
+ $scope.getScaffold = function (alias)
+ {
+ return _.find($scope.scaffolds, function (scaffold)
+ {
+ return scaffold.contentTypeAlias === alias;
+ });
+ }
+
+ $scope.getContentTypeConfig = function (alias)
+ {
+ return _.find($scope.model.config.contentTypes, function (contentType)
+ {
+ return contentType.ncAlias === alias;
+ });
+ }
+
+ $scope.showCopy = clipboardService.isSupported();
+
+ $scope.showPaste = false;
+
+ $scope.clickCopy = function ($event, node)
+ {
+
+ syncCurrentNode();
+
+ clipboardService.copy("elementType", node.contentTypeAlias, node);
+ $event.stopPropagation();
+ }
+
+ $scope.pasteFromClipboard = function (newNode)
+ {
+
+ if (newNode === undefined)
+ {
+ return;
+ }
+
+ // generate a new key.
+ newNode.key = String.CreateGuid();
+
+ $scope.nodes.push(newNode);
+ $scope.setDirty();
+ //updateModel();// done by setting current node...
+
+ $scope.currentNode = newNode;
+ }
+
+ function checkAbilityToPasteContent()
+ {
+ $scope.showPaste = clipboardService.hasEntriesOfType("elementType", contentTypeAliases);
+ }
+
+ eventsService.on("clipboardService.storageUpdate", checkAbilityToPasteContent);
+
+ var notSupported = [
+ "Umbraco.Tags",
+ "Umbraco.UploadField",
+ "Umbraco.ImageCropper"
+ ];
+
+ // Initialize
+ var scaffoldsLoaded = 0;
+ $scope.scaffolds = [];
+ _.each($scope.model.config.contentTypes, function (contentType)
+ {
+ contentResource.getScaffold(-20, contentType.ncAlias).then(function (scaffold)
+ {
+ // make sure it's an element type before allowing the user to create new ones
+ if (scaffold.isElement)
+ {
+ // remove all tabs except the specified tab
+ var tabs = scaffold.variants[0].tabs;
+ var tab = _.find(tabs, function (tab)
+ {
+ return tab.id !== 0 && (tab.alias.toLowerCase() === contentType.ncTabAlias.toLowerCase() || contentType.ncTabAlias === "");
+ });
+ scaffold.variants[0].tabs = [];
+ if (tab)
+ {
+ scaffold.variants[0].tabs.push(tab);
+
+ angular.forEach(tab.properties,
+ function (property)
+ {
+ if (_.find(notSupported, function (x) { return x === property.editor; }))
+ {
+ property.notSupported = true;
+ // TODO: Not supported message to be replaced with 'content_nestedContentEditorNotSupported' dictionary key. Currently not possible due to async/timing quirk.
+ property.notSupportedMessage = "Property " + property.label + " uses editor " + property.editor + " which is not supported by Nested Content.";
+ }
+ });
+ }
+
+ // Store the scaffold object
+ $scope.scaffolds.push(scaffold);
+ }
+
+ scaffoldsLoaded++;
+ initIfAllScaffoldsHaveLoaded();
+ }, function (error)
+ {
+ scaffoldsLoaded++;
+ initIfAllScaffoldsHaveLoaded();
+ });
+ });
+
+ var initIfAllScaffoldsHaveLoaded = function ()
+ {
+ // Initialize when all scaffolds have loaded
+ if ($scope.model.config.contentTypes.length === scaffoldsLoaded)
+ {
+ // Because we're loading the scaffolds async one at a time, we need to
+ // sort them explicitly according to the sort order defined by the data type.
+ contentTypeAliases = [];
+ _.each($scope.model.config.contentTypes, function (contentType)
+ {
+ contentTypeAliases.push(contentType.ncAlias);
+ });
+ $scope.scaffolds = $filter("orderBy")($scope.scaffolds, function (s)
+ {
+ return contentTypeAliases.indexOf(s.contentTypeAlias);
+ });
+
+ // Convert stored nodes
+ if ($scope.model.value)
+ {
+ for (var i = 0; i < $scope.model.value.length; i++)
+ {
+ var item = $scope.model.value[i];
+ var scaffold = $scope.getScaffold(item.ncContentTypeAlias);
+ if (scaffold == null)
+ {
+ // No such scaffold - the content type might have been deleted. We need to skip it.
+ continue;
+ }
+ createNode(scaffold, item);
+ }
+ }
+
+ // Enforce min items
+ if ($scope.nodes.length < $scope.model.config.minItems)
+ {
+ for (var i = $scope.nodes.length; i < $scope.model.config.minItems; i++)
+ {
+ $scope.addNode($scope.scaffolds[0].contentTypeAlias);
+ }
+ }
+
+ // If there is only one item, set it as current node
+ if ($scope.singleMode || ($scope.nodes.length === 1 && $scope.maxItems === 1))
+ {
+ $scope.currentNode = $scope.nodes[0];
+ }
+
+ $scope.inited = true;
+
+ checkAbilityToPasteContent();
+ }
+ }
+
+ function createNode(scaffold, fromNcEntry)
+ {
+ var node = angular.copy(scaffold);
+
+ node.key = fromNcEntry && fromNcEntry.key ? fromNcEntry.key : String.CreateGuid();
+
+ var variant = node.variants[0];
+
+ for (var t = 0; t < variant.tabs.length; t++)
+ {
+ var tab = variant.tabs[t];
+
+ for (var p = 0; p < tab.properties.length; p++)
+ {
+ var prop = tab.properties[p];
+
+ prop.propertyAlias = prop.alias;
+ prop.alias = $scope.model.alias + "___" + prop.alias;
+ // Force validation to occur server side as this is the
+ // only way we can have consistency between mandatory and
+ // regex validation messages. Not ideal, but it works.
+ prop.validation = {
+ mandatory: false,
+ pattern: ""
+ };
+
+ if (fromNcEntry && fromNcEntry[prop.propertyAlias])
+ {
+ prop.value = fromNcEntry[prop.propertyAlias];
+ }
+ }
+ }
+
+ $scope.nodes.push(node);
+
+ return node;
+ }
+
+ function convertNodeIntoNCEntry(node)
+ {
+ var obj = {
+ key: node.key,
+ name: node.name,
+ ncContentTypeAlias: node.contentTypeAlias
+ };
+ for (var t = 0; t < node.variants[0].tabs.length; t++)
+ {
+ var tab = node.variants[0].tabs[t];
+ for (var p = 0; p < tab.properties.length; p++)
+ {
+ var prop = tab.properties[p];
+ if (typeof prop.value !== "function")
+ {
+ obj[prop.propertyAlias] = prop.value;
+ }
+ }
+ }
+ return obj;
+ }
+
+ function syncCurrentNode()
+ {
+ if ($scope.realCurrentNode)
+ {
+ $scope.$broadcast("ncSyncVal", { key: $scope.realCurrentNode.key });
+ }
+ }
+
+ function updateModel()
+ {
+ syncCurrentNode();
+
+ if ($scope.inited)
+ {
+ var newValues = [];
+ for (var i = 0; i < $scope.nodes.length; i++)
+ {
+ newValues.push(convertNodeIntoNCEntry($scope.nodes[i]));
+ }
+ $scope.model.value = newValues;
+ }
+ }
+
+ $scope.$watch("currentNode", function (newVal)
+ {
+ updateModel();
+ $scope.realCurrentNode = newVal;
+ });
+
+ var unsubscribe = $scope.$on("formSubmitting", function (ev, args)
+ {
+ updateModel();
+ });
+
+ $scope.$on("$destroy", function ()
+ {
+ unsubscribe();
+ });
+
+ }
+
+]);
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/brothers.uNesting/interceptor.js b/UmbracoPackages/App_Plugins/brothers.uNesting/interceptor.js
new file mode 100644
index 0000000..d31b0d4
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/brothers.uNesting/interceptor.js
@@ -0,0 +1,17 @@
+angular.module('umbraco.services').config(['$httpProvider', function ($httpProvider)
+{
+ $httpProvider.interceptors.push(['$q', '$injector', 'notificationsService', function ($q, $injector, notificationsService)
+ {
+ return {
+ 'request': function (request)
+ {
+ if (request.url.indexOf("views/propertyeditors/nestedcontent/nestedcontent.html") === 0)
+ {
+ request.url = '/App_Plugins/brothers.uNesting/uNesting.html';
+ }
+
+ return request || $q.when(request);
+ }
+ };
+ }]);
+}]);
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/brothers.uNesting/package.manifest b/UmbracoPackages/App_Plugins/brothers.uNesting/package.manifest
new file mode 100644
index 0000000..1cb8b8a
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/brothers.uNesting/package.manifest
@@ -0,0 +1,9 @@
+{
+ "javascript": [
+ "~/App_Plugins/brothers.uNesting/interceptor.js",
+ "~/App_Plugins/brothers.uNesting/uNesting.controller.js"
+ ],
+ "css": [
+ "~/App_Plugins/brothers.uNesting/uNesting.css"
+ ]
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/brothers.uNesting/uNesting.controller.js b/UmbracoPackages/App_Plugins/brothers.uNesting/uNesting.controller.js
new file mode 100644
index 0000000..9f8575e
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/brothers.uNesting/uNesting.controller.js
@@ -0,0 +1,26 @@
+
+angular.module("umbraco").controller("brothers.uNesting.PropertyEditorController", function ($scope, $controller)
+{
+ angular.extend(this, $controller('Umbraco.PropertyEditors.NestedContent.PropertyEditorController', { $scope: $scope }));
+
+ $scope.getView = function (node, idx)
+ {
+ if ($scope.model.value[idx])
+ {
+ var contentType = $scope.getContentTypeConfig($scope.model.value[idx].ncContentTypeAlias);
+
+ if (contentType !== null && contentType.nameExp)
+ {
+ // Run the expression against the stored dictionary value, NOT the node object
+ var item = $scope.model.value[idx];
+ var newName = contentType.nameExp(item);
+
+ if (newName && (newName = $.trim(newName)))
+ {
+ return newName;
+ }
+ }
+ }
+ return node.documentType.description || 'Enter data ...';
+ };
+});
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/brothers.uNesting/uNesting.css b/UmbracoPackages/App_Plugins/brothers.uNesting/uNesting.css
new file mode 100644
index 0000000..db3b329
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/brothers.uNesting/uNesting.css
@@ -0,0 +1,159 @@
+
+
+/* item */
+
+.unesting-item
+{
+ position: relative;
+ text-align: left;
+ background: #fff;
+}
+
+.unesting-item.ui-sortable-placeholder
+{
+ background: #f3f3f5;
+ border: 1px solid #e9e9eb;
+ visibility: visible !important;
+ height: 55px;
+ margin-top: -1px;
+}
+
+/* header */
+
+.unesting-item-header
+{
+ border-bottom: 1px solid #e9e9eb;
+ cursor: pointer;
+ background-color: #fff;
+ user-select: none;
+}
+
+.unesting-item-header-inner
+{
+ line-height: 20px;
+ position: relative;
+ margin-top: 1px;
+ padding: 15px 5px;
+ color: #1b264f;
+ border-radius: 3px 3px 0 0;
+}
+
+.unesting-item-header-inner i
+{
+ position: absolute;
+ top: 50%;
+ margin-top: -11px;
+ font-size: 1.2rem;
+}
+
+.unesting-item-header-content.--has-icon
+{
+ padding-left: 40px;
+}
+
+.unesting-item-header:hover .unesting-item-header-inner .unesting-item-header-content
+{
+ padding-right: 130px;
+}
+
+.unesting-item-header-content
+{
+ line-height: 20px;
+ color: #1b264f;
+ white-space: nowrap;
+}
+
+.unesting-item-header-content-name
+{
+ max-height: 20px;
+}
+
+.unesting-item-header-content-text
+{
+ color: #817f85;
+ font-size: 13px;
+}
+
+/* icons */
+
+.unesting-icons
+{
+ opacity: 0;
+ transition: opacity .12s ease-in-out;
+ position: absolute;
+ right: 0;
+ top: 3px;
+ padding: 5px;
+ margin-top: 8px;
+ display: flex;
+ grid-gap: 8px;
+}
+
+.unesting-item-header:hover .unesting-icons
+{
+ opacity: 1;
+}
+
+.unesting-icon
+{
+ display: flex;
+ flex-direction: row;
+ width: 32px;
+ height: 32px;
+ justify-content: center;
+ align-items: center;
+ border-radius: 20px;
+ border: 1px solid #e9e9eb;
+ cursor: pointer;
+ color: #1b264f;
+ transition: background 0.12s ease;
+}
+
+.unesting-icon:hover
+{
+ background: #f6f4f4;
+ color: #2152a3;
+ text-decoration: none;
+}
+
+.unesting-icon.is-more i
+{
+ font-size: 4px;
+ line-height: 4px;
+ height: 3px;
+ width: 3px;
+ border-radius: 50%;
+ background: #1b264f;
+ display: inline-block;
+ margin: 0 1px;
+ opacity: .6;
+}
+
+.unesting-icon .icon
+{
+ font-size: 0.9rem;
+}
+
+.unesting-icon--disabled
+{
+ opacity: .3;
+}
+
+.unesting-more-container
+{
+ position: relative;
+}
+
+.unesting-more-dropdown
+{
+ right: 0;
+ left: auto;
+}
+
+
+/* data type overrides */
+
+.unesting-item .umb-sortable-thumbnails li
+{
+ background: none;
+}
\ No newline at end of file
diff --git a/UmbracoPackages/App_Plugins/brothers.uNesting/uNesting.html b/UmbracoPackages/App_Plugins/brothers.uNesting/uNesting.html
new file mode 100644
index 0000000..3592aca
--- /dev/null
+++ b/UmbracoPackages/App_Plugins/brothers.uNesting/uNesting.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/UmbracoPackages/Global.asax b/UmbracoPackages/Global.asax
new file mode 100644
index 0000000..0831274
--- /dev/null
+++ b/UmbracoPackages/Global.asax
@@ -0,0 +1 @@
+<%@ Application Inherits="Umbraco.Web.UmbracoApplication" Language="C#" %>
diff --git a/UmbracoPackages/Properties/AssemblyInfo.cs b/UmbracoPackages/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..edf4f43
--- /dev/null
+++ b/UmbracoPackages/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("UmbracoPackages")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("UmbracoPackages")]
+[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("eeb8531b-a9f0-46fb-9532-abb92743290a")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/UmbracoPackages/Umbraco/Config/Lang/cs.xml b/UmbracoPackages/Umbraco/Config/Lang/cs.xml
new file mode 100644
index 0000000..a229898
--- /dev/null
+++ b/UmbracoPackages/Umbraco/Config/Lang/cs.xml
@@ -0,0 +1,972 @@
+
+
+
+ umbraco
+ http://umbraco.org
+
+
+ Kultura a názvy hostitelů
+ Historie změn
+ Prohlížet uzel
+ Změnit typ dokumentu
+ Kopírovat
+ Vytvořit
+ Vytvořit balíček
+ Odstranit
+ Deaktivovat
+ Vyprázdnit koš
+ Exportovat typ dokumentu
+ Importovat typ dokumentu
+ Importovat balíček
+ Editovat na stránce
+ Odhlásit
+ Přesunout
+ Upozornění
+ Veřejný přístup
+ Publikovat
+ Nepublikovat
+ Znovu načíst uzly
+ Znovu publikovat celý web
+ Práva
+ Vrátit starší verzi
+ Odeslat k publikování
+ Odeslat k překladu
+ Seřadit
+ Přeložit
+ Aktualizovat
+
+
+ Přístup zakázán.
+ Přidat novou doménu
+ odebrat
+ Neplatný uzel.
+ Neplatný tvar domény.
+ Doména už byla přiřazena.
+ Doména
+ Jazyk
+ Nová doména '%0%' byla vytvořena
+ Doména '%0%' je odstraněna
+ Doména '%0%' už byla přiřazena
+ Doména '%0%' byla aktualizována
+ Editace aktuálních domén
+ Dědit
+ Kultura
+ nebo dědění kultury po nadřazeném uzlu. Vztahuje se také
+ na aktivní uzel.]]>
+ Domény
+
+
+ Zobrazení pro
+
+
+ Vybrat
+ Dělat něco jiného
+ Tučně
+ Zrušit odsazení odstavce
+ Vložit formulářové pole
+ Vložit grafický nadpis
+ Editovat Html
+ Odsadit odstavec
+ Kurzíva
+ Zarovnat na střed
+ Zarovnat na levo
+ Zarovnat na pravo
+ Vložit odkaz
+ Vložit místní odkaz (kotvu)
+ Neuspořádaný seznam
+ Číslovaný seznam
+ Vložit makro
+ Vložit obrázek
+ Editovat vztahy
+ Uložit
+ Uložit a publikovat
+ Uložit a odeslat ke schválení
+ Náhled
+ Náhled je deaktivován, protože není přiřazena žádná šablona
+ Vybrat styl
+ Zobrazit styly
+ Vložit tabulku
+
+
+ Abyste změnili typ dokumentu pro zvolený obsah, nejprve jej vyberte ze seznamu typů platných pro tohle umístění.
+ Pak potvrďte a/nebo pozměňte mapování vlastností z aktuálního typu na nový a dejte Uložit.
+ Obsah byl znovu publikován.
+ Aktuální vlastnost
+ Aktuální typ
+ Typ dokumentu nemůže být změněn, neboť neexistují alternativy platné pro toto umístění.
+ Typ dokumentu byl změněn
+ Mapování vlastností
+ Mapování na vlastnost
+ Nová šablona
+ Nový typ
+ nic
+ Obsah
+ Vybrat nový typ dokumentu
+ Typ dokumentu pro zvolený obsah byl úspěšně změněný na [new type] a následující vlastnosti byly namapovány:
+ na
+ Nelze dokončit mapování vlastností, neboť nejméně jedna z vlastností má definováno více než jedno mapování.
+ Jsou zobrazeny pouze alternativní typy platné pro aktuální umístění.
+
+
+ O této stránce
+ Alias
+ (jak byste popsali obrázek přes telefon)
+ Alternativní adresy URL
+ Klikněte pro editaci položky
+ Vytvořeno uživatelem
+ Původní autor
+ Aktualizováno uživatelem
+ Vytvořeno
+ Datum/čas vytvoření tohoto dokumentu
+ Typ dokumentu
+ Editování
+ Datum odebrání
+ Tato položko byla změněna po publikování
+ Tato položka není publikována
+ Naposledy publikováno
+ Typ média
+ Odkaz na položky medií
+ Skupina členů
+ Role
+ Typ člena
+ Nevybráno žádné datum
+ Titulek stránky
+ Vlastnosti
+ Tento dokument je publikován, ale není viditelný, protože jeho rodič '%0%' publikován není
+ Jejda: tento dokument je publikován, ale není v mezipaměti (vnitřní chyba)
+ Publikovat
+ Stav publikování
+ Datum publikování
+ Datum ukončení publikování
+ Datum odebrání
+ Třídění je aktualizováno
+ Abyste uzly setřídili, jednoduše je přetáhněte anebo klikněte na jednu z hlaviček sloupce. Podržením "shift" nebo "control" při výběru můžete označit uzlů více.
+ Statistika
+ Titulek (volitelně)
+ Typ
+ Nepublikovat
+ Naposledy změněno
+ Datum/čas poslední změny dokumentu
+ Odebrat soubor(y)
+ URL adresa dokumentu
+ Člen skupin(y)
+ Není člen skupin(y)
+ Podřízené položky
+ Cíl
+
+
+ Klikněte pro nahrání
+
+
+ Kde chcete vytvořit nový %0%
+ Vytvořit položku pod
+ Vyberte typ a titulek
+ "typy dokumentů".]]>
+ "typy medií".]]>
+
+
+ Prohlédnout svůj web
+ - Skrýt
+ Jestli se umbraco neotevírá, možná budete muset povolit na tomto webu vyskakovací okna
+ byl otevřený v novém okně
+ Restart
+ Navštívit
+ Vítejte
+
+
+ Stay
+ Discard changes
+ You have unsaved changes
+ Are you sure you want to navigate away from this page? - you have unsaved changes
+
+
+ Done
+ Deleted %0% item
+ Deleted %0% items
+ Deleted %0% out of %1% item
+ Deleted %0% out of %1% items
+ Published %0% item
+ Published %0% items
+ Published %0% out of %1% item
+ Published %0% out of %1% items
+ Unpublished %0% item
+ Unpublished %0% items
+ Unpublished %0% out of %1% item
+ Unpublished %0% out of %1% items
+ Moved %0% item
+ Moved %0% items
+ Moved %0% out of %1% item
+ Moved %0% out of %1% items
+ Copied %0% item
+ Copied %0% items
+ Copied %0% out of %1% item
+ Copied %0% out of %1% items
+
+
+ Název
+ Spravovat názvy hostitelů
+ Zavřít toto okno
+ Jste si jistí. že chcete odstranit
+ Jste si jistí, že chcete deaktivovat
+ Jste si jistí?
+ Jste si jistí?
+ Vyjmout
+ Editovat položku slovníku
+ Editovat jazyk
+ Vložit místní odkaz
+ Vložit znak
+ Vložit grafický titulek
+ Vložit obrázek
+ Vložit odkaz
+ Kliknout pro přidání makra
+ Vložit tabulku
+ Naposledy editováno
+ Odkaz
+ Místní odkaz:
+ Při používání místních odkazů vložte znak "#" před odkaz
+ Otevřít v novém okně?
+ Nastavení makra
+ Toto makro nemá žádné vlastnosti, které by bylo možno editovat
+ Vložit
+ Editovat oprávnění pro
+ Položky koše jsou nyní mazány. Nezavírejte, prosím, toto okno, dokud operace probíhá
+ Koš je nyní prázdný
+ Odebrání položek z koše způsobí jejich trvalé odstranění
+ regexlib.com má v tuto chvíli nějaké problémy, které jsou mimo naší kontrolu. Omlouváme se za vzniklé nepříjemnosti.]]>
+ Vyhledat regulární výraz pro přidání validace formulářového prvku. Například: 'email, 'PSČ' 'url'
+ Odstranit makro
+ Pole je vyžadování
+ Web je přeindexován
+ Mezipaměť webu byla obnovena. Všechen publikovaný obsah je nyní aktuální, zatímco nepublikovaný obsah zůstal nepublikovaný.
+ Mezipaměť webu bude obnovena. Všechen publikovaný obsah bude aktualizován, zatímco nepublikovaný obsah zůstane nepublikovaný.
+ Počet sloupců
+ Počet řádků
+ Klikněte na obrázek pro zobrazení v plné velikosti
+ Vybrat položku
+ Zobrazit položku mezipaměti
+
+
+ %0%' níže. Můžete přidat další jazyky v nabídce 'jazyky' nalevo.]]>
+ Název jazyka
+
+
+ Zadejte Vaše uživatelské jméno
+ Zadejte Vaše heslo
+ Pojmenujte %0%...
+ Zadejte jméno...
+ Pište pro vyhledání...
+ Pište pro filtrování...
+
+
+
+
+ Přidat předlohu
+ Databázový datový typ
+ GUID editoru vlastností
+ Editor vlastností
+ Tlačítka
+ Povolit rozšířené nastavení pro
+ Povolit kontextové menu
+ Největší výchozí rozměr pro vložené obrázky
+ Související stylopisy
+ Zobrazit jmenovku
+ Šířka a výška
+
+
+ Vaše data byla uložena, ale než budete moci publikovat tuto stránku, je třeba odstranit některé chyby:
+ Současný MemberShip Provider nepodporuje změnu hesla (EnablePasswordRetrieval musí mít hodnotu true)
+ %0% již existuje
+ Vyskytly se chyby:
+ Vyskytly se chyby:
+ Heslo musí být nejméně %0% znaků dlouhé a obsahovat nejméně %1% nealfanumerických znaků
+ %0% musí být celé číslo
+ Pole %0% na záložce %1% je povinné
+ %0% je povinné pole
+ %0% v %1% není ve správném formátu
+ %0% není ve správném formátu
+
+
+ Použití daného typu souboru bylo zakázáno adminitrátorem
+ UPOZORNĚNÍ! I když CodeMirror je dle konfigurace povolený, je zakázaný v Internet Exploreru, protože není dost stabilní.
+ Vyplňte, prosím, alias i název nového typu vlastností!
+ Vyskytl se problém při čtení/zápisu do určeného souboru nebo adresáře
+ Uveďte, prosím, titulek
+ Vyberte, prosím, typ
+ Chystáte se obrázek zvětšit více, než je jeho původní rozměr. Opravdu chcete pokračovat?
+ Počáteční uzel je odstraněný, kontaktujte, prosím, administrátora
+ Před změnou stylu označte, prosím, obsah
+ Žádne aktivní styly nejsou dostupné
+ Umístěte, prosím, kurzor nalevo od těch dvou buňek, které chcete sloučit
+ Nemužete rozdělit buňku, která nebyla sloučená.
+
+
+ O...
+ Akce
+ Akce
+ Přidat
+ Alias
+ Jste si jistí?
+ Okraj
+ o
+ Zrušit
+ Okraj buňky
+ Vybrat
+ Zavřít
+ Zavřít okno
+ Komentovat
+ Potvrdit
+ Zachovat proporce
+ Pokračovat
+ Kopírovat
+ Vytvořit
+ Databáse
+ Datum
+ Výchozí
+ Odstranit
+ Odstraněno
+ Odstraňování...
+ Vzhled
+ Rozměry
+ Dolů
+ Stáhnout
+ Editovat
+ Editováno
+ Prvky
+ Email
+ Chyba
+ Najít
+ Výška
+ Nápověda
+ Ikona
+ Import
+ Vnitřní okraj
+ Vložit
+ Instalovat
+ Vyrovnat
+ Jazyk
+ Rozvržení
+ Nahrávání
+ Zamčeno
+ Přihlášení
+ Odhlášení
+ Odhlášení
+ Makro
+ Přesunout
+ Název
+ Nový
+ Následující
+ Ne
+ z
+ OK
+ Otevřít
+ nebo
+ Heslo
+ Cesta
+ Moment, prosím...
+ Předchozí
+ Vlastnosti
+ Email pro obdržení formulářových dat
+ Koš
+ Zbývající
+ Přejmenovat
+ Obnovit
+ Povinné
+ Zopakovat
+ Oprávnění
+ Hledat
+ Server
+ Zobrazit
+ Zobrazit stránku při odeslání
+ Rozměr
+ Seřadit
+ Submit
+
+ Typ
+ Pro hledání pište...
+ Nahoru
+ Aktualizovat
+ Povýšit
+ Nahrání
+ Url
+ Uživatel
+ Uživatelské jméno
+ Hodnota
+ Pohled
+ Vítejte...
+ Šířka
+ Ano
+ Složka
+ Výsledky hledání
+ Reorder
+ I am done reordering
+
+
+ Background color
+ Bold
+ Text color
+ Font
+ Text
+
+
+ Page
+
+
+ Instalátor se nemůže připojit k databázi.
+ Nelze uložit soubor web.config. Modifikujte, prosím, připojovací řetězec manuálně.
+ Vyše databáze byla nalezena a je identifikována jako
+ Nastavení databáze
+ instalovat, abyste nainstalovali Umbraco %0% databázi
+ ]]>
+ následující pro pokračování.]]>
+ Databáze nenalezena! Zkontrolujte, prosím, že informace v "připojovacím řetězci" souboru "web.config" jsou správné.
+ Pro pokračování otevřete, prosím, soubor "web.config" (za pužití Visual Studia nebo Vašeho oblíbeného tedtového editoru), přejděte na jeho konec, přidejte připojovací řetězec pro Vaši databázi v klíčí nazvaném "umbracoDbDSN" a soubor uložte.
+
+ Klikněte na tlačítko zopakovat , až budete hotovi.
+ Další informace o editování souboru web.config zde.
]]>
+
+ Pokud je to nezbytné, kontaktujte vašeho poskytovatele hostingu.
+ Jestliže instalujete na místní počítač nebo server, budete potřebovat informace od Vašeho systémového administrátora.]]>
+
+ Stiskněte tlačítko povýšit pro povýšení Vaší databáze na Umbraco %0%
+
+ Neobávejte se - žádný obsah nebude odstraněn a všechno bude fungovat jak má!
+
+ ]]>
+ Stiskněte Následující pro pokračování. ]]>
+ následující, pro pokračování konfiguračního průvodce]]>
+ Heslo výchozího uživatele musí být změněno!]]>
+ Výchozí uživatel byl deaktivován, nebo nemá přístup k umbracu!Netřeba nic dalšího dělat. Klikněte na Následující pro pokračování.]]>
+ Heslo výchozího uživatele bylo úspěšně změněno od doby instalace!Netřeba nic dalšího dělat. Klikněte na Následující pro pokračování.]]>
+ Heslo je změněno!
+ Mějte skvělý start, sledujte naše uváděcí videa
+ Kliknutím na tlačítko následující (nebo modifikováním umbracoConfigurationStatus v souboru web.config) přijímáte licenci tohoto software tak, jak je uvedena v poli níže. Upozorňujeme, že tato distribuce umbraca se skládá ze dvou různých licencí, open source MIT licence pro framework a umbraco freeware licence, která pokrývá UI.
+ Není nainstalováno.
+ Dotčené soubory a složky
+ Další informace o nastavování oprávnění pro umbraco zde
+ Musíte udělit ASP.NET oprávnění měnit následující soubory/složky
+ Vaše nastavení oprávnění je téměř dokonalé!
+ Můžete provozovat umbraco bez potíží, ale nebudete smět instalovat balíčky, které jsou doporučené pro plné využívání všech možností umbraca.]]>
+ Jak to vyřešit
+ Klikněte zde, chcete-li číst textovou verzi
+ výukové video o nastavovaní oprávnění pro složky umbraca, nebo si přečtěte textovou verzi.]]>
+ Vaše nastavení oprávnění může být problém!
+
+ Můžete provozovat umbraco bez potíží, ale nebudete smět vytvářet složky a instalovat balíčky, které jsou doporučené pro plné využívání všech možností umbraca.]]>
+ Vaše nastavení oprívnění není připraveno pro umbraco!
+
+ Abyste mohli umbraco provozovat, budete muset aktualizovat Vaše nastavení oprávnění.]]>
+ Vaše nastavení oprávnění je dokonalé!
+ Jste připraveni provozovat umbraco a instalovat balíčky!]]>
+ Řešení potíží se složkami
+ Následujte tento odkaz pro další informace o potížích s ASP.NET a vytvářením složek.
+ Nastavování oprávnění pro složky
+
+ Chci začít od nuly
+ zjistěte jak)
+ Stále se můžete později rozhodnout nainstalovat Runway. Za tím účelem navštivte Vývojářskou sekci a zvolte Balíčky.
+ ]]>
+ Právě jste vytvořili čistou platformu Umbraco. Co chcete dělat dále?
+ Runway je nainstalován
+
+ Toto je náš seznam doporučených modulů, vyberte ty, které chcete nainstalovat, nebo si prohlédněte úplný seznam modulů
+ ]]>
+ Doporučeno pouze pro zkušené uživatele
+ Chci začít s jednoduchým webem
+
+ "Runway" je jednoduchý web poskytující některé základní typy dokumentů a šablon. Instalátor pro Vás může Runway nainstalovat automaticky a Vy ho pak můžete jednoduše editovat, rozšířit anebo úplně odstranit. Není nezbytný a můžete bez problému provozovat Umbraco bez něj. Runway nicméně nabízí jednoduché základy založené na nejlepších praktikách tak, abyste mohli začít rychleji, než kdykoliv jindy. Rozhodnete-li se Runway si nainstalovat, můžete si volitelně vybrat základní stavební bloky zvané Moduly Runway a stránky Runway si tak vylepšit.
+
+
+ Runway obsahuje: Úvodní stránku, stránku Začínáme, stránku Instalace modulů.
+ Volitelné moduly: Horní navigace, Mapa webu, Kontakt, Galerie.
+
+ ]]>
+ Co je Runway
+ Krok 1/5: Přijetí licence
+ Krok 2/5: Konfigurace databáze
+ Krok 3/5: Ověřování oprávnění k souborům
+ Krok 4/5: Kontrola zabezpečení umbraca
+ Krok 5/5: Umbraco je připraveno a můžete začít
+ Děkujeme, že jeste si vybrali umbraco
+ Prohlédněte si svůj nový web
+ Nainstalovali jste Runway, tak proč se nepodívat, jak Váš nový web vypadá.]]>
+ Další pomoc a informace
+ Abyste získali pomoc od naší oceňované komunity, projděte si dokumentaci, nebo si pusťte některá videa zdarma o tom, jak vytvořit jednoduchý web, jak používat balíčky a rychlý úvod do terminologie umbraca]]>
+ Umbraco %0% je nainstalováno a připraveno k použití
+ soubor /web.config a upravit klíč AppSetting umbracoConfigurationStatus dole na hodnotu '%0%' .]]>
+ ihned začít kliknutím na tlačítko "Spustit Umbraco" níže. Jestliže je pro Vás umbraco nové ,
+ spoustu zdrojů naleznete na naších stránkách "začínáme".]]>
+ Spustit Umbraco
+ Chcete-li spravovat Váš web, jednoduše přejděte do administrace umbraca a začněte přidávat obsah, upravovat šablony a stylopisy, nebo přidávat nové funkce]]>
+ Připojení k databázi selhalo.
+ Umbraco verze 3
+ Umbraco verze 4
+ Shlédnout
+ umbraca %0% jako čisté instalace nebo povýšením z 3.0.
+
+ Stiskněte "následující" pro spuštění průvodce.]]>
+
+
+ Kód kultury
+ Název kultury
+
+
+ Byli jste nečinní a odhlášení proběhne automaticky za
+ Obnovte nyní pro uložení práce
+
+
+ Šťastnou super neděli
+ Šťastné šílené pondělí
+ Šťastné husté úterý
+ Šťastnou překrásnou středu
+ Šťastný bouřlivý čtvrtek
+ Šťastný bláznivý pátek
+ Šťastnou kočkobotu
+ přihlašte se níže
+ Relace vypršela
+ © 2001 - %0% umbraco.org ]]>
+
+
+ Ovládací panel
+ Sekce
+ Obsah
+
+
+ Vyberte stránku výše...
+ %0% byl zkopírován do %1%
+ Níže vyberte, kam má být dokument %0% zkopírován
+ %0% byl přesunut do %1%
+ Níže vyberte, kam má být dokument %0% přesunut
+ byl vybrán jako kořen Vašeho nového obsahu, klikněte na 'ok' níže.
+ Ještě nebyl vybrán uzel, vyberte, prosím, uzel ze seznamu výše, než stisknete 'ok'
+ Aktuální uzel není povolen pod vybraným uzlem kvůli jeho typu
+ Aktuální uzel nemůže být přesunut do jedné ze svých podstránek
+ Aktuální uzel nemůže být v kořeni
+ Operace není povolena, protože máte nedostatečná práva pro 1 nebo více podřizených dokumentů.
+ Vztáhněte kopírované položky k originálu
+
+
+ Upravte vaše oznámení pro %0%
+
+ Hi %0%
+
+ Toto je automatická zpráva informující Vás, že úloha '%1%'
+ byla provedena na stránce '%2%'
+ uživatelem '%3%'
+
+
+
+
Shrnutí změn:
+
+
+
+
+
+ Mějte hezký den!
+ Zdraví umbraco robot
+
]]>
+ [%0%] Upozornění o %1% na %2%
+ Upozornění
+
+
+
+ a výběrem balíčku. Balíčky umbraco mají obvykle přípony ".umb" nebo ".zip".
+ ]]>
+ Autor
+ Dokumentace
+ Meta data balíčku
+ Název balíčku
+ Balíček neobsahuje žádné položky
+
+ Můžete jej ze systému bezpečně odstranit kliknutím na "odebrat balíček" níže.]]>
+ Možnosti balíčku
+ Čti mě balíčku
+ Úložiště balíčku
+ Potvrdit odinstalování
+ Balíček byl odinstalován
+ Balíček byl úspěšně odinstalován
+ Odinstalovat balíček
+
+ Upozornění: všechny dokumenty, media atd. závislé na položkách, které odstraníte, přestanou pracovat a mohou vést k nestabilitě systému,
+ takže odinstalovávejte opatrně. Jste-li na pochybách, kontaktujte autora balíčku.]]>
+ Verze balíčku
+
+
+ Vložit s úplným formatováním (nedoporučeno)
+ Text, který chcete vložit, obsahuje speciální znaky nebo formatování. Toto může být způsobeno kopirováním textu z Microsoft Wordu. Umbraco může odstranit speciální znaky nebo formatování, takže vložený obsah bude pro web vhodnější.
+ Vložit jako čistý text bez jakéhokoliv formátování
+ Vložit, ale odstranit formátování (doporučeno)
+
+
+ Ochrana prostřednictvím rolí
+ použijte členské skupiny umbraca.]]>
+ Musíte vytvořit členskou skupinu před tím, než můžete použít autentizaci prostřednictvím rolí
+ Chybová stránka
+ Použita, když jsou lidé přihlášení, ale nemají přístup
+ Vyberte, jak omezit přístup k této stránce
+ %0% je nyní chráněna
+ Ochrana odebrána z %0%
+ Přihlašovací stránka
+ Vyberte stránku, která obsahuje přihlašovací formulář
+ Odstranit ochranu
+ Vyberte stránky, které obsahují přihlašovací formulář a chybová hlášení
+ Vyberte role, které mají přístup k této stránce
+ Nastavte přihlašovací jmého a heslo pro tuto stránku
+ Jednouživatelská ochrana
+ Jestliže chcete nastavit jenom jednoduchou ochranu prostřednictvím uživatelského jména a hesla
+
+
+
+
+
+
+ Zahrnout nepublikované podřízené stránky
+ Probíhá publikování - počkejte, prosím...
+ %0% ze %1% stránek bylo publikováno...
+ %0% byla publikována
+ %0% a podstránky byly publikovány
+ Publikovat %0% a všechny její podstránky
+ ok pro publikování %0% a tedy zveřejnění jejího obsahu.
+ Můžete publikovat tuto stránku a všechny její podstránky zatrhnutím publikovat všchny podstránky níže.
+ ]]>
+
+
+ Nenakonfigurovali jste žádné schválené barvy
+
+
+ Přidat vnější odkaz
+ Přidat vnitřní odkaz
+ Přidat
+ Nadpis
+ Vnitřní stránka
+ URL
+ Posunout dolů
+ Posunout nahoru
+ Otevřít v novém okně
+ Odebrat odkaz
+
+
+ Současná verze
+ Červený text nebude ve vybrané verzi zobrazen, zelený znamená přidaný ].]]>
+ Dokument byl vrácen na starší verzi
+ Tohle zobrazuje vybranou verzi jako html, jestliže chcete vidět rozdíly mezi 2 verzemi najednou, použijte rozdílové zobrazení
+ Vrátit starší verzi
+ Vybrat verzi
+ Zobrazení
+
+
+ Editovat skriptovací soubor
+
+
+ Domovník
+ Obsah
+ Kurýr
+ Vývojář
+ Průvodce nastavením Umbraca
+ Media
+ Členové
+ Zpravodaje
+ Nastavení
+ Statistiky
+ Překlad
+ Uživatelé
+ Nápověda
+
+
+ Výchozí šablona
+ Pro importování typu dokumentu vyhledejte soubor ".udt" ve svém počítači tak, že kliknete na tlačítko "Prohledat" a pak kliknete na "Import" (na následující obrazovce budete vyzváni k potvrzení)
+ Název nové záložky
+ Typ uzlu
+ Typ
+ Stylopis
+ Skript
+ Záložka
+ Název záložky
+ Záložky
+ Nadřazený typ obsahu povolen
+ Tento typ obsahu používá
+ jako nadřazený typ obsahu. Záložky z nadřazených typů obsahu nejsou zobrazeny a mohou byt editovány pouze na nadřazených typech obsahu samotných
+ Na této záložce nejsou definovány žádné vlastnosti. Pro vytvoření nové vlastnosti klikněte na odkaz "přidat novou vlastnost" nahoře.
+
+
+ Sort order
+ Creation date
+ Třídění bylo ukončeno.
+ Abyste nastavili, jak mají být položky seřazeny, přetáhněte jednotlivé z nich nahoru či dolů. Anebo klikněte na hlavičku sloupce pro setřídění celé kolekce
+
+
+
+ Publikování bylo zrušeno doplňkem třetí strany
+ Typ vlastnosti už existuje
+ Typ vlastnosti vytvořen
+ Datový typ: %1%]]>
+ Typ vlastnosti odstraněn
+ Typ vlastnosti uložen
+ Záložka vytvořena
+ Záložka odstraněna
+ Záložka s id: %0% odstraněna
+ Stylopis nebyl uložen
+ Stylopis byl uložen
+ Stylopis byl uložen bez chyb
+ Datový typ byl uložen
+ Položka slovníku byla uložena
+ Publikování se nezdařilo, protože nadřazená stránka není publikována
+ Obsah byl publikován
+ a je viditelný na webu
+ Obsah byl uložen
+ Nezapomeňte na publikování, aby se změny projevily
+ Odeslat ke schválení
+ Změny byly odeslány ke schválení
+ Medium bylo uloženo
+ Medium bylo uloženo bez chyb
+ Člen byl uložen
+ Vlastnost stylopisu byla uložena
+ Stylopis byl uložen
+ Šablona byla uložena
+ Chyba při ukládání uživatele (zkontrolujte log)
+ Uživatel byl uložen
+ Typ uživatele byl uložen
+ Soubor nebyl uložen
+ soubor nemohl být uložen. Zkontrolujte, prosím, oprávnění k souboru
+ Soubor byl uložen
+ Soubor byl uložen bez chyb
+ Jazyk byl uložen
+ Šablona nebyla uložena
+ Ujistěte se, prosím, že nemáte 2 šablony se stejným aliasem
+ Šablona byla uložena
+ Šablona byla uložena bez chyb!
+ Publikování obsahu bylo zrušeno
+ Částečný pohled byl uložen
+ Částečný pohled byl uložen bez chyb!
+ Částečný pohled nebyl uložen
+ Při ukládání souboru došlo k chybě.
+
+
+ Používá CSS syntaxi např.: h1, .redHeader, .blueTex
+ Editovat stylopis
+ Editovat vlastnost stylopisu
+ Název, který identifikuje vlastnost stylu v editoru formátovaného textu
+ Náhled
+ Styly
+
+
+ Editovat šablonu
+ Vložit obsahovou oblast
+ Vložit zástupce obsahové oblasti
+ Vložit položku slovníku
+ Vložit makro
+ Vložit pole stránky umbraco
+ Nadřazená šablona
+ Rychlá příručka k šablonovým značkám umbraca
+ Šablona
+
+
+ Image
+ Macro
+ Choose type of content
+ Choose a layout
+ Add a row
+ Add content
+ Drop content
+ Settings applied
+ This content is not allowed here
+ This content is allowed here
+ Click to embed
+ Click to insert image
+ Image caption...
+ Write here...
+ Grid Layouts
+ Layouts are the overall work area for the grid editor, usually you only need one or two different layouts
+ Add Grid Layout
+ Adjust the layout by setting column widths and adding additional sections
+ Row configurations
+ Rows are predefined cells arranged horizontally
+ Add row configuration
+ Adjust the row by setting cell widths and adding additional cells
+ Columns
+ Total combined number of columns in the grid layout
+ Settings
+ Configure what settings editors can change
+ Styles
+ Configure what styling editors can change
+ Allow all editors
+ Allow all row configurations
+
+
+ Alternativní pole
+ Alternativní text
+ Velká a malá písmena
+ Kódování
+ Vybrat pole
+ Konvertovat
+ Nahrazuje nové řádky html tagem <br>
+ Vlastní pole
+ Ano, pouze datum
+ Formátovat jako datum
+ HTML kódování
+ Nahradí speciální znaky jejich HTML ekvivalentem.
+ Bude vloženo za hodnotou pole
+ Bude vloženo před hodnotou pole
+ Malá písmena
+ Nic
+ Vložit za polem
+ Vložit před polem
+ Rekurzivní
+ Standardní pole
+ Velká písmena
+ Kódování URL
+ Formátuje speciální znaky v URL adresách
+ Bude použito pouze pokud jsou pole nahoře prázdná
+ Toto pole bude použito pouze pokud je primární pole prázdné
+ Ano, s časem. Oddělovač:
+
+
+ Podrobnosti překladu
+ Stáhnout xml DTD
+ Pole
+ Zahrnout podstránky
+
+ Žádní uživatelé překladatelé nebyli nalezeni. Vytvořte, prosím, překladatele před tím, než začnete posílat obsah k překladu
+ Stránka '%0%' byla poslána k překladu
+ Poslat stránku '%0%' k překladu
+ Slov celkem
+ Přeložit do
+ Překlad hotov.
+ Klikutím níže můžete vidět stránky, které jste právě přeložili. Jestliže je nalezena originální stránka, dostanete srovnání 2 stránek.
+ Překlad selhal, xml soubor může být poškozený
+ Možnosti překladu
+ Překladatel
+ Nahrát xml překladu
+
+
+ Prohlížeč mezipaměti
+ Koš
+ Vytvořené balíčky
+ Datové typy
+ Slovník
+ Instalované balíčky
+ Instalovat téma
+ Instalovat startovní sadu
+ Jazyky
+ Instalovat místní balíček
+ Makra
+ Typy medií
+ Členové
+ Skupiny členů
+ Role
+ Typy členů
+ Typy dokumentů
+ Balíčky
+ Balíčky
+ Instalovat z úložiště
+ Instalovat Runway
+ Moduly Runway
+ Skriptovací soubory
+ Skripty
+ Stylopisy
+ Šablony
+ Oprávnění Uživatele
+ Typy Uživatelů
+ Uživatelé
+
+
+ Nová aktualizace je připrvena
+ %0% je připraven, klikněte zde pro stažení
+ Žádné spojení se serverem
+ Chyba při kontrole aktualizace. Zkontrolujte, prosím, trasovací zásobník pro další informace
+
+
+ Administrátor
+ Pole kategorie
+ Změnit heslo
+ Změnit heslo
+ Potvrdit heslo
+ Můžete změnit své heslo pro přístup do administrace Umbraca vyplněním formuláře níže a kliknutím na tlačítko 'Změnit Heslo'
+ Kanál obsahu
+ Popis
+ Deaktivovat uživatele
+ Typ dokumentu
+ Editor
+ Výtah
+ Jazyk
+ Přihlašovací jméno
+ Úvodní uzel v knihovně medií
+ Sekce
+ Deaktivovat přistup k Umbracu
+ Heslo
+ Resetovat heslo
+ Vyše heslo bylo změněno!
+ Potvrďte, prosím, nové heslo
+ Zadejte Vaše nové heslo
+ Vaše nové heslo nesmí být prázdné!
+ Současné heslo
+ Neplatné současné heslo
+ Nové heslo a potvrzující heslo se liší. Zkuste to, prosím, znovu!
+ Potvrzující heslo není stejné jako nové heslo!
+ Nahradit oprávnění podřízených uzlů
+ Nyní měníte oprávnění pro stránky:
+ Vyberte stránky, pro které chcete měnit oprávnění
+ Prohledat všechny podřízené uzly
+ Úvodní uzel v obsahu
+ Uživatelské jméno
+ Oprávnění uživatele
+ Spisovatel
+ Váš profil
+ Vaše nedávná historie
+ Relace vyprší za
+
+
diff --git a/UmbracoPackages/Umbraco/Config/Lang/da.xml b/UmbracoPackages/Umbraco/Config/Lang/da.xml
new file mode 100644
index 0000000..1869d4f
--- /dev/null
+++ b/UmbracoPackages/Umbraco/Config/Lang/da.xml
@@ -0,0 +1,1613 @@
+
+
+
+ The Umbraco community
+ https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
+
+
+ Tilføj domæne
+ Revisionsspor
+ Gennemse elementer
+ Skift dokumenttype
+ Kopier
+ Opret
+ Opret pakke
+ Opret gruppe
+ Slet
+ Deaktivér
+ Tøm papirkurv
+ Aktivér
+ Eksportér dokumenttype
+ Importér dokumenttype
+ Importér pakke
+ Redigér i Canvas
+ Log af
+ Flyt
+ Notificeringer
+ Offentlig adgang
+ Udgiv
+ Afpublicér
+ Genindlæs elementer
+ Genudgiv hele sitet
+ Omdøb
+ Gendan
+ Sæt rettigheder for siden %0%
+ Vælg hvor du vil kopiere
+ Vælg hvortil du vil flytte
+ til i træstrukturen nedenfor
+ blev flyttet til
+ blev kopieret til
+ Rettigheder
+ Fortryd ændringer
+ Send til udgivelse
+ Send til oversættelse
+ Sæt gruppe
+ Sortér
+ Send til udgivelse
+ Oversæt
+ Opdatér
+ Sæt rettigheder
+ Lås op
+ Opret indholdsskabelon
+ Standard værdi
+
+
+ Indhold
+ Administration
+ Struktur
+ Andet
+
+
+ Tillad adgang til at tildele sprog og domæner
+ Tillad adgang for at få vist en nodes historik
+ Tillad adgang for at få vist en node
+ Tillad adgang til at ændre dokumenttype for en node
+ Tillad adgang til at kopiere en node
+ Tillad adgang til at oprette noder
+ Tillad adgang til at slette noder
+ Tillad adgang til at flytte en node
+ Tillad adgang til at indstille og ændre offentlig adgang til en node
+ Tillad adgang til at udgive en node
+ Tillad adgang til at ændre rettigheder for en node
+ Tillad adgang til at returnere en node til en tidligere tilstand
+ Tillad adgang til at sende en node til godkendelse før den udgives
+ Tillad adgang til at sende en node til oversættelse
+ Tillad adgang til at ændre sorteringsrækkefølge for noder
+ Tillad adgang til at oversætte en node
+ Tillad adgang til at gemme en node
+ Tillad adgang til at oprette en indholdsskabelon
+
+
+ Indhold
+ Info
+
+
+ Tilladelse nægtet.
+ Tilføj nyt domæne
+ fjern
+ Ugyldig node.
+ Et eller flere domæner har et ugyldigt format.
+ Domæne er allerede blevet tildelt.
+ Sprog
+ Domæne
+ Domænet '%0%' er nu oprettet og tilknyttet siden
+ Domænet '%0%' er nu slettet
+ Domænet '%0%' er oprettet
+ Domænet '%0%' er nu opdateret
+ eller rediger nuværende domæner
+
+ Nedarv
+ Sprog
+ eller nedarv sprog fra forældre noder. Gælder også
+ for den aktuelle node, medmindre et domæne nedenfor også indstiller et sprog.]]>
+ Domæner
+
+
+ Ryd valg
+ Vælg
+ Gør noget andet
+ Fed
+ Fortryd indryk afsnit
+ Indsæt formularfelt
+ Indsæt grafisk overskrift
+ Redigér Html
+ Indryk afsnit
+ Kursiv
+ Centrér
+ Venstrestil afsnit
+ Højrestil afsnit
+ Indsæt link
+ Indsæt lokalt link (anker)
+ Punktopstilling
+ Nummerorden
+ Indsæt makro
+ Indsæt billede
+ Udgiv og luk
+ Udgiv med undersider
+ Redigér relationer
+ Tilbage til listen
+ Gem
+ Gem og luk
+ Gem og udgiv
+ Gem og planlæg
+ Gem og send til udgivelse
+ Gem listevisning
+ Planlæg
+ Forhåndsvisning
+ Forhåndsvisning er deaktiveret fordi der ikke er nogen skabelon tildelt
+ Vælg formattering
+ Vis koder
+ Indsæt tabel
+ Gem og generer modeller
+ Fortryd
+ Genskab
+ Slet tag
+ Fortryd
+ Bekræft
+
+
+ For
+ Brugeren har slettet indholdet
+ Brugeren har afpubliceret indholdet
+ Brugeren har gemt og udgivet indholdet
+ Brugeren har gemt og udgivet indholdet for sprogene: %0%
+ Brugeren har gemt indholdet
+ Brugeren har flyttet indholdet
+ Brugeren har kopieret indholdet
+ Brugeren har tilbagerullet indholdet til en tidligere tilstand
+ Brugeren har sendt indholdet til udgivelse
+ Brugeren har sendt indholdet til oversættelse
+ Brugeren har sorteret de underliggende sider
+ Kopieret
+ Udgivet
+ Flyttet
+ Gemt
+ Slettet
+ Afpubliceret
+ Indhold tilbagerullet
+ Sendt til udgivelse
+ Sendt til oversættelse
+ Sorteret
+ Historik (alle sprog)
+
+
+ For at skifte det valgte indholds dokumenttype, skal du først vælge en ny dokumenttype, som er gyldig på denne placering.
+ Kontroller derefter, at alle egenskaber bliver overført rigtigt til den nye dokumenttype, og klik derefter på Gem.
+ Indholdet er blevet genudgivet.
+ Nuværende egenskab
+ Nuværende type
+ Du kan ikke skifte dokumenttype, da der ikke er andre gyldige dokumenttyper på denne placering.
+ Dokumenttype skiftet
+ Overfør egenskaber
+ Overfør til egenskab
+ Ny skabelon
+ Ny type
+ ingen
+ Indhold
+ Vælg ny dokumenttype
+ Dokumenttypen på detvalgte indhold blev skiftet til [new type], og følgende egenskaber blev overført:
+ til
+ Overførsel af egenskaber kunne ikke fuldføres, da en eller flere egenskaber er indstillet til at blive overført mere end én gang.
+ Kun andre dokumenttyper, der er gyldige på denne placering, vises.
+
+
+ Oprettelse af mappen under parent med ID %0% fejlede
+ Oprettelse af mappen under parent med navnet %0% fejlede
+ Mappens navn må ikke indeholde ugyldige tegn.
+ Sletning af filen/mappen fejlede: %0%
+
+
+ Udgivet
+ Om siden
+ Alias
+ (hvordan ville du f.eks. beskrive billedet via telefonen?)
+ Alternative links
+ Klik for at redigere dette punkt
+ Oprettet af
+ Oprindelig forfatter
+ Opdateret af
+ Oprettet den
+ Tidspunkt for oprettelse
+ Dokumenttype
+ Redigerer
+ Nedtagningsdato
+ Dette punkt er ændret siden udgivelsen
+ Dette punkt er endnu ikke udgivet
+ Sidst udgivet
+ Der er ingen elementer at vise
+ Der er ingen elementer at vise på listen.
+ Intet indhold er blevet tilføjet
+ Ingen medlemmer er blevet tilføjet
+ Medietype
+ Link til medie(r)
+ Medlemsgruppe
+ Rolle
+ Medlemstype
+ Der er endnu ikke lavet nogle ændringer.
+ Ingen dato valgt
+ Sidetitel
+ Egenskaber
+ Dette dokument er udgivet, men ikke synligt da den overliggende side '%0%' ikke er udgivet!
+ Ups: dette dokument er udgivet, men er ikke i cachen (intern fejl)
+ Kunne ikke hente url'en
+ Dette dokument er udgivet, men dets url ville kollidere med indholdet %0%
+ Udgiv
+ Udgivet
+ Udgivet (Ventede ændringer)
+ Udgivelsesstatus
+ Udgiv med undersider for at udgive %0% og alle sider under og dermed gøre deres indhold offentligt tilgængelige.]]>
+ Udgiv med undersider for at udgive de valgte sprog og de samme sprog for sider under og dermed gøre deres indhold offentligt tilgængelige.]]>
+ Udgivelsesdato
+ Afpubliceringsdato
+ Fjern dato
+ Vælg dato
+ Sorteringsrækkefølgen er opdateret
+ For at sortere, træk siderne eller klik på en af kolonnehovederne. Du kan vælge flere sider ved at holde "shift" eller "control" nede mens du vælger.
+ Statistik
+ Titel (valgfri)
+ Alternativ tekst (valgfri)
+ Type
+ Afpublicér
+ Afpubliceret
+ Ikke oprettet
+ Sidst redigeret
+ Tidspunkt for seneste redigering
+ Fjern fil
+ Link til dokument
+ Medlem af grupper(ne)
+ Ikke medlem af grupper(ne)
+ Undersider
+ Åben i vindue
+ Dette oversætter til den følgende tid på serveren:
+ Hvad betyder det?]]>
+ Er du sikker på, at du vil slette dette element?
+ Egenskaben %0% anvender editoren %1% som ikke er understøttet af Nested Content.
+ Der er ikke konfigureret nogen indholdstyper for denne egenskab.
+ Tilføj en ny tekstboks
+ Fjern denne tekstboks
+ Indholdsrod
+ Medtag udkast: udgiv også ikke-publicerede sider.
+ Denne værdi er skjult.Hvis du har brug for adgang til at se denne værdi, bedes du kontakte din web-administrator.
+ Denne værdi er skjult.
+ Hvilke sprog vil du gerne udgive? Alle sprog med indhold gemmes!
+ Hvilke sprog vil du gerne udgive?
+ Hvilke sprog vil du gerne gemme?
+ Hvilke sprog vil du gerne gemme?
+ Hvilke sprog vil du gerne sende til godkendelse?
+ Hvilke sprog vil du gerne planlægge?
+ Vælg sproget du vil afpublicere. Afpublicering af et obligatorisk sprog vil afpublicere alle sprog.
+ Udgivne sprog
+ Ikke-udgivne sprog
+ Uændrede sprog
+ Disse sprog er ikke blevet oprettet
+ Klar til at udgive?
+ Klar til at gemme?
+ Send til godkendelse
+ Vælg dato og klokkeslæt for at udgive og/eller afpublicere indholdet.
+ Opret ny
+ Indsæt fra udklipsmappen
+
+
+ Opret en ny indholdsskabelon fra '%0%'
+ Blank
+ Vælg en indholdsskabelon
+ Indholdsskabelon oprettet
+ En indholdsskabelon blev oprettet fra '%0%'
+ En anden indholdsskabelon med samme navn eksisterer allerede
+ En indholdskabelon er foruddefineret indhold, som en redaktør kan vælge at bruge som grundlag for at oprette nyt indhold
+
+
+ Klik for at uploade
+ eller klik her for at vælge filer
+ Du kan trække filer herind for at uploade.
+ Kan ikke uploade denne fil, den har ikke en godkendt filtype
+ Maks filstørrelse er
+ Medie rod
+ Flytning af mediet fejlede
+ Kopiering af mediet fejlede
+ Oprettelse af mappen under parent med id %0% fejlede
+ Omdøbning af mappen med id %0% fejlede
+
+
+ Opret et nyt medlem
+ Alle medlemmer
+ Medlemgrupper har ingen yderligere egenskaber til redigering.
+
+
+ Hvor ønsker du at oprette den nye %0%
+ Opret under
+ Vælg den dokumenttype, du vil oprette en indholdsskabelon til
+ Angiv et navn for mappen
+ Vælg en type og skriv en titel
+ "dokument typer".]]>
+ "media typer".]]>
+ Dokumenttype uden skabelon
+ Ny mappe
+ Ny datatype
+ Ny JavaScript-fil
+ Ny tom partial view
+ Ny partial view makro
+ Ny partial view fra snippet
+ Ny partial view makro fra snippet
+ Ny partial view makro (uden makro)
+ Ny stylesheet-fil
+ Ny Rich Text Editor stylesheet-fil
+
+
+ Til dit website
+ - Skjul
+ Hvis Umbraco ikke starter, kan det skyldes at din browser ikke tillader pop-up vinduer
+ er åbnet i nyt vindue
+ Genstart
+ Besøg
+ Velkommen
+
+
+ Bliv
+ Kassér ændringer
+ Du har ikke-gemte ændringer
+ Er du sikker på du vil navigere væk fra denne side? - du har ikke-gemte ændringer
+ Afpublicering vil fjerne denne side og alle dets undersider fra websitet.
+ Du har ikke-gemte ændringer. Hvis du ændrer dokumenttype, kasseres ændringerne.
+
+
+ Færdig
+ Slettede %0% element
+ Slettede %0% elementer
+ Slettede %0% ud af %1% element
+ Slettede %0% ud af %1% elementer
+ Udgav %0% element
+ Udgav %0% elementer
+ Udgav %0% ud af %1% element
+ Udgav %0% ud af %1% elementer
+ Fjernede %0% element fra udgivelse
+ Fjernede %0% elementer fra udgivelse
+ Fjernede %0% ud af %1% element fra udgivelse
+ Fjernede %0% ud af %1% elementer fra udgivelse
+ Flyttede %0% element
+ Flyttede %0% elementer
+ Flyttede %0% ud af %1% element
+ Flyttede %0% ud af %1% elementer
+ Kopierede %0% element
+ Kopierede %0% elementer
+ Kopierede %0% ud af %1% element
+ Kopierede %0% ud af %1% elementer
+
+
+ Link titel
+ Link
+ Navn på lokalt link
+ Rediger domæner
+ Luk denne dialog
+ Er du sikker på at du vil slette
+ Er du sikker på du vil deaktivere
+ Er du sikker på at du vil forlade Umbraco?
+ Er du sikker?
+ Klip
+ Rediger ordbogsnøgle
+ Rediger sprog
+ Indsæt lokalt link
+ Indsæt tegn
+ Indsæt grafisk overskrift
+ Indsæt billede
+ Indsæt link
+ Indsæt makro
+ Indsæt tabel
+ Dette vil slette sproget
+ Sidst redigeret
+ Link
+ Internt link:
+ Ved lokalt link, indsæt da en "#" foran linket
+ Åben i nyt vindue?
+ Makroindstillinger
+ Denne makro har ingen egenskaber du kan redigere
+ Indsæt tekst
+ Rediger rettigheder for
+ Sæt rettigheder for
+ Sæt rettigheder for %0% for brugergruppe %1%
+ Vælg de brugergrupper, du vil angive tilladelser til
+ Elementerne i papirkurven slettes. Luk venligst ikke dette vindue mens sletningen foregår
+ Papirkurven er nu tom
+ Når elementer slettes fra papirkurven, slettes de for altid
+ regexlib.com's webservice oplever i øjeblikket problemer, vi ikke har kontrol over. Beklager ulejligheden. ]]>
+ Søg efter et regulært udtryk for at tilføje validering til et formularfelt. Eksempel: 'e-mail', 'postnr.', 'url'
+ Fjern makro
+ Obligatorisk
+ Sitet er genindekseret
+ Sitet er nu genudgivet
+ Websitets cache vil blive genopfrisket. Alt udgivet indhold vil blive opdateret, mens upubliceret indhold vil forblive upubliceret.
+ Antal kolonner
+ Antal rækker
+ Klik på billedet for at se den fulde størrelse
+ Vælg
+ Se cache element
+ Relatér til original
+ Inkludér undersider
+ Link til side
+ Åben linket i et nyt vindue eller fane
+ Link til medie
+ Vælg indhold startnode
+ Vælg medie
+ Vælg ikon
+ Vælg item
+ Vælg link
+ Vælg makro
+ Vælg indhold
+ Vælg indholdstype
+ Vælg medie startnode
+ Vælg medlem
+ Vælg medlemsgruppe
+ Vælg node
+ Vælg sektioner
+ Vælg brugere
+ Ingen ikoner blev fundet
+ Der er ingen parametre for denne makro
+ Der er ikke tilføjet nogen makroer
+ Link dit
+ Fjern link fra dit
+ konto
+ Vælg editor
+ Vælg snippet
+ Dette vil slette noden og alle dets sprog. Hvis du kun vil slette et sprog, så afpublicér det i stedet.
+
+
+ Der er ingen ordbogselementer.
+
+
+ Du tilføjer flere sprog under 'sprog' i menuen til venstre
+ ]]>
+ Kulturnavn
+
+ Ordbogsoversigt
+
+
+ Konfigurerede søgere
+ Viser egenskaber og værktøjer til enhver konfigureret søger (dvs. som en multi-indekssøger)
+ Feltværdier
+ Sundhedstilstand
+ Indeksets sundhedstilstand, og hvis det kan læses
+ Indeksører
+ Indeksinfo
+ Viser indeksets egenskaber
+ Administrer Examine indekserne
+ Giver dig mulighed for at se detaljerne for hvert indeks og giver nogle værktøjer til styring af indeksørerne
+ Genopbyg indeks
+
+ Afhængigt af hvor meget indhold der er på dit website, kan det tage et stykke tid.
+ Det anbefales ikke at genopbygge et indeks i perioder med høj websitetrafik eller når redaktører redigerer indhold.
+ ]]>
+
+ Søgere
+ Søg i indekset og se resultaterne
+ Værktøjer
+ Værktøjer til at administrere indekset
+
+
+ Indtast dit brugernavn
+ Indtast dit kodeord
+ Bekræft dit kodeord
+ Navngiv %0%...
+ Indtast navn...
+ Indtast en e-mail...
+ Indtast et brugernavn...
+ Label...
+ Indtast beskrivelse
+ Søg...
+ Filtrer...
+ Indtast nøgleord (tryk på Enter efter hvert nøgleord)...
+ Indtast din e-mail
+ Indtast en besked...
+ Dit brugernavn er typisk din e-mailadresse
+ Indtast alias...
+ Genererer alias...
+
+
+ Opret brugerdefineret listevisning
+ Fjern brugerdefineret listevisning
+
+
+ Omdøbt
+ Indtast et ny mappenavn her
+ %0% was renamed to %1%
+
+
+ Tilføj førværdi
+ Database-datatype
+ Data Editor GUID
+ Visningskontrol
+ Knapper
+ Aktiver avancerede indstillinger for
+ Aktiver kontekstmenu
+ Maks. std. størrelse på indsatte billeder
+ Relaterede stylesheets
+ Vis label
+ Bredde og højde
+ All property types & property data
+ using this data type will be deleted permanently, please confirm you want to delete these as well
+ Ja, slet
+ and all property types & property data using this data type
+ Vælg den mappe, der skal flyttes
+ til i træstrukturen nedenfor
+ blev flyttet under
+
+
+ Dine data er blevet gemt, men før du kan udgive denne side er der nogle fejl der skal rettes:
+ Den nuværende membership-provider understøtter ikke skift af kodeord (EnablePasswordRetrieval skal være true)
+ %0% der findes allerede
+ Der var fejl i dokumentet:
+ Der var fejl i formularen:
+ Kodeordet skal være på minimum %0% tegn og indeholde mindst %1% alfanumeriske karakterer
+ %0% skal være et heltal
+ %0% under %1% er et obligatorisk felt og skal udfyldes
+ %0% er et obligatorisk felt og skal udfyldes
+ %0% under %1% er ikke i et korrekt format
+ %0% er ikke i et korrekt format
+
+
+ Der skete en fejl på severen
+ Denne filttype er blevet deaktiveret af administratoren
+ OBS! Selvom CodeMirror er slået til i konfigurationen, så er den deaktiveret i Internet Explorer fordi den ikke er stabil nok.
+ Du skal udfylde både Alias & Navn på den nye egenskabstype!
+ Der mangler læse/skrive rettigheder til bestemte filer og mapper
+ Skriv venligst en titel
+ Du skal vælge en type
+ Du er ved at gøre billedet større end originalen. Det vil forringe kvaliteten af billedet. Ønsker du at fortsætte?
+ Startnode er slettet, kontakt systemadministrator
+ Du skal markere noget indhold, før du kan ændre stylen
+ Der er ingen aktive styles eller formatteringer på denne side
+ Du skal stå til venstre for de 2 celler du ønsker at samle!
+ Du kan ikke opdele en celle, som ikke allerede er delt.
+
+
+ Om
+ Handling
+ Muligheder
+ Tilføj
+ Alias
+ Er du sikker?
+ Tilbage
+ Tilbage til oversigt
+ Kant
+ af
+ Fortryd
+ Celle margen
+ Vælg
+ Luk
+ Luk vindue
+ Kommentar
+ Bekræft
+ Behold proportioner
+ Indhold
+ Fortsæt
+ Kopiér
+ Opret
+ Database
+ Dato
+ Standard
+ Slet
+ Slettet
+ Sletter...
+ Design
+ Dimensioner
+ Ned
+ Hent
+ Rediger
+ Redigeret
+ Elementer
+ E-mail
+ Fejl
+ Felt
+ Find
+ Første
+ Generelt
+ Grupper
+ Gruppe
+ Højde
+ Hjælp
+ Skjul
+ Historik
+ Ikon
+ Id
+ Importer
+ Inkludér undermapper i søgning
+ Indre margen
+ Indsæt
+ Installér
+ Ugyldig
+ Justering
+ Sprog
+ Sidste
+ Layout
+ Henter
+ Låst
+ Log ind
+ Log af
+ Log ud
+ Makro
+ Påkrævet
+ Besked
+ Flyt
+ Navn
+ Ny
+ Næste
+ Nej
+ af
+ OK
+ Åben
+ eller
+ Sortér efter
+ Kodeord
+ Sti
+ Et øjeblik...
+ Forrige
+ Egenskaber
+ Genopbyg
+ E-mail der skal modtage indhold af formular
+ Papirkurv
+ Din papirkurv er tom
+ Genindlæs
+ Mangler
+ Fjern
+ Omdøb
+ Forny
+ Påkrævet
+ Hent
+ Prøv igen
+ Rettigheder
+ Planlagt publicering
+ Søg
+ Beklager, vi kan ikke finde det, du leder efter.
+ Ingen elementer er blevet tilføjet
+ Server
+ Indstillinger
+ Vis
+ Hvilken side skal vises efter at formularen er sendt
+ Størrelse
+ Sortér
+ Status
+ Indsend
+ Type
+ Skriv for at søge...
+ Op
+ Opdatér
+ Opdatér
+ Upload
+ Url
+ Bruger
+ Brugernavn
+ Værdi
+ Vis
+ Velkommen...
+ Bredde
+ Ja
+ Mappe
+ Søgeresultater
+ Sorter
+ Afslut sortering
+ Eksempel
+ Skift kodeord
+ til
+ Listevisning
+ Gemmer...
+ nuværende
+ Indlejring
+ valgt
+
+
+ Blå
+
+
+ Tilføj fane
+ Tilføj egenskab
+ Tilføj editor
+ Tilføj skabelon
+ Tilføj child node
+ Tilføj child
+ Rediger datatype
+ Naviger sektioner
+ Genveje
+ Vis genveje
+ Brug listevisning
+ Tillad på rodniveau
+ Comment/Uncomment lines
+ Remove line
+ Copy Lines Up
+ Copy Lines Down
+ Move Lines Up
+ Move Lines Down
+ Generelt
+ Editor
+
+
+ Baggrundsfarve
+ Fed
+ Tekstfarve
+ Skrifttype
+ Tekst
+
+
+ Side
+
+
+ Installeringsprogrammet kan ikke forbinde til databasen.
+ Kunne ikke gemme web.config filen. Du bedes venligst manuelt ændre database forbindelses strengen.
+ Din database er blevet fundet og identificeret som
+ Database konfiguration
+ installér knappen for at installere Umbraco %0% databasen
+ ]]>
+ Næste for at fortsætte.]]>
+ Databasen er ikke fundet. Kontrollér venligst at informationen i database forbindelsesstrengen i "web.config" filen er korrekt.
+For at fortsætte bedes du venligst rette "web.config" filen (ved at bruge Visual Studio eller dit favoritprogram), scroll til bunden, tilføj forbindelsesstrengen til din database i feltet som hedder "umbracoDbDSN" og gem filen.
Klik på Forsøg igen knappen når du er færdig.Mere information om at redigere web.config her.
]]>
+ Kontakt venligst din ISP hvis det er nødvendigt. Hvis du installerer på en lokal maskine eller server kan du muligvis få informationerne fra din systemadministrator.]]>
+ Tryk på Opgradér knappen for at opgradere din database til Umbraco %0%Bare rolig - intet indhold vil blive slettet og alt vil stadig fungere bagefter!
]]>
+ Tryk på Næste for at fortsætte.]]>
+ Næste for at fortsætte med konfigurationsguiden.]]>
+ Normalbrugerens adgangskode er nødt til at blive ændret!]]>
+ Normalbrugeren er blevet gjort utjenstdygtig eller har ikke adgang til Umbraco! Du behøver ikke foretage yderligere handlinger. Tryk på Næste for at fortsætte.
]]>
+ Normalbrugerens adgangskode er på succesfuld vis blevet ændret siden installationen! Du behøver ikke foretage yderligere handlinger. Tryk på Næste for at fortsætte.
]]>
+ Adgangskoden er blevet ændret!
+ Få en fremragende start, se vores videoer
+ Ved at klikke på næste knappen (eller ved at ændre UmbracoConfigurationStatus i web.config filen), accepterer du licensaftalen for denne software, som specificeret i boksen nedenfor. Bemærk venligst at denne Umbraco distribution består af to forskellige licenser, MIT's Open Source Licens for frameworket og Umbraco Freeware Licensen som dækker UI'en.
+ Endnu ikke installeret
+ Berørte filer og foldere
+ Flere informationer om at opsætte rettigheder for Umbraco her
+ Du er nødt til at give ASP.NET 'modify' rettigheder på følgende filer/foldere
+ Dine rettighedsindstillinger er næsten perfekte! Du kan køre Umbraco uden problemer, men du vil ikke være i stand til at installere pakker, som er anbefalet for at få fuldt udbytte af Umbraco.]]>
+ Hvorledes besluttes
+ Klik her for at læse tekstversionen
+ video tutorials om at opsætte folderrettigheder for Umbraco eller læs tekstversionen.]]>
+ Dine rettighedsindstillinger kan være et problem! Du kan afvikle Umbraco uden problemer, men du vil ikke være i stand til at oprette foldere eller installere pakker, hvilket er anbefalet for at få fuldt udbytte af Umbraco.]]>
+ Dine rettighedsindstillinger er ikke klar til Umbraco! For at afvikle Umbraco er du nødt til at opdatere dine rettighedsindstillinger.]]>
+ Dine rettighedsindstillinger er perfekte! Du er nu parat til at afvikle Umbraco og installere pakker!]]>
+ Løser folder problem
+ Følg dette link for mere information om udfordringer med ASP.NET og oprettelse af foldere
+ Sætter folderrettigheder op
+ Umbraco har behov for 'write/modify' adgang til bestemte foldere, for at kunne gemme filer som billeder og PDF'er. Umbraco gemmer også midlertidige data (eksempelvis cachen) for at forbedre ydelsen på dit website.
+ Jeg har lyst til at begynde på bar bund
+ lær hvordan) Du kan stadig vælge at installere Runway senere. Gå venligst til Udvikler-sektionen og vælg Pakker.]]>
+ Du har lige opsat en ren Umbraco-platform. Hvad ønsker du nu at gøre?
+ Runway er installeret
+ Dette er vores liste over anbefalede moduler. Kryds dem af du ønsker at installere eller se den fulde liste af moduler ]]>
+ Kun anbefalet for erfarne brugere
+ Jeg ønsker at begynder med et simpelt website
+ "Runway" er et simpelt website som stiller nogle basale dokumenttyper og skabeloner til rådighed. Installeringsprogrammet kan automatisk opsætte Runway for dig, men du kan nemt redigere, udvide eller fjerne det. Det er ikke nødvendigt og du kan sagtens bruge Umbraco uden. Men Runway tilbyder et fundament, som er baseret på 'Best Practices', som får dig igang hurtigere end nogensinde før. Hvis du vælger at installere Runway, kan du efter eget valg vælge de grundlæggende byggesten kaldet 'Runway Modules' til at forbedre dine Runway-sider.Inkluderet med Runway: Home Page, Getting Started page, Installing Modules page. Valgfri Moduler: Top Navigation, Sitemap, Contact, Gallery.
]]>
+ Hvad er Runway
+ Skridt 1/5: Acceptér licens
+ Skridt 2/5: Database-konfiguration
+ Skridt 3/5: Validerer filrettigheder
+ Skridt 4/5: Kontrollér Umbraco sikkerhed
+ Skridt 5/5: Umbraco er parat til at få dig igang
+ Tak fordi du valgte Umbraco
+ Gennemse dit nye site Du installerede Runway, så hvorfor ikke se hvordan dit nye website ser ud.]]>
+ Yderligere hjælpe og informationer Få hjælp fra vores prisvindende fællesskab, gennemse dokumentationen eller se nogle gratis videoer om hvordan du opsætter et simpelt site, hvordan du bruger pakker og en 'quick guide' til Umbraco terminologier]]>
+ Umbraco %0% er installeret og klar til brug
+ /web.config filen og opdatére 'AppSetting' feltet UmbracoConfigurationStatus i bunden til '%0%' .]]>
+ komme igang med det samme ved at klikke på "Start Umbraco" knappen nedenfor. Hvis du er ny med Umbraco , kan du finde masser af ressourcer på vores 'getting started' sider.
+]]>
+ Start UmbracoFor at administrere dit website skal du blot åbne Umbraco administrationen og begynde at tilføje indhold, opdatere skabelonerne og stylesheets'ene eller tilføje ny funktionalitet.]]>
+ Forbindelse til databasen fejlede.
+ Umbraco Version 3
+ Umbraco Version 4
+ Se
+ Umbraco %0% for en frisk installation eller for en opgradering fra version 3.0. Tryk på Næste for at begynde på guiden.]]>
+
+
+ Culture Code
+ Culture Name
+
+
+ Du har været inaktiv, og du vil blive logget ud om
+ Forny for at gemme dine ændringer
+
+
+ Så er det søndag!
+ Smil, det er mandag!
+ Hurra, det er tirsdag!
+ Hvilken herlig onsdag!
+ Glædelig torsdag!
+ Endelig fredag!
+ Glædelig lørdag
+ Log ind nedenfor
+ Log ind med
+ Din session er udløbet
+ © 2001 - %0% umbraco.com ]]>
+ Glemt adgangskode?
+ En e-mail vil blive sendt til den angivne adresse med et link til at nulstille din adgangskode
+ En e-mail med instruktioner for nulstilling af adgangskoden vil blive sendt til den angivne adresse, hvis det matcher vores optegnelser
+ Vis adgangskode
+ Skjul adgangskode
+ Tilbage til login formular
+ Angiv en ny adgangskode
+ Din adgangskode er blevet opdateret
+ Det link, du har klikket på, er ugyldigt eller udløbet
+ Umbraco: Nulstil adgangskode
+ Dit brugernavn til at logge på Umbraco backoffice er: %0% Klik her for at nulstille din adgangskode eller kopier/indsæt denne URL i din browser:
%1%
]]>
+
+
+ Skrivebord
+ Sektioner
+ Indhold
+
+
+ Vælg siden ovenover...
+ %0% er nu kopieret til %1%
+ Kopier til
+ %0% er nu flyttet til %1%
+ Flyt til
+ er blevet valgt som roden for dit nye indhold, klik 'ok' nedenunder.
+ Intet element valgt, vælg et element i listen ovenfor før der klikkes 'fortsæt'
+ Det nuværende element kan ikke lægges under denne pga. sin type
+ Det nuværende element kan ikke ligge under en af dens undersider
+ Dette element må ikke findes på rodniveau
+ Denne handling er ikke tilladt fordi du ikke har de fornødne rettigheder på et eller flere af under-dokumenterne
+ Relater det kopierede element til originalen
+
+
+ %0%]]>
+ Notificeringer er gemt for
+
+ Hej %0%
+ Dette er en automatisk mail for at informere dig om at opgaven '%1%'
+ er blevet udførtpå siden '%2%' af brugeren '%3%'
+
Opdateringssammendrag: Hav en fortsat god dag! De bedste hilsner fra umbraco robotten
]]>
+ [%0%] Notificering om %1% udført på %2%
+ Notificeringer
+
+
+ Handlinger
+ Oprettet
+ Opret pakke
+ Vælg pakken fra din computer. Umbraco pakker er oftest en ".zip" fil
+ Dette vil slette pakken
+ Slip her for at uploade
+ Inkludér alle underliggende sider
+ eller klik her for at vælge pakkefil
+ Upload pakke
+ Installer en lokal pakke ved at vælge den fra din computer. Installer kun pakker fra kilder, du kender og stoler på
+ Upload en anden pakke
+ Annuller og upload en anden pakke
+ Jeg accepterer
+ betingelser for anvendelse
+ Sti til fil
+ Absolut sti til fil (f.eks.: /bin/umbraco.bin)
+ Installeret
+ Installeret pakker
+ Installér lokal
+ Afslut
+ Denne pakke har ingen konfigurationsvisning
+ Der er ikke blevet oprettet nogle pakker endnu
+ Du har ingen pakker installeret
+ 'Pakker' øverst til højre på din skærm]]>
+ Pakkehandlinger
+ Forfatter URL
+ Pakkeindhold
+ Pakkefiler
+ Ikon URL
+ Installér pakke
+ Licens
+ Licens URL
+ Pakkeegenskaber
+ Søg efter pakker
+ Resultater for
+ Vi kunne ikke finde resultater for
+ Prøv venligst at søge efter en anden pakke eller gennemse kategorierne
+ Populære
+ Nye udgivelser
+ har
+ karma points
+ Information
+ Ejer
+ Bidragsydere
+ Oprettet
+ Nuværende version
+ .NET version
+ Downloads
+ Likes
+ Kompatibilitet
+ Denne pakke er kompatibel med de følgende versioner af Umbraco, som rapporteret af community-medlemmer. Fuld kompatibilitet kan ikke garanteres for versioner rapporteret nedenfor 100%
+ Eksterne kilder
+ Forfatter
+ Dokumentation
+ Pakke meta data
+ Pakkenavn
+ Pakken indeholder ingen elementer
+ Du kan roligt fjerne denne fra systemet ved at klikke på "Fjern pakke" nedenfor.]]>
+ Pakkevalg
+ Pakke læs mig
+ Pakke opbevaringsbase
+ Bekræft af-installering
+ Pakken blev fjernet
+ Pakken er på succesfuld vis blevet fjernet
+ Afinstallér pakke
+
+Bemærk: at dokumenter og medier som afhænger af denne pakke vil muligvis holde op med at virke, så vær forsigtig. Hvis i tvivl, kontakt personen som har udviklet pakken.]]>
+ Pakke version
+ Pakke allerede installeret
+ Denne pakke kan ikke installeres, den kræver en minimum Umbraco version af
+ Afinstallerer...
+ Downloader...
+ Importeret...
+ Installerer...
+ Genstarter, vent venligst...
+ Færdig, din browser opdateres nu, vent venligst...
+ Klik venligst på 'Afslut' for at gennemføre installation og opdatere siden.
+ Uploader pakke...
+
+
+ Indsæt med fuld formattering (Anbefales ikke)
+ Den tekst du er ved at indsætte indeholder specialtegn eller formattering. Dette kan skyldes at du kopierer fra f.eks. Microsoft Word. Umbraco kan fjerne denne specialformattering automatisk så indholdet er mere velegnet til visning på en webside.
+ Indsæt som ren tekst, dvs. fjern al formattering
+ Indsæt, men fjern formattering som ikke bør være på en webside (Anbefales)
+
+
+ Gruppebaseret beskyttelse
+ Hvis du ønsker at give adgang til alle medlemmer af specifikke medlemsgrupper
+ Du skal oprette en medlemsgruppe før du kan bruge gruppebaseret beskyttelse
+ Fejlside
+ Brugt når folk er logget ind, men ingen adgang
+ %0% skal beskyttes]]>
+ %0% er nu beskyttet]]>
+ %0%]]>
+ Log ind-side
+ Vælg siden der indeholder log ind-formularen
+ Fjern beskyttelse...
+ %0%?]]>
+ Vælg siderne der indeholder log ind-formularer og fejlmeddelelser
+ %0%]]>
+ %0%]]>
+ Adgang til enkelte medlemmer
+ Hvis du ønsker at give adgang til enkelte medlemmer
+
+
+ Udgivelsen kunne ikke udgives da publiceringsdato er sat
+
+
+ %0% kunne ikke udgives, fordi et 3. parts modul annullerede handlingen
+
+ Medtag ikke-udgivede undersider
+ Publicerer - vent venligst...
+ %0% ud af %1% sider er blevet udgivet...
+ %0% er nu publiceret
+ %0% og alle undersider er nu publiceret
+ Publicér alle undersider
+ ok for at udgive %0% og derved gøre indholdet offentligt tilgængeligt.. Du kan udgive denne side og dens undersider ved at klikke Udgiv alle undersider forneden]]>
+
+
+ Du har ikke konfigureret nogen godkendte farver
+
+
+ Du kan kun vælge følgende type(r) dokumenter: %0%
+ Du har valgt et dokument som er slettet eller lagt i papirkurven
+ Du har valgt dokumenter som er slettede eller lagt i papirkurven
+
+
+ Du har valgt et medie som er slettet eller lagt i papirkurven
+ Du har valgt medier som er slettede eller lagt i papirkurven
+
+
+ indtast eksternt link
+ vælg en intern side
+ Tekst
+ Link
+ Nyt vindue
+ Indtast en tekst
+ Indtast et link
+
+
+ Nulstil
+ Acceptér
+ Fortryd
+
+
+ Vælg en version at sammenligne med den nuværende version
+ Nuværende version
+ Rød tekst vil ikke blive vist i den valgte version. Grøn betyder tilføjet ]]>
+ Dokument tilbagerullet
+ Her vises den valgte version som html. Hvis du ønsker at se forskellen mellem de 2 versioner på samme tid, brug 'diff'-oversigten
+ Tilbagerulning til
+ Vælg version
+ Vis
+
+
+ Rediger script
+
+
+ Concierge
+ Indhold
+ Courier
+ Udvikler
+ Umbraco konfigurationsguide
+ Mediearkiv
+ Medlemmer
+ Pakker
+ Nyhedsbreve
+ Indstillinger
+ Statistik
+ Oversættelse
+ Brugere
+ Hjælp
+ Formularer
+
+
+ De bedste Umbraco video tutorials
+
+
+ Standardskabelon
+ For at importere en dokumenttype, find ".udt"-filen på din computer ved at klikke på "Gennemse"-knappen og klik "Import" (Du vil blive bedt om bekræftelse på næste skærmbillede)
+ Ny titel på faneblad
+ Nodetype
+ Type
+ Stylesheet
+ Script
+ Faneblad
+ Titel på faneblad
+ Faneblade
+
+
+ Sorteringsrækkefølge
+ Oprettelsesdato
+ Sortering udført
+ Træk de forskellige sider op eller ned for at indstille hvordan de skal arrangeres, eller klik på kolonnehovederne for at sortere hele rækken af sider
+
+
+
+ Validering
+ Valideringsfejl skal rettes før elementet kan gemmes
+ Fejlet
+ Gemt
+ Utilstrækkelige brugerrettigheder, kunne ikke fuldføre handlingen
+ Annulleret
+ Handlingen blev annulleret af et 3. part tilføjelsesprogram
+ Property type eksisterer allerede
+ Egenskabstype oprettet
+ DataType: %1%]]>
+ Egenskabs type slettet
+ Indholdstype gemt
+ Du har oprettet et faneblad
+ Faneblad slettet
+ Faneblad med id: %0% slettet
+ Stylesheetet blev ikke gemt
+ Stylesheet gemt
+ Stylesheet gemt uden fejl
+ Datatype gemt
+ Ordbogsnøgle gemt
+ Indhold publiceret
+ og nu synligt for besøgende
+ Indhold gemt
+ Husk at publicere for at gøre det synligt for besøgende
+ Send til Godkendelse
+ Rettelser er blevet sendt til godkendelse
+ Medie gemt
+ Medie gemt uden problemer
+ Medlem gemt
+ Medlemsgruppe gemt
+ Stylesheetegenskab gemt
+ Stylesheet gemt
+ Skabelon gemt
+ Der er opstået en fejl under redigering
+ Bruger gemt
+ Brugertype gemt
+ Brugergruppe gemt
+ Fil ikke gemt
+ Filen kunne ikke gemmes. Tjek filrettighederne
+ Fil gemt
+ Fil gemt uden fejl
+ Sprog gemt
+ Medietype gemt
+ Medlemstype gemt
+ Medlemsgruppe gemt
+ Skabelon ikke gemt
+ Undgå venligst at du har 2 templates med samme alias
+ Skabelon gemt
+ Skabelon gemt uden fejl!
+ Indhold fjernet fra udgivelse
+ Partial view gemt
+ Partial view gemt uden fejl!
+ Partial view ikke gemt
+ Der opstod en fejl ved at gemme filen.
+ Rettigheder gemt for
+ Slettede %0% brugergrupper
+ %0% blev slettet
+ Aktiverede %0% brugere
+ Deaktiverede %0% brugere
+ %0% er nu aktiveret
+ %0% er nu deaktiveret
+ Brugergrupper er blevet indstillet
+ Låste %0% brugere op
+ %0% er nu låst op
+
+
+ Tilføj style
+ Redigér style
+ Teksteditor-styles
+ Definér de styles, der skal være tilgængelige i teksteditoren for dette stylesheet
+ Selector
+ Bruger CSS-syntaks, f.eks. "h1" eller ".redheader"
+ Rediger stylesheet
+ Rediger CSS-egenskab
+ Det navn der vises i teksteditoren
+ Forhåndsvisning
+ Hvordan teksten vil se ud i teksteditoren.
+ Styles
+ Den CSS der skal anvendes i teksteditoren, f.eks. "color:red;"
+ Kode
+ Editor
+
+
+ Sletning af skabelonen med ID %0% fejlede
+ Rediger skabelon
+ Sektioner
+ Indsæt indholdsområde
+ Indsæt pladsholder for indholdsområde
+ Indsæt
+ Hvad vil du indsætte?
+ Oversættelse
+ Indsætter en oversætbar tekst, som skifter efter det sprog, som websitet vises i.
+ Makro
+
+ En makro er et element, som kan have forskellige indstillinger, når det indsættes.
+ Brug det som en genbrugelig del af dit design såsom gallerier, formularer og lister.
+
+ Sideværdi
+
+ Viser værdien af et felt fra den nuværende side. Kan indstilles til at bruge rekursive værdier eller
+ vise en standardværdi i tilfælde af, at feltet er tomt.
+
+ Partial view
+
+ Et Partial View er et skabelonelement, som kan indsættes i andre skabeloner og derved
+ genbruges og deles på tværs af sideskabelonerne.
+
+ Master skabelon
+ Lynguide til Umbracos skabelontags
+ Ingen master
+ Indsæt en underliggende skabelon
+ @RenderBody() element.
+ ]]>
+ Definer en sektion
+ @section { ... }. Herefter kan denne sektion flettes ind i
+ overliggende skabelon ved at indsætte et @RenderSection element.
+ ]]>
+ Indsæt en sektion
+ @RenderSection(name) element. Den underliggende skabelon skal have
+ defineret en sektion via et @section [name]{ ... } element.
+ ]]>
+ Sektionsnavn
+ Sektionen er obligatorisk
+
+ Hvis obligatorisk, skal underskabelonen indeholde en @section -definition.
+
+ Query builder
+ sider returneret, på
+ Returner
+ alt indhold
+ indhold af typen "%0%"
+ fra
+ mit website
+ hvor
+ og
+ er
+ ikke er
+ er før
+ er før (inkl. valgte dato)
+ er efter
+ er efter (inkl. valgte dato)
+ er
+ ikke er
+ indeholder
+ ikke indeholder
+ er større end
+ er større end eller det samme som
+ er mindre end
+ er mindre end eller det samme som
+ Id
+ Navn
+ Oprettelsesdato
+ Sidste opdatering
+ Sortér efter
+ stigende rækkefølge
+ faldende rækkefølge
+ Skabelon
+
+
+ Billede
+ Macro
+ Vælg indholdstype
+ Vælg layout
+ Tilføj række
+ Tilføj indhold
+ Slip indhold
+ Indstillinger tilføjet
+ Indholdet er ikke tilladt her
+ Indholdet er tilladt her
+ Klik for at indlejre
+ Klik for at indsætte et billede
+ Billedtekst...
+ Skriv her...
+ Grid layout
+ Et layout er det overordnede arbejdsområde til dit grid - du vil typisk kun behøve ét eller to
+ Tilføj grid layout
+ Juster dit layout ved at justere kolonnebredder og tilføj yderligere sektioner
+ Rækkekonfigurationer
+ Rækker er foruddefinerede celler, der arrangeres vandret
+ Tilføj rækkekonfiguration
+ Juster rækken ved at indstille cellebredder og tilføje yderligere celler
+ Kolonner
+ Det totale antal kolonner i dit grid
+ Indstillinger
+ Konfigurer, hvilket indstillinger, brugeren kan ændre
+ Typografi
+ Vælg hvilke typografiværdier en redaktør kan ændre
+ Tillad alle editorer
+ Tillad alle rækkekonfigurationer
+ Sæt som standard
+ Vælg ekstra
+ Vælg standard
+ er tilføjet
+ Maksimalt emner
+ Efterlad blank eller sæt til 0 for ubegrænset
+
+
+ Kompositioner
+ Gruppe
+ Du har ikke tilføjet nogen grupper
+ Tilføj gruppe
+ Nedarvet fra
+ Tilføj egenskab
+ Påkrævet label
+ Aktivér listevisning
+ Konfigurér indholdet til at blive vist i en sortérbar og søgbar liste; undersider vil ikke blive vist i træet
+ Tilladte skabeloner
+ Vælg hvilke skabeloner der er tilladt at bruge på dette indhold
+ Tillad på rodniveau
+ Kun dokumenttyper med denne indstilling aktiveret kan oprettes i rodniveau under indhold og mediearkiv
+ Tilladte typer
+ Tillad at oprette indhold af en specifik type under denne
+ Vælg child node
+ Nedarv faner og egenskaber fra en anden dokumenttype. Nye faner vil blive tilføjet den nuværende dokumenttype eller sammenflettet hvis fanenavnene er ens.
+ Indholdstypen bliver brugt i en komposition og kan derfor ikke blive anvendt som komposition
+ Der er ingen indholdstyper tilgængelige at bruge som komposition
+ Tilgængelige editors
+ Genbrug
+ Editor indstillinger
+ Konfiguration
+ Ja, slet
+ blev flyttet til
+ Vælg hvor
+ skal flyttes til
+ Alle dokumenttyper
+ Alle dokumenter
+ Alle medier
+ som benytter denne dokumenttype vil blive slettet permanent. Bekræft at du også vil slette dem.
+ som benytter denne medietype vil blive slettet permanent. Bekræft at du også vil slette dem.
+ som benytter denne medlemstype vil blive slettet permanent. Bekræft at du også vil slette dem.
+ og alle dokumenter, som benytter denne type
+ og alle medier, som benytter denne type
+ og alle medlemmer, som benytter denne type
+ Medlem kan redigere
+ Vis på medlemsprofil
+ fane har ingen sorteringsrækkefølge
+ Element-type
+ Er en Element-type
+ En Element-type er tiltænkt brug i f.eks. Nested Content, ikke i indholdstræet
+ Dette benyttes ikke for en Element-type
+ Du har lavet ændringer til denne egenskab. Er du sikker på at du vil kassere dem?
+
+
+ Tilføj sprog
+ Påkrævet sprog
+ Egenskaber på dette sprog skal være udfyldt før noden kan blive udgivet.
+ Standardsprog
+ Et Umbraco-site kan kun have ét standardsprog.
+ At skifte standardsprog kan resultere i at standardindhold mangler.
+ Fallback til
+ Intet fallback-sprog
+ For at tillade flersproget indhold, som ikke er tilgængeligt i det anmodede sprog, skal du her vælge et sprog at falde tilbage på.
+ Fallback-sprog
+
+
+ Tilføj parameter
+ Redigér parameter
+ Indtast makronavn
+ Parametre
+ Definér de parametre der skal være tilgængelige, når du bruger denne makro.
+ Vælg partial view makrofil
+
+
+ Alternativt felt
+ Alternativ tekst
+ Casing
+ Felt som skal indsættes
+ Konvertér linieskift
+ Erstatter et linieskift med html-tag'et <br>
+ Ja, kun dato
+ Formatér som dato
+ HTML indkod
+ Vil erstatte specielle karakterer med deres HTML jævnbyrdige.
+ Denne tekst vil blive sat ind lige efter værdien af feltet
+ Denne tekst vil blive sat ind lige før værdien af feltet
+ Lowercase
+ Ingen
+ Indsæt efter felt
+ Indsæt før felt
+ Rekursivt
+ Fjern paragraf-tags
+ Fjerner eventuelle <P> omkring teksten
+ Standard felter
+ Store bogstaver
+ URL encode
+ Hvis indholdet af felterne skal sendes til en url, skal denne slåes til så specialtegn formateres
+ Denne tekst bruges hvis ovenstående felter er tomme
+ Dette felt vil blive brugt hvis ovenstående felt er tomt
+ Ja, med klokkeslæt. Dato/tid separator:
+
+
+ Oversættelsesdetaljer
+ Download XML DTD
+ Felter
+ Inkluder undersider
+ Hej %0%. Dette er en automatisk mail sendt for at informere dig om at dokumentet '%1' har en forespørgsel omkring oversættelse til '%5%' af %2%. Gå til http://%3%/translation/details.aspx?id=%4% for at redigere. Eller log ind i Umbraco for at få en oversigt over dine oversættelsesopgaver: http://%3%/Umbraco Hav en god dag! Mange hilsner Umbraco-robotten
+ Ingen oversættelsesbrugere er fundet. Opret venligst en oversættelsesbruger før du begynder at sende indhold til oversættelse
+ Siden '%0%' er blevet sent til oversættelse
+ Send siden '%0%' til oversættelse
+ Totalt antal ord
+ Oversæt til
+ Oversættelse gennemført.
+ Du kan gennemse de sider, som du lige har oversat, ved at klikke nedenfor. Hvis den originale side bliver fundet, vil du blive præsenteret for en sammenligning af de to sider.
+ Oversættelse fejlede, XML-filen kan være korrupt (indeholde fejl)
+ Oversættelsesmuligheder
+ Oversætter
+ Upload oversættelse (xml)
+
+
+ Indhold
+ Indholdsskabeloner
+ Mediearkiv
+ Cacheviser
+ Papirkurv
+ Oprettede pakker
+ Datatyper
+ Ordbog
+ Installerede pakker
+ Installér et skin
+ Installér et starterkit
+ Sprog
+ Installér lokal pakke
+ Makroer
+ Medietyper
+ Medlemmer
+ Medlemsgrupper
+ Roller
+ Medlemstyper
+ Dokumenttyper
+ Relationstyper
+ Pakker
+ Pakker
+ Partial Views
+ Partial View makrofiler
+ Installer fra "repository"
+ Installer Runway
+ Runway-moduler
+ Scripting filer
+ Scripts
+ Stylesheets
+ Skabeloner
+ Brugertilladelser
+ Brugertyper
+ Brugere
+ Indstillinger
+ Design og layout
+ Tredjepart
+
+
+ Ny opdatering er klar
+ %0% er klar, klik her for at downloade
+ Ingen forbindelse til server
+ Der kunne ikke tjekkes for ny opdatering. Se trace for mere info.
+
+
+ Adgang
+ Baseret på de tildelte grupper og startnoder har brugeren adgang til følgende noder
+ Tildel adgang
+ Administrator
+ Kategorifelt
+ Bruger oprettet
+ Skift dit kodeord
+ Skift billede
+ Nyt kodeord
+ er ikke blevet låst ude
+ Kodeordet er ikke blevet ændret
+ Gentag dit nye kodeord
+ Du kan ændre dit kodeord, som giver dig adgang til Umbraco Back Office ved at udfylde formularen og klikke på knappen 'Skift dit kodeord'
+ Indholdskanal
+ Opret nye brugere for at give dem adgang til Umbraco. Når en ny bruger oprettes, genereres der en adgangskode, som du kan dele med brugeren.
+ Beskrivelsesfelt
+ Deaktivér bruger
+ Dokumenttype
+ Redaktør
+ Uddragsfelt
+ Fejlede loginforsøg
+ Gå til brugerprofil
+ Tilføj grupper for at tildele adgang og tilladelser
+ Invitér anden bruger
+ Invitér nye brugere til at give dem adgang til Umbraco. En invitation vil blive sendt via e-mail til brugeren med oplysninger om, hvordan man logger ind i Umbraco.
+ Sprog
+ Indstil det sprog, du vil se i menuer og dialoger
+ Seneste låst ude dato
+ Seneste login
+ Kodeord sidst ændret
+ Brugernavn
+ Startnode i mediearkivet
+ Begræns mediebiblioteket til en bestemt startnode
+ Medie startnoder
+ Begræns mediebiblioteket til bestemte startnoder
+ Moduler
+ Deaktivér adgang til Umbraco
+ har endnu ikke logget ind
+ Gammelt kodeord
+ Adgangskode
+ Nulstil kodeord
+ Dit kodeord er blevet ændret!
+ Bekræft venligst dit nye kodeord
+ Indtast dit nye kodeord
+ Nuværende kodeord
+ ugyldig nuværende kodeord
+ Dit nye kodeord må ikke være tomt!
+ Dit nye kodeord og dit bekræftede kodeord var ikke ens, forsøg venligst igen!
+ Det bekræftede kodeord matcher ikke det nye kodeord
+ Erstat underelement-rettigheder
+ Du ændrer i øjeblikket rettigheder for siderne:
+ Vælg sider for at ændre deres rettigheder
+ Fjern billede
+ Standard rettigheder
+ Granulære rettigheder
+ Sæt rettigheder for specifikke noder
+ Profil
+ Søg alle 'børn'
+ Startnode
+ Tilføj sektioner for at give brugerne adgang
+ Vælg brugergrupper
+ Ingen startnode valgt
+ Ingen startnoder valgt
+ Begræns indholdstræet til en bestemt startnode
+ Indhold startnoder
+ Begræns indholdstræet til bestemte startnoder
+ Bruger sidst opdateret
+ er blevet oprettet
+ Den nye bruger er blevet oprettet. For at logge ind i Umbraco skal du bruge adgangskoden nedenfor.
+ Brugeradministration
+ Navn
+ Brugertilladelser
+ Brugergruppe
+ er blevet inviteret
+ En invitation er blevet sendt til den nye bruger med oplysninger om, hvordan man logger ind i Umbraco.
+ Hej og velkommen til Umbraco! På bare 1 minut vil du være klar til at komme i gang, vi skal bare have dig til at oprette en adgangskode og tilføje et billede til din avatar.
+ Hvis du uploader et billede af dig selv, gør du det nemt for andre brugere at genkende dig. Klik på cirklen ovenfor for at uploade et billede.
+ Forfatter
+ Skift
+ Din profil
+ Din historik
+ Session udløber
+ Invitér bruger
+ Opret bruger
+ Send invitation
+ Tilbage til brugere
+ Umbraco: Invitation
+ Hej %0%, du er blevet inviteret af %1% til Umbraco backoffice.
Besked fra %1%: %2%
Klik på dette link for acceptere invitationen
Hvis du ikke kan klikke på linket, så kopier og indsæt denne URL i dit browservindue %3%