From ca08713086180331bb6ff37a9a945b2f49584a0b Mon Sep 17 00:00:00 2001 From: magikcypress Date: Thu, 2 Mar 2017 15:44:54 +0100 Subject: [PATCH] Update package for Yunohost 2.4.0 --- LICENSE | 675 ++ check_process | 62 + conf/php-fpm.ini | 3 + scripts/.fonctions | 205 + scripts/backup | 28 + scripts/install | 115 +- scripts/remove | 28 +- scripts/restore | 53 + scripts/upgrade | 49 +- sources/source_dir | 1 + sources/source_md5. | 1 + sources/source_url | 1 + src/.config | 233 - src/.debug | 221 - src/.dependencies | 26 - src/.hg_archival.txt | 5 - src/.hgignore | 1 - src/.htaccess | 63 - src/.installer | 170 - src/CHANGELOG.md | 892 --- src/LICENSE | 21 - src/README.md | 110 - src/assets/.gitkeep | 0 src/backup/.gitkeep | 0 src/bin/composer.phar | Bin 1147592 -> 0 bytes src/bin/gpm | 56 - src/bin/grav | 46 - src/cache/.gitkeep | 0 src/composer.json | 36 - src/composer.lock | 1012 --- src/htaccess.txt | 63 - src/images/.gitkeep | 0 src/index.php | 42 - src/logs/.gitkeep | 0 src/nginx.conf | 87 - src/robots.txt | 2 - src/system/assets/debugger.css | 54 - src/system/assets/grav.png | Bin 548 -> 0 bytes src/system/assets/jquery/jquery-2.1.4.min.js | 4 - src/system/assets/responsive-overlays/1x.png | Bin 3238 -> 0 bytes src/system/assets/responsive-overlays/2x.png | Bin 7593 -> 0 bytes src/system/assets/responsive-overlays/3x.png | Bin 13002 -> 0 bytes src/system/assets/responsive-overlays/4x.png | Bin 15545 -> 0 bytes .../assets/responsive-overlays/unknown.png | Bin 5241 -> 0 bytes src/system/assets/whoops.css | 110 - src/system/blueprints/config/media.yaml | 5 - src/system/blueprints/config/site.yaml | 116 - src/system/blueprints/config/streams.yaml | 7 - src/system/blueprints/config/system.yaml | 793 -- src/system/blueprints/pages/default.yaml | 276 - src/system/blueprints/pages/modular.yaml | 47 - src/system/blueprints/pages/modular_new.yaml | 56 - src/system/blueprints/pages/modular_raw.yaml | 97 - src/system/blueprints/pages/move.yaml | 17 - src/system/blueprints/pages/new.yaml | 66 - src/system/blueprints/pages/raw.yaml | 96 - src/system/blueprints/user/account.yaml | 56 - src/system/blueprints/user/account_new.yaml | 16 - src/system/config/media.yaml | 190 - src/system/config/site.yaml | 34 - src/system/config/streams.yaml | 21 - src/system/config/system.yaml | 112 - src/system/defines.php | 42 - src/system/images/media/thumb-doc.png | Bin 2202 -> 0 bytes src/system/images/media/thumb-gif.png | Bin 2809 -> 0 bytes src/system/images/media/thumb-gz.png | Bin 1956 -> 0 bytes src/system/images/media/thumb-html.png | Bin 1797 -> 0 bytes src/system/images/media/thumb-jpeg.png | Bin 3072 -> 0 bytes src/system/images/media/thumb-jpg.png | Bin 2974 -> 0 bytes src/system/images/media/thumb-m4v.png | Bin 2259 -> 0 bytes src/system/images/media/thumb-mov.png | Bin 2409 -> 0 bytes src/system/images/media/thumb-mp4.png | Bin 1978 -> 0 bytes src/system/images/media/thumb-pdf.png | Bin 1853 -> 0 bytes src/system/images/media/thumb-png.png | Bin 3115 -> 0 bytes src/system/images/media/thumb-swf.png | Bin 2317 -> 0 bytes src/system/images/media/thumb-txt.png | Bin 1853 -> 0 bytes src/system/images/media/thumb-zip.png | Bin 1885 -> 0 bytes src/system/languages/cs.yaml | 37 - src/system/languages/de.yaml | 43 - src/system/languages/en.yaml | 94 - src/system/languages/fr.yaml | 60 - src/system/languages/it.yaml | 21 - src/system/languages/nl.yaml | 43 - src/system/languages/ru.yaml | 43 - src/system/src/Grav/Common/Assets.php | 1143 --- .../src/Grav/Common/Backup/ZipBackup.php | 130 - src/system/src/Grav/Common/Browser.php | 58 - src/system/src/Grav/Common/Cache.php | 314 - src/system/src/Grav/Common/Composer.php | 55 - .../src/Grav/Common/Config/Blueprints.php | 207 - src/system/src/Grav/Common/Config/Config.php | 479 -- .../src/Grav/Common/Config/ConfigFinder.php | 186 - .../src/Grav/Common/Config/Languages.php | 27 - src/system/src/Grav/Common/Data/Blueprint.php | 456 -- .../src/Grav/Common/Data/Blueprints.php | 145 - src/system/src/Grav/Common/Data/Data.php | 240 - .../src/Grav/Common/Data/DataInterface.php | 68 - .../src/Grav/Common/Data/DataMutatorTrait.php | 68 - .../src/Grav/Common/Data/Validation.php | 672 -- src/system/src/Grav/Common/Debugger.php | 121 - src/system/src/Grav/Common/Errors/Errors.php | 52 - .../Grav/Common/Errors/Resources/error.css | 52 - .../Common/Errors/Resources/layout.html.php | 30 - .../Grav/Common/Errors/SimplePageHandler.php | 96 - .../src/Grav/Common/File/CompiledFile.php | 73 - .../Grav/Common/File/CompiledMarkdownFile.php | 9 - .../src/Grav/Common/File/CompiledYamlFile.php | 9 - .../src/Grav/Common/Filesystem/Folder.php | 353 - .../RecursiveFolderFilterIterator.php | 31 - .../Grav/Common/GPM/AbstractCollection.php | 32 - .../GPM/Common/AbstractPackageCollection.php | 34 - .../Common/GPM/Common/CachedCollection.php | 21 - .../src/Grav/Common/GPM/Common/Package.php | 42 - src/system/src/Grav/Common/GPM/GPM.php | 398 - src/system/src/Grav/Common/GPM/Installer.php | 343 - .../GPM/Local/AbstractPackageCollection.php | 17 - .../src/Grav/Common/GPM/Local/Package.php | 32 - .../src/Grav/Common/GPM/Local/Packages.php | 17 - .../src/Grav/Common/GPM/Local/Plugins.php | 22 - .../src/Grav/Common/GPM/Local/Themes.php | 22 - .../src/Grav/Common/GPM/PackageInterface.php | 58 - .../GPM/Remote/AbstractPackageCollection.php | 55 - .../src/Grav/Common/GPM/Remote/Grav.php | 95 - .../src/Grav/Common/GPM/Remote/Package.php | 12 - .../src/Grav/Common/GPM/Remote/Packages.php | 17 - .../src/Grav/Common/GPM/Remote/Plugins.php | 24 - .../src/Grav/Common/GPM/Remote/Themes.php | 24 - src/system/src/Grav/Common/GPM/Response.php | 221 - src/system/src/Grav/Common/GPM/Upgrader.php | 93 - src/system/src/Grav/Common/Getters.php | 150 - src/system/src/Grav/Common/Grav.php | 510 -- src/system/src/Grav/Common/GravTrait.php | 29 - .../src/Grav/Common/Helpers/Truncator.php | 194 - src/system/src/Grav/Common/Inflector.php | 310 - src/system/src/Grav/Common/Iterator.php | 218 - .../src/Grav/Common/Language/Language.php | 467 -- .../Grav/Common/Language/LanguageCodes.php | 774 -- .../src/Grav/Common/Markdown/Parsedown.php | 13 - .../Grav/Common/Markdown/ParsedownExtra.php | 13 - .../Common/Markdown/ParsedownGravTrait.php | 220 - .../src/Grav/Common/Page/Collection.php | 458 -- src/system/src/Grav/Common/Page/Header.php | 11 - src/system/src/Grav/Common/Page/Media.php | 260 - .../Grav/Common/Page/Medium/AudioMedium.php | 45 - .../src/Grav/Common/Page/Medium/ImageFile.php | 84 - .../Grav/Common/Page/Medium/ImageMedium.php | 473 -- .../src/Grav/Common/Page/Medium/Link.php | 65 - .../src/Grav/Common/Page/Medium/Medium.php | 443 -- .../Grav/Common/Page/Medium/MediumFactory.php | 148 - .../Common/Page/Medium/ParsedownHtmlTrait.php | 31 - .../Page/Medium/RenderableInterface.php | 34 - .../Common/Page/Medium/StaticImageMedium.php | 28 - .../Common/Page/Medium/StaticResizeTrait.php | 20 - .../Page/Medium/ThumbnailImageMedium.php | 121 - .../Grav/Common/Page/Medium/VideoMedium.php | 45 - src/system/src/Grav/Common/Page/Page.php | 2208 ------ src/system/src/Grav/Common/Page/Pages.php | 915 --- src/system/src/Grav/Common/Page/Types.php | 110 - src/system/src/Grav/Common/Plugin.php | 185 - src/system/src/Grav/Common/Plugins.php | 137 - .../Common/Service/ConfigServiceProvider.php | 64 - .../Common/Service/ErrorServiceProvider.php | 44 - .../Common/Service/LoggerServiceProvider.php | 20 - .../Common/Service/StreamsServiceProvider.php | 40 - src/system/src/Grav/Common/Session.php | 53 - src/system/src/Grav/Common/Taxonomy.php | 120 - src/system/src/Grav/Common/Theme.php | 23 - src/system/src/Grav/Common/Themes.php | 296 - src/system/src/Grav/Common/Twig/Twig.php | 357 - .../src/Grav/Common/Twig/TwigEnvironment.php | 16 - .../src/Grav/Common/Twig/TwigExtension.php | 598 -- .../Grav/Common/Twig/WriteCacheFileTrait.php | 39 - src/system/src/Grav/Common/Uri.php | 575 -- .../src/Grav/Common/User/Authentication.php | 51 - src/system/src/Grav/Common/User/User.php | 157 - src/system/src/Grav/Common/Utils.php | 390 - .../src/Grav/Console/Cli/BackupCommand.php | 97 - .../src/Grav/Console/Cli/CleanCommand.php | 212 - .../Grav/Console/Cli/ClearCacheCommand.php | 73 - .../src/Grav/Console/Cli/ComposerCommand.php | 82 - .../src/Grav/Console/Cli/InstallCommand.php | 173 - .../Grav/Console/Cli/NewProjectCommand.php | 71 - .../src/Grav/Console/Cli/NewUserCommand.php | 160 - .../src/Grav/Console/Cli/SandboxCommand.php | 313 - src/system/src/Grav/Console/ConsoleTrait.php | 127 - .../src/Grav/Console/Gpm/IndexCommand.php | 119 - .../src/Grav/Console/Gpm/InfoCommand.php | 125 - .../src/Grav/Console/Gpm/InstallCommand.php | 533 -- .../Grav/Console/Gpm/SelfupgradeCommand.php | 234 - .../src/Grav/Console/Gpm/UninstallCommand.php | 206 - .../src/Grav/Console/Gpm/UpdateCommand.php | 224 - .../src/Grav/Console/Gpm/VersionCommand.php | 102 - src/system/tests/Grav/Test/.gitkeep | 0 src/system/tests/Grav/TestCase.php | 8 - src/system/tests/bootstrap.php | 6 - src/system/tests/phpunit.xml | 18 - src/user/accounts/.gitkeep | 0 src/user/config/site.yaml | 7 - src/user/config/system.yaml | 41 - src/user/data/.gitkeep | 0 src/user/pages/01.home/default.md | 39 - src/user/plugins/.gitkeep | 0 src/user/plugins/admin/CHANGELOG.md | 261 - src/user/plugins/admin/LICENSE | 21 - src/user/plugins/admin/README.md | 110 - src/user/plugins/admin/admin.php | 414 - src/user/plugins/admin/admin.yaml | 20 - .../plugins/admin/assets/admin-dashboard.png | Bin 180920 -> 0 bytes src/user/plugins/admin/blueprints.yaml | 166 - src/user/plugins/admin/classes/admin.php | 867 -- src/user/plugins/admin/classes/controller.php | 1453 ---- src/user/plugins/admin/classes/gpm.php | 199 - src/user/plugins/admin/classes/popularity.php | 262 - src/user/plugins/admin/languages.yaml | 2583 ------ src/user/plugins/admin/pages/admin/backup.md | 8 - src/user/plugins/admin/pages/admin/cache.md | 7 - .../plugins/admin/pages/admin/dashboard.md | 91 - src/user/plugins/admin/pages/admin/denied.md | 4 - src/user/plugins/admin/pages/admin/forgot.md | 11 - src/user/plugins/admin/pages/admin/info.md | 7 - .../plugins/admin/pages/admin/installer.md | 7 - src/user/plugins/admin/pages/admin/login.md | 15 - src/user/plugins/admin/pages/admin/logout.md | 14 - src/user/plugins/admin/pages/admin/logs.md | 7 - src/user/plugins/admin/pages/admin/media.md | 7 - .../plugins/admin/pages/admin/pages-filter.md | 7 - src/user/plugins/admin/pages/admin/pages.md | 7 - src/user/plugins/admin/pages/admin/plugins.md | 7 - src/user/plugins/admin/pages/admin/reset.md | 17 - src/user/plugins/admin/pages/admin/site.md | 7 - .../plugins/admin/pages/admin/statistics.md | 7 - src/user/plugins/admin/pages/admin/system.md | 7 - src/user/plugins/admin/pages/admin/themes.md | 7 - src/user/plugins/admin/pages/admin/update.md | 7 - src/user/plugins/admin/pages/admin/users.md | 7 - .../themes/grav/css-compiled/nucleus.css | 626 -- .../themes/grav/css-compiled/nucleus.css.map | 7 - .../themes/grav/css-compiled/template.css | 2 - .../themes/grav/css-compiled/template.css.map | 7 - .../admin/themes/grav/css/chartist.min.css | 1 - .../grav/css/codemirror/base16-light.css | 36 - .../themes/grav/css/codemirror/codemirror.css | 332 - .../themes/grav/css/codemirror/paper.css | 39 - .../grav/css/datepicker/Flat/editor.png | Bin 2873 -> 0 bytes .../grav/css/datepicker/Flat/imagebrowser.png | Bin 6215 -> 0 bytes .../css/datepicker/Flat/indeterminate.gif | Bin 799 -> 0 bytes .../css/datepicker/Flat/loading-image.gif | Bin 1611 -> 0 bytes .../grav/css/datepicker/Flat/loading.gif | Bin 567 -> 0 bytes .../grav/css/datepicker/Flat/loading_2x.gif | Bin 1110 -> 0 bytes .../grav/css/datepicker/Flat/slider-h.gif | Bin 73 -> 0 bytes .../grav/css/datepicker/Flat/slider-v.gif | Bin 73 -> 0 bytes .../grav/css/datepicker/Flat/sprite.png | Bin 12313 -> 0 bytes .../grav/css/datepicker/Flat/sprite_2x.png | Bin 29105 -> 0 bytes .../grav/css/datepicker/Flat/sprite_kpi.png | Bin 787 -> 0 bytes .../css/datepicker/Flat/sprite_kpi_2x.png | Bin 1472 -> 0 bytes .../themes/grav/css/datepicker/README.md | 55 - .../grav/css/datepicker/grav.overrides.css | 3 - .../css/datepicker/kendo.common.core.min.css | 2515 ------ .../grav/css/datepicker/kendo.flat.min.css | 1 - .../themes/grav/css/featherlight.min.css | 8 - .../themes/grav/css/font-awesome.min.css | 4 - .../admin/themes/grav/css/hint.base.min.css | 5 - .../admin/themes/grav/css/nucleus-ie10.css | 24 - .../admin/themes/grav/css/nucleus-ie9.css | 62 - .../plugins/admin/themes/grav/css/prism.css | 121 - .../themes/grav/css/pure-0.5.0/grids-min.css | 15 - .../admin/themes/grav/css/selectize.min.css | 1 - .../plugins/admin/themes/grav/css/uikit.css | 6986 ----------------- .../admin/themes/grav/fonts/FontAwesome.otf | Bin 106260 -> 0 bytes .../themes/grav/fonts/fontawesome-webfont.eot | Bin 68875 -> 0 bytes .../themes/grav/fonts/fontawesome-webfont.svg | 640 -- .../themes/grav/fonts/fontawesome-webfont.ttf | Bin 138204 -> 0 bytes .../grav/fonts/fontawesome-webfont.woff | Bin 81284 -> 0 bytes .../grav/fonts/fontawesome-webfont.woff2 | Bin 64464 -> 0 bytes .../admin/themes/grav/images/favicon.png | Bin 1239 -> 0 bytes .../plugins/admin/themes/grav/images/logo.png | Bin 13361 -> 0 bytes .../plugins/admin/themes/grav/js/admin-all.js | 527 -- src/user/plugins/admin/themes/grav/js/ajax.js | 96 - .../admin/themes/grav/js/chartist.min.js | 9 - .../themes/grav/js/codemirror-compressed.js | 23 - .../admin/themes/grav/js/datepicker/README.md | 11 - .../admin/themes/grav/js/datepicker/init.js | 50 - .../grav/js/datepicker/kendo.custom.min.js | 19 - .../plugins/admin/themes/grav/js/dropdown.js | 165 - .../admin/themes/grav/js/dropzone.min.js | 1 - .../admin/themes/grav/js/featherlight.min.js | 8 - .../themes/grav/js/form-attr.polyfill.js | 78 - .../plugins/admin/themes/grav/js/forms.js | 20 - .../themes/grav/js/forms/fields/array.js | 210 - .../themes/grav/js/forms/fields/checkboxes.js | 100 - .../themes/grav/js/forms/fields/input.js | 73 - .../themes/grav/js/forms/fields/selectize.js | 71 - .../themes/grav/js/forms/fields/toggle.js | 59 - .../admin/themes/grav/js/forms/form.js | 335 - .../themes/grav/js/html5shiv-printshiv.min.js | 4 - .../admin/themes/grav/js/jquery-2.1.1.min.js | 4 - .../themes/grav/js/jquery.remodal.min.js | 9 - .../plugins/admin/themes/grav/js/mdeditor.js | 541 -- .../plugins/admin/themes/grav/js/mobile.js | 82 - .../themes/grav/js/modernizr.custom.71422.js | 4 - .../plugins/admin/themes/grav/js/pages-all.js | 336 - .../admin/themes/grav/js/selectize.min.js | 3 - .../admin/themes/grav/js/slugify.min.js | 3 - .../admin/themes/grav/js/sortable.min.js | 2 - .../admin/themes/grav/js/speakingurl.min.js | 7 - .../admin/themes/grav/js/toastr.min.js | 1 - src/user/plugins/admin/themes/grav/scss.sh | 2 - .../scss/configuration/nucleus/_base.scss | 14 - .../configuration/nucleus/_breakpoints.scss | 16 - .../scss/configuration/nucleus/_core.scss | 2 - .../scss/configuration/nucleus/_layout.scss | 8 - .../grav/scss/configuration/nucleus/_nav.scss | 3 - .../configuration/nucleus/_typography.scss | 14 - .../scss/configuration/template/_base.scss | 11 - .../scss/configuration/template/_bullets.scss | 5 - .../scss/configuration/template/_colors.scss | 78 - .../configuration/template/_typography.scss | 7 - .../configuration/template/_variables.scss | 14 - .../admin/themes/grav/scss/nucleus.scss | 27 - .../admin/themes/grav/scss/nucleus/_core.scss | 217 - .../admin/themes/grav/scss/nucleus/_flex.scss | 195 - .../themes/grav/scss/nucleus/_forms.scss | 62 - .../themes/grav/scss/nucleus/_typography.scss | 86 - .../grav/scss/nucleus/functions/_base.scss | 2 - .../scss/nucleus/functions/_direction.scss | 37 - .../grav/scss/nucleus/functions/_range.scss | 13 - .../grav/scss/nucleus/mixins/_base.scss | 2 - .../scss/nucleus/mixins/_breakpoints.scss | 30 - .../grav/scss/nucleus/mixins/_utilities.scss | 30 - .../scss/nucleus/particles/_align-text.scss | 46 - .../scss/nucleus/particles/_visibility.scss | 0 .../grav/scss/platform/joomla/_core.scss | 0 .../admin/themes/grav/scss/template.scss | 80 - .../themes/grav/scss/template/_admin.scss | 679 -- .../themes/grav/scss/template/_buttons.scss | 135 - .../themes/grav/scss/template/_core.scss | 113 - .../themes/grav/scss/template/_custom.scss | 2 - .../themes/grav/scss/template/_dropzone.scss | 234 - .../themes/grav/scss/template/_editor.scss | 239 - .../themes/grav/scss/template/_errors.scss | 17 - .../grav/scss/template/_extensions.scss | 34 - .../themes/grav/scss/template/_fonts.scss | 3 - .../themes/grav/scss/template/_forms.scss | 535 -- .../admin/themes/grav/scss/template/_gpm.scss | 143 - .../themes/grav/scss/template/_header.scss | 3 - .../themes/grav/scss/template/_login.scss | 60 - .../themes/grav/scss/template/_pages.scss | 307 - .../themes/grav/scss/template/_phpinfo.scss | 42 - .../themes/grav/scss/template/_remodal.scss | 156 - .../themes/grav/scss/template/_tables.scss | 124 - .../themes/grav/scss/template/_tabs.scss | 134 - .../themes/grav/scss/template/_toastr.scss | 195 - .../grav/scss/template/_typography.scss | 181 - .../grav/scss/template/modules/_base.scss | 2 - .../grav/scss/template/modules/_buttons.scss | 46 - .../scss/template/modules/_toggle-switch.scss | 308 - .../bourbon/_bourbon-deprecated-upcoming.scss | 8 - .../grav/scss/vendor/bourbon/_bourbon.scss | 77 - .../scss/vendor/bourbon/addons/_button.scss | 374 - .../scss/vendor/bourbon/addons/_clearfix.scss | 23 - .../bourbon/addons/_directional-values.scss | 111 - .../scss/vendor/bourbon/addons/_ellipsis.scss | 7 - .../vendor/bourbon/addons/_font-family.scss | 5 - .../vendor/bourbon/addons/_hide-text.scss | 10 - .../bourbon/addons/_html5-input-types.scss | 86 - .../scss/vendor/bourbon/addons/_position.scss | 32 - .../scss/vendor/bourbon/addons/_prefixer.scss | 45 - .../grav/scss/vendor/bourbon/addons/_rem.scss | 33 - .../vendor/bourbon/addons/_retina-image.scss | 31 - .../scss/vendor/bourbon/addons/_size.scss | 16 - .../bourbon/addons/_timing-functions.scss | 32 - .../scss/vendor/bourbon/addons/_triangle.scss | 83 - .../vendor/bourbon/addons/_word-wrap.scss | 8 - .../scss/vendor/bourbon/css3/_animation.scss | 52 - .../scss/vendor/bourbon/css3/_appearance.scss | 3 - .../bourbon/css3/_backface-visibility.scss | 6 - .../bourbon/css3/_background-image.scss | 42 - .../scss/vendor/bourbon/css3/_background.scss | 55 - .../vendor/bourbon/css3/_border-image.scss | 59 - .../vendor/bourbon/css3/_border-radius.scss | 22 - .../scss/vendor/bourbon/css3/_box-sizing.scss | 4 - .../grav/scss/vendor/bourbon/css3/_calc.scss | 4 - .../scss/vendor/bourbon/css3/_columns.scss | 47 - .../scss/vendor/bourbon/css3/_filter.scss | 5 - .../scss/vendor/bourbon/css3/_flex-box.scss | 321 - .../scss/vendor/bourbon/css3/_font-face.scss | 23 - .../bourbon/css3/_font-feature-settings.scss | 10 - .../bourbon/css3/_hidpi-media-query.scss | 10 - .../scss/vendor/bourbon/css3/_hyphens.scss | 4 - .../vendor/bourbon/css3/_image-rendering.scss | 14 - .../scss/vendor/bourbon/css3/_keyframes.scss | 35 - .../vendor/bourbon/css3/_linear-gradient.scss | 38 - .../vendor/bourbon/css3/_perspective.scss | 8 - .../vendor/bourbon/css3/_placeholder.scss | 8 - .../vendor/bourbon/css3/_radial-gradient.scss | 39 - .../scss/vendor/bourbon/css3/_transform.scss | 15 - .../scss/vendor/bourbon/css3/_transition.scss | 77 - .../vendor/bourbon/css3/_user-select.scss | 3 - .../vendor/bourbon/functions/_assign.scss | 11 - .../bourbon/functions/_color-lightness.scss | 13 - .../vendor/bourbon/functions/_flex-grid.scss | 39 - .../bourbon/functions/_golden-ratio.scss | 3 - .../vendor/bourbon/functions/_grid-width.scss | 13 - .../bourbon/functions/_modular-scale.scss | 66 - .../vendor/bourbon/functions/_px-to-em.scss | 13 - .../vendor/bourbon/functions/_px-to-rem.scss | 15 - .../bourbon/functions/_strip-units.scss | 5 - .../vendor/bourbon/functions/_tint-shade.scss | 9 - .../functions/_transition-property-name.scss | 22 - .../vendor/bourbon/functions/_unpack.scss | 17 - .../bourbon/helpers/_convert-units.scss | 15 - .../helpers/_gradient-positions-parser.scss | 13 - .../scss/vendor/bourbon/helpers/_is-num.scss | 8 - .../bourbon/helpers/_linear-angle-parser.scss | 25 - .../helpers/_linear-gradient-parser.scss | 41 - .../helpers/_linear-positions-parser.scss | 61 - .../helpers/_linear-side-corner-parser.scss | 31 - .../bourbon/helpers/_radial-arg-parser.scss | 69 - .../helpers/_radial-gradient-parser.scss | 50 - .../helpers/_radial-positions-parser.scss | 18 - .../bourbon/helpers/_render-gradients.scss | 26 - .../bourbon/helpers/_shape-size-stripper.scss | 10 - .../vendor/bourbon/helpers/_str-to-num.scss | 50 - .../vendor/bourbon/settings/_prefixer.scss | 6 - .../vendor/bourbon/settings/_px-to-em.scss | 1 - .../vendor/color-schemer/_color-schemer.scss | 31 - .../color-schemer/color-schemer/_cmyk.scss | 14 - .../color-schemer/_color-adjustments.scss | 30 - .../color-schemer/_color-schemer.scss | 208 - .../color-schemer/_colorblind.scss | 29 - .../color-schemer/_comparison.scss | 15 - .../color-schemer/_equalize.scss | 5 - .../color-schemer/_harmonize.scss | 59 - .../color-schemer/_interpolation.scss | 34 - .../color-schemer/color-schemer/_mix.scss | 40 - .../color-schemer/color-schemer/_mixins.scss | 29 - .../color-schemer/color-schemer/_ryb.scss | 76 - .../color-schemer/_tint-shade.scss | 9 - .../themes/grav/templates/ajax.json.twig | 5 - .../themes/grav/templates/cache.json.twig | 5 - .../themes/grav/templates/dashboard.html.twig | 151 - .../themes/grav/templates/denied.html.twig | 17 - .../grav/templates/email/base.html.twig | 194 - .../grav/templates/email/reset.html.twig | 12 - .../themes/grav/templates/error.html.twig | 12 - .../themes/grav/templates/error.json.twig | 1 - .../themes/grav/templates/forgot.html.twig | 17 - .../grav/templates/forms/field.html.twig | 72 - .../forms/fields/array/array.html.twig | 60 - .../fields/blueprint/blueprint.html.twig | 1 - .../forms/fields/column/column.html.twig | 10 - .../forms/fields/columns/columns.html.twig | 9 - .../fields/dateformat/dateformat.html.twig | 23 - .../forms/fields/fieldset/fieldset.html.twig | 67 - .../fields/frontmatter/frontmatter.html.twig | 46 - .../forms/fields/ignore/ignore.html.twig | 0 .../forms/fields/list/list.html.twig | 110 - .../forms/fields/markdown/markdown.html.twig | 7 - .../forms/fields/order/order.html.twig | 49 - .../fields/pagemedia/pagemedia.html.twig | 160 - .../forms/fields/pages/pages.html.twig | 51 - .../forms/fields/section/section.html.twig | 18 - .../fields/selectize/selectize.html.twig | 11 - .../templates/forms/fields/tab/tab.html.twig | 10 - .../forms/fields/tabs/tabs.html.twig | 23 - .../forms/fields/taxonomy/taxonomy.html.twig | 23 - .../fields/themeselect/themeselect.html.twig | 31 - .../forms/fields/toggle/toggle.html.twig | 43 - .../themes/grav/templates/info.html.twig | 23 - .../themes/grav/templates/installer.html.twig | 12 - .../themes/grav/templates/login.html.twig | 27 - .../themes/grav/templates/logout.html.twig | 16 - .../themes/grav/templates/logs.html.twig | 23 - .../themes/grav/templates/media.json.twig | 5 - .../grav/templates/pages-filter.json.twig | 5 - .../themes/grav/templates/pages.html.twig | 329 - .../grav/templates/partials/base.html.twig | 109 - .../partials/blueprints-new.html.twig | 17 - .../partials/blueprints-raw.html.twig | 13 - .../templates/partials/blueprints.html.twig | 21 - .../grav/templates/partials/header.html.twig | 11 - .../partials/javascript-config.html.twig | 9 - .../grav/templates/partials/login.html.twig | 15 - .../templates/partials/messages.html.twig | 3 - .../grav/templates/partials/nav.html.twig | 87 - .../partials/page-children.html.twig | 11 - .../templates/partials/page-move.html.twig | 17 - .../templates/partials/plugin-data.html.twig | 63 - .../partials/plugins-details.html.twig | 44 - .../templates/partials/plugins-list.html.twig | 42 - .../grav/templates/partials/theme.html.twig | 13 - .../partials/themes-details.html.twig | 116 - .../templates/partials/themes-list.html.twig | 66 - .../grav/templates/partials/toolbar.html.twig | 15 - .../partials/users-details.html.twig | 19 - .../templates/partials/users-list.html.twig | 6 - .../themes/grav/templates/plugins.html.twig | 61 - .../themes/grav/templates/reset.html.twig | 19 - .../themes/grav/templates/site.html.twig | 25 - .../grav/templates/statistics.html.twig | 14 - .../themes/grav/templates/system.html.twig | 25 - .../themes/grav/templates/themes.html.twig | 60 - .../themes/grav/templates/update.json.twig | 5 - .../themes/grav/templates/users.html.twig | 37 - src/user/plugins/admin/themes/grav/theme.yaml | 0 .../plugins/admin/twig/AdminTwigExtension.php | 54 - src/user/plugins/email/CHANGELOG.md | 17 - src/user/plugins/email/LICENSE | 21 - src/user/plugins/email/README.md | 35 - src/user/plugins/email/blueprints.yaml | 93 - src/user/plugins/email/classes/email.php | 145 - src/user/plugins/email/composer.json | 5 - src/user/plugins/email/email.php | 92 - src/user/plugins/email/email.yaml | 13 - src/user/plugins/email/vendor/autoload.php | 7 - .../email/vendor/composer/ClassLoader.php | 379 - .../vendor/composer/autoload_classmap.php | 9 - .../email/vendor/composer/autoload_files.php | 10 - .../vendor/composer/autoload_namespaces.php | 9 - .../email/vendor/composer/autoload_psr4.php | 9 - .../email/vendor/composer/autoload_real.php | 55 - .../email/vendor/composer/installed.json | 55 - .../vendor/swiftmailer/swiftmailer/CHANGES | 149 - .../vendor/swiftmailer/swiftmailer/LICENSE | 19 - .../vendor/swiftmailer/swiftmailer/README | 16 - .../vendor/swiftmailer/swiftmailer/VERSION | 1 - .../swiftmailer/lib/classes/Swift.php | 81 - .../lib/classes/Swift/Attachment.php | 73 - .../AbstractFilterableInputStream.php | 183 - .../Swift/ByteStream/ArrayByteStream.php | 186 - .../Swift/ByteStream/FileByteStream.php | 225 - .../ByteStream/TemporaryFileByteStream.php | 44 - .../lib/classes/Swift/CharacterReader.php | 69 - .../GenericFixedWidthReader.php | 99 - .../Swift/CharacterReader/UsAsciiReader.php | 85 - .../Swift/CharacterReader/Utf8Reader.php | 181 - .../classes/Swift/CharacterReaderFactory.php | 28 - .../SimpleCharacterReaderFactory.php | 126 - .../lib/classes/Swift/CharacterStream.php | 91 - .../CharacterStream/ArrayCharacterStream.php | 296 - .../CharacterStream/NgCharacterStream.php | 277 - .../lib/classes/Swift/ConfigurableSpool.php | 64 - .../lib/classes/Swift/DependencyContainer.php | 373 - .../lib/classes/Swift/DependencyException.php | 28 - .../lib/classes/Swift/EmbeddedFile.php | 71 - .../swiftmailer/lib/classes/Swift/Encoder.php | 29 - .../classes/Swift/Encoder/Base64Encoder.php | 60 - .../lib/classes/Swift/Encoder/QpEncoder.php | 286 - .../classes/Swift/Encoder/Rfc2231Encoder.php | 86 - .../lib/classes/Swift/Encoding.php | 66 - .../lib/classes/Swift/Events/CommandEvent.php | 67 - .../classes/Swift/Events/CommandListener.php | 26 - .../lib/classes/Swift/Events/Event.php | 40 - .../classes/Swift/Events/EventDispatcher.php | 85 - .../classes/Swift/Events/EventListener.php | 20 - .../lib/classes/Swift/Events/EventObject.php | 65 - .../classes/Swift/Events/ResponseEvent.php | 68 - .../classes/Swift/Events/ResponseListener.php | 26 - .../lib/classes/Swift/Events/SendEvent.php | 128 - .../lib/classes/Swift/Events/SendListener.php | 33 - .../Swift/Events/SimpleEventDispatcher.php | 161 - .../Swift/Events/TransportChangeEvent.php | 29 - .../Swift/Events/TransportChangeListener.php | 47 - .../Swift/Events/TransportExceptionEvent.php | 48 - .../Events/TransportExceptionListener.php | 26 - .../lib/classes/Swift/FailoverTransport.php | 47 - .../lib/classes/Swift/FileSpool.php | 209 - .../lib/classes/Swift/FileStream.php | 26 - .../lib/classes/Swift/Filterable.php | 33 - .../swiftmailer/lib/classes/Swift/Image.php | 63 - .../lib/classes/Swift/InputByteStream.php | 77 - .../lib/classes/Swift/IoException.php | 28 - .../lib/classes/Swift/KeyCache.php | 107 - .../classes/Swift/KeyCache/ArrayKeyCache.php | 210 - .../classes/Swift/KeyCache/DiskKeyCache.php | 328 - .../Swift/KeyCache/KeyCacheInputStream.php | 53 - .../classes/Swift/KeyCache/NullKeyCache.php | 117 - .../KeyCache/SimpleKeyCacheInputStream.php | 129 - .../classes/Swift/LoadBalancedTransport.php | 47 - .../lib/classes/Swift/MailTransport.php | 47 - .../swiftmailer/lib/classes/Swift/Mailer.php | 115 - .../Swift/Mailer/ArrayRecipientIterator.php | 57 - .../Swift/Mailer/RecipientIterator.php | 34 - .../lib/classes/Swift/MemorySpool.php | 84 - .../swiftmailer/lib/classes/Swift/Message.php | 273 - .../lib/classes/Swift/Mime/Attachment.php | 155 - .../classes/Swift/Mime/CharsetObserver.php | 26 - .../lib/classes/Swift/Mime/ContentEncoder.php | 36 - .../ContentEncoder/Base64ContentEncoder.php | 69 - .../ContentEncoder/NativeQpContentEncoder.php | 125 - .../ContentEncoder/PlainContentEncoder.php | 167 - .../Mime/ContentEncoder/QpContentEncoder.php | 125 - .../ContentEncoder/QpContentEncoderProxy.php | 90 - .../Mime/ContentEncoder/RawContentEncoder.php | 65 - .../lib/classes/Swift/Mime/EmbeddedFile.php | 47 - .../classes/Swift/Mime/EncodingObserver.php | 26 - .../lib/classes/Swift/Mime/Grammar.php | 178 - .../lib/classes/Swift/Mime/Header.php | 95 - .../lib/classes/Swift/Mime/HeaderEncoder.php | 26 - .../HeaderEncoder/Base64HeaderEncoder.php | 57 - .../Mime/HeaderEncoder/QpHeaderEncoder.php | 67 - .../lib/classes/Swift/Mime/HeaderFactory.php | 80 - .../lib/classes/Swift/Mime/HeaderSet.php | 171 - .../Swift/Mime/Headers/AbstractHeader.php | 504 -- .../classes/Swift/Mime/Headers/DateHeader.php | 127 - .../Mime/Headers/IdentificationHeader.php | 183 - .../Swift/Mime/Headers/MailboxHeader.php | 358 - .../Swift/Mime/Headers/OpenDKIMHeader.php | 139 - .../Mime/Headers/ParameterizedHeader.php | 265 - .../classes/Swift/Mime/Headers/PathHeader.php | 146 - .../Swift/Mime/Headers/UnstructuredHeader.php | 114 - .../lib/classes/Swift/Mime/Message.php | 225 - .../lib/classes/Swift/Mime/MimeEntity.php | 117 - .../lib/classes/Swift/Mime/MimePart.php | 218 - .../Swift/Mime/ParameterizedHeader.php | 36 - .../Swift/Mime/SimpleHeaderFactory.php | 192 - .../classes/Swift/Mime/SimpleHeaderSet.php | 387 - .../lib/classes/Swift/Mime/SimpleMessage.php | 656 -- .../classes/Swift/Mime/SimpleMimeEntity.php | 859 -- .../lib/classes/Swift/MimePart.php | 61 - .../lib/classes/Swift/NullTransport.php | 40 - .../lib/classes/Swift/OutputByteStream.php | 48 - .../classes/Swift/Plugins/AntiFloodPlugin.php | 143 - .../Swift/Plugins/BandwidthMonitorPlugin.php | 166 - .../Swift/Plugins/Decorator/Replacements.php | 33 - .../classes/Swift/Plugins/DecoratorPlugin.php | 211 - .../Swift/Plugins/ImpersonatePlugin.php | 70 - .../lib/classes/Swift/Plugins/Logger.php | 38 - .../classes/Swift/Plugins/LoggerPlugin.php | 143 - .../Swift/Plugins/Loggers/ArrayLogger.php | 74 - .../Swift/Plugins/Loggers/EchoLogger.php | 60 - .../classes/Swift/Plugins/MessageLogger.php | 77 - .../Swift/Plugins/Pop/Pop3Connection.php | 33 - .../Swift/Plugins/Pop/Pop3Exception.php | 29 - .../Swift/Plugins/PopBeforeSmtpPlugin.php | 278 - .../Swift/Plugins/RedirectingPlugin.php | 209 - .../lib/classes/Swift/Plugins/Reporter.php | 34 - .../classes/Swift/Plugins/ReporterPlugin.php | 75 - .../Swift/Plugins/Reporters/HitReporter.php | 61 - .../Swift/Plugins/Reporters/HtmlReporter.php | 41 - .../lib/classes/Swift/Plugins/Sleeper.php | 26 - .../classes/Swift/Plugins/ThrottlerPlugin.php | 204 - .../lib/classes/Swift/Plugins/Timer.php | 26 - .../lib/classes/Swift/Preferences.php | 104 - .../Swift/ReplacementFilterFactory.php | 28 - .../classes/Swift/RfcComplianceException.php | 28 - .../lib/classes/Swift/SendmailTransport.php | 47 - .../lib/classes/Swift/SignedMessage.php | 25 - .../swiftmailer/lib/classes/Swift/Signer.php | 22 - .../lib/classes/Swift/Signers/BodySigner.php | 35 - .../lib/classes/Swift/Signers/DKIMSigner.php | 686 -- .../classes/Swift/Signers/DomainKeySigner.php | 516 -- .../classes/Swift/Signers/HeaderSigner.php | 67 - .../classes/Swift/Signers/OpenDKIMSigner.php | 184 - .../lib/classes/Swift/Signers/SMimeSigner.php | 430 - .../lib/classes/Swift/SmtpTransport.php | 59 - .../swiftmailer/lib/classes/Swift/Spool.php | 54 - .../lib/classes/Swift/SpoolTransport.php | 48 - .../lib/classes/Swift/StreamFilter.php | 36 - .../ByteArrayReplacementFilter.php | 171 - .../StreamFilters/StringReplacementFilter.php | 67 - .../StringReplacementFilterFactory.php | 46 - .../lib/classes/Swift/SwiftException.php | 28 - .../lib/classes/Swift/Transport.php | 56 - .../Swift/Transport/AbstractSmtpTransport.php | 507 -- .../Esmtp/Auth/CramMd5Authenticator.php | 83 - .../Esmtp/Auth/LoginAuthenticator.php | 53 - .../Esmtp/Auth/NTLMAuthenticator.php | 701 -- .../Esmtp/Auth/PlainAuthenticator.php | 52 - .../Esmtp/Auth/XOAuth2Authenticator.php | 71 - .../Swift/Transport/Esmtp/AuthHandler.php | 268 - .../Swift/Transport/Esmtp/Authenticator.php | 37 - .../classes/Swift/Transport/EsmtpHandler.php | 88 - .../Swift/Transport/EsmtpTransport.php | 393 - .../Swift/Transport/FailoverTransport.php | 90 - .../lib/classes/Swift/Transport/IoBuffer.php | 69 - .../Swift/Transport/LoadBalancedTransport.php | 171 - .../classes/Swift/Transport/MailInvoker.php | 34 - .../classes/Swift/Transport/MailTransport.php | 231 - .../classes/Swift/Transport/NullTransport.php | 88 - .../Swift/Transport/SendmailTransport.php | 163 - .../Swift/Transport/SimpleMailInvoker.php | 41 - .../lib/classes/Swift/Transport/SmtpAgent.php | 38 - .../Swift/Transport/SpoolTransport.php | 118 - .../classes/Swift/Transport/StreamBuffer.php | 322 - .../lib/classes/Swift/TransportException.php | 29 - .../lib/classes/Swift/Validate.php | 43 - .../lib/dependency_maps/cache_deps.php | 23 - .../lib/dependency_maps/message_deps.php | 9 - .../lib/dependency_maps/mime_deps.php | 123 - .../lib/dependency_maps/transport_deps.php | 76 - .../swiftmailer/lib/mime_types.php | 1007 --- .../swiftmailer/lib/preferences.php | 35 - .../swiftmailer/lib/swift_init.php | 28 - .../swiftmailer/lib/swift_required.php | 30 - .../swiftmailer/lib/swift_required_pear.php | 30 - .../lib/swiftmailer_generate_mimes_config.php | 201 - src/user/plugins/error/CHANGELOG.md | 17 - src/user/plugins/error/LICENSE | 21 - src/user/plugins/error/README.md | 78 - src/user/plugins/error/assets/readme_1.png | Bin 41685 -> 0 bytes src/user/plugins/error/blueprints.yaml | 32 - src/user/plugins/error/error.php | 68 - src/user/plugins/error/error.yaml | 3 - src/user/plugins/error/pages/error.md | 8 - .../plugins/error/templates/error.html.twig | 3 - .../plugins/error/templates/error.json.twig | 1 - src/user/plugins/form/CHANGELOG.md | 55 - src/user/plugins/form/LICENSE | 21 - src/user/plugins/form/README.md | 31 - src/user/plugins/form/blueprints.yaml | 26 - src/user/plugins/form/classes/form.php | 148 - src/user/plugins/form/form.php | 276 - src/user/plugins/form/form.yaml | 1 - src/user/plugins/form/languages.yaml | 3 - .../form/templates/forms/data.html.twig | 1 - .../form/templates/forms/data.txt.twig | 1 - .../templates/forms/default/data.html.twig | 5 - .../templates/forms/default/data.txt.twig | 3 - .../templates/forms/default/form.html.twig | 18 - .../form/templates/forms/field.html.twig | 58 - .../forms/fields/captcha/captcha.html.twig | 27 - .../forms/fields/checkbox/checkbox.html.twig | 29 - .../forms/fields/checkbox/checkbox.yaml | 11 - .../fields/checkboxes/checkboxes.html.twig | 34 - .../forms/fields/date/date.html.twig | 8 - .../forms/fields/datetime/datetime.html.twig | 18 - .../forms/fields/display/display.html.twig | 11 - .../forms/fields/email/email.html.twig | 6 - .../forms/fields/hidden/hidden.html.twig | 3 - .../forms/fields/password/password.html.twig | 7 - .../forms/fields/radio/radio.html.twig | 21 - .../forms/fields/select/select.html.twig | 22 - .../forms/fields/spacer/spacer.html.twig | 13 - .../forms/fields/text/text.html.twig | 6 - .../forms/fields/textarea/textarea.html.twig | 25 - .../form/templates/forms/form.html.twig | 1 - src/user/plugins/login/CHANGELOG.md | 42 - src/user/plugins/login/LICENSE | 21 - src/user/plugins/login/README.md | 103 - src/user/plugins/login/blueprints.yaml | 51 - src/user/plugins/login/classes/controller.php | 217 - src/user/plugins/login/css/login.css | 23 - src/user/plugins/login/languages.yaml | 8 - src/user/plugins/login/login.php | 188 - src/user/plugins/login/login.yaml | 4 - src/user/plugins/login/pages/login.md | 23 - .../plugins/login/templates/login.html.twig | 5 - .../plugins/login/templates/login.json.twig | 1 - .../templates/partials/login-form.html.twig | 19 - .../templates/partials/login-status.html.twig | 5 - .../templates/partials/messages.html.twig | 3 - src/user/plugins/problems/CHANGELOG.md | 24 - src/user/plugins/problems/LICENSE | 21 - src/user/plugins/problems/README.md | 84 - src/user/plugins/problems/assets/readme_1.png | Bin 72908 -> 0 bytes src/user/plugins/problems/blueprints.yaml | 37 - src/user/plugins/problems/css/problems.css | 71 - src/user/plugins/problems/css/template.css | 762 -- src/user/plugins/problems/html/problems.html | 28 - src/user/plugins/problems/problems.php | 221 - src/user/plugins/problems/problems.yaml | 2 - src/user/themes/.gitkeep | 0 src/user/themes/antimatter/CHANGELOG.md | 220 - src/user/themes/antimatter/LICENSE | 21 - src/user/themes/antimatter/README.md | 136 - src/user/themes/antimatter/antimatter.php | 9 - src/user/themes/antimatter/antimatter.yaml | 10 - .../themes/antimatter/assets/readme_1.png | Bin 424075 -> 0 bytes src/user/themes/antimatter/blueprints.yaml | 27 - .../antimatter/blueprints/asset/file.yaml | 70 - .../themes/antimatter/blueprints/blog.yaml | 76 - .../themes/antimatter/blueprints/form.yaml | 2 - .../themes/antimatter/blueprints/item.yaml | 103 - .../blueprints/modular/features.yaml | 40 - .../blueprints/modular/showcase.yaml | 45 - .../antimatter/blueprints/modular/text.yaml | 34 - src/user/themes/antimatter/composer.json | 28 - .../antimatter/css-compiled/nucleus.css | 629 -- .../antimatter/css-compiled/nucleus.css.map | 7 - .../antimatter/css-compiled/particles.css | 98 - .../antimatter/css-compiled/particles.css.map | 7 - .../antimatter/css-compiled/template.css | 868 -- .../antimatter/css-compiled/template.css.map | 7 - .../antimatter/css/font-awesome.min.css | 4 - .../themes/antimatter/css/nucleus-ie10.css | 24 - .../themes/antimatter/css/nucleus-ie9.css | 62 - src/user/themes/antimatter/css/prism.css | 121 - .../antimatter/css/pure-0.5.0/grids-min.css | 15 - .../themes/antimatter/css/slidebars.min.css | 2 - .../themes/antimatter/fonts/FontAwesome.otf | Bin 62856 -> 0 bytes .../antimatter/fonts/fontawesome-webfont.eot | Bin 72449 -> 0 bytes .../antimatter/fonts/fontawesome-webfont.svg | 504 -- .../antimatter/fonts/fontawesome-webfont.ttf | Bin 141564 -> 0 bytes .../antimatter/fonts/fontawesome-webfont.woff | Bin 83760 -> 0 bytes src/user/themes/antimatter/images/favicon.png | Bin 1177 -> 0 bytes src/user/themes/antimatter/images/logo.png | Bin 8714 -> 0 bytes src/user/themes/antimatter/js/antimatter.js | 37 - .../antimatter/js/html5shiv-printshiv.min.js | 4 - .../antimatter/js/modernizr.custom.71422.js | 4 - .../themes/antimatter/js/singlePageNav.min.js | 8 - .../themes/antimatter/js/slidebars.min.js | 2 - src/user/themes/antimatter/languages.yaml | 2 - src/user/themes/antimatter/screenshot.jpg | Bin 162937 -> 0 bytes src/user/themes/antimatter/scss.sh | 2 - .../scss/configuration/nucleus/_base.scss | 14 - .../configuration/nucleus/_breakpoints.scss | 16 - .../scss/configuration/nucleus/_core.scss | 2 - .../scss/configuration/nucleus/_layout.scss | 8 - .../scss/configuration/nucleus/_nav.scss | 3 - .../configuration/nucleus/_typography.scss | 14 - .../scss/configuration/template/_base.scss | 11 - .../scss/configuration/template/_bullets.scss | 5 - .../scss/configuration/template/_colors.scss | 75 - .../configuration/template/_typography.scss | 7 - .../configuration/template/_variables.scss | 13 - src/user/themes/antimatter/scss/nucleus.scss | 27 - .../themes/antimatter/scss/nucleus/_core.scss | 217 - .../themes/antimatter/scss/nucleus/_flex.scss | 197 - .../antimatter/scss/nucleus/_forms.scss | 63 - .../antimatter/scss/nucleus/_typography.scss | 86 - .../scss/nucleus/functions/_base.scss | 2 - .../scss/nucleus/functions/_direction.scss | 37 - .../scss/nucleus/functions/_range.scss | 13 - .../antimatter/scss/nucleus/mixins/_base.scss | 2 - .../scss/nucleus/mixins/_breakpoints.scss | 30 - .../scss/nucleus/mixins/_utilities.scss | 30 - .../scss/nucleus/particles/_align-text.scss | 46 - .../scss/nucleus/particles/_visibility.scss | 0 .../themes/antimatter/scss/particles.scss | 24 - src/user/themes/antimatter/scss/template.scss | 67 - .../antimatter/scss/template/_blog.scss | 171 - .../antimatter/scss/template/_bullets.scss | 60 - .../antimatter/scss/template/_buttons.scss | 9 - .../antimatter/scss/template/_core.scss | 58 - .../antimatter/scss/template/_custom.scss | 15 - .../antimatter/scss/template/_errors.scss | 17 - .../antimatter/scss/template/_extensions.scss | 22 - .../antimatter/scss/template/_fonts.scss | 3 - .../antimatter/scss/template/_footer.scss | 42 - .../antimatter/scss/template/_forms.scss | 43 - .../antimatter/scss/template/_header.scss | 231 - .../antimatter/scss/template/_panel.scss | 74 - .../scss/template/_simplesearch.scss | 53 - .../antimatter/scss/template/_tables.scss | 15 - .../antimatter/scss/template/_typography.scss | 236 - .../scss/template/modular/_all.scss | 9 - .../scss/template/modular/_features.scss | 99 - .../scss/template/modular/_showcase.scss | 60 - .../scss/template/modular/_text.scss | 35 - .../scss/template/modules/_base.scss | 2 - .../scss/template/modules/_buttons.scss | 24 - .../bourbon/_bourbon-deprecated-upcoming.scss | 8 - .../scss/vendor/bourbon/_bourbon.scss | 77 - .../scss/vendor/bourbon/addons/_button.scss | 374 - .../scss/vendor/bourbon/addons/_clearfix.scss | 23 - .../bourbon/addons/_directional-values.scss | 111 - .../scss/vendor/bourbon/addons/_ellipsis.scss | 7 - .../vendor/bourbon/addons/_font-family.scss | 5 - .../vendor/bourbon/addons/_hide-text.scss | 10 - .../bourbon/addons/_html5-input-types.scss | 86 - .../scss/vendor/bourbon/addons/_position.scss | 32 - .../scss/vendor/bourbon/addons/_prefixer.scss | 45 - .../scss/vendor/bourbon/addons/_rem.scss | 33 - .../vendor/bourbon/addons/_retina-image.scss | 31 - .../scss/vendor/bourbon/addons/_size.scss | 16 - .../bourbon/addons/_timing-functions.scss | 32 - .../scss/vendor/bourbon/addons/_triangle.scss | 83 - .../vendor/bourbon/addons/_word-wrap.scss | 8 - .../scss/vendor/bourbon/css3/_animation.scss | 52 - .../scss/vendor/bourbon/css3/_appearance.scss | 3 - .../bourbon/css3/_backface-visibility.scss | 6 - .../bourbon/css3/_background-image.scss | 42 - .../scss/vendor/bourbon/css3/_background.scss | 55 - .../vendor/bourbon/css3/_border-image.scss | 59 - .../vendor/bourbon/css3/_border-radius.scss | 22 - .../scss/vendor/bourbon/css3/_box-sizing.scss | 4 - .../scss/vendor/bourbon/css3/_calc.scss | 4 - .../scss/vendor/bourbon/css3/_columns.scss | 47 - .../scss/vendor/bourbon/css3/_filter.scss | 5 - .../scss/vendor/bourbon/css3/_flex-box.scss | 321 - .../scss/vendor/bourbon/css3/_font-face.scss | 23 - .../bourbon/css3/_font-feature-settings.scss | 10 - .../bourbon/css3/_hidpi-media-query.scss | 10 - .../scss/vendor/bourbon/css3/_hyphens.scss | 4 - .../vendor/bourbon/css3/_image-rendering.scss | 14 - .../scss/vendor/bourbon/css3/_keyframes.scss | 35 - .../vendor/bourbon/css3/_linear-gradient.scss | 38 - .../vendor/bourbon/css3/_perspective.scss | 8 - .../vendor/bourbon/css3/_placeholder.scss | 8 - .../vendor/bourbon/css3/_radial-gradient.scss | 39 - .../scss/vendor/bourbon/css3/_transform.scss | 15 - .../scss/vendor/bourbon/css3/_transition.scss | 77 - .../vendor/bourbon/css3/_user-select.scss | 3 - .../vendor/bourbon/functions/_assign.scss | 11 - .../bourbon/functions/_color-lightness.scss | 13 - .../vendor/bourbon/functions/_flex-grid.scss | 39 - .../bourbon/functions/_golden-ratio.scss | 3 - .../vendor/bourbon/functions/_grid-width.scss | 13 - .../bourbon/functions/_modular-scale.scss | 66 - .../vendor/bourbon/functions/_px-to-em.scss | 13 - .../vendor/bourbon/functions/_px-to-rem.scss | 15 - .../bourbon/functions/_strip-units.scss | 5 - .../vendor/bourbon/functions/_tint-shade.scss | 9 - .../functions/_transition-property-name.scss | 22 - .../vendor/bourbon/functions/_unpack.scss | 17 - .../bourbon/helpers/_convert-units.scss | 15 - .../helpers/_gradient-positions-parser.scss | 13 - .../scss/vendor/bourbon/helpers/_is-num.scss | 8 - .../bourbon/helpers/_linear-angle-parser.scss | 25 - .../helpers/_linear-gradient-parser.scss | 41 - .../helpers/_linear-positions-parser.scss | 61 - .../helpers/_linear-side-corner-parser.scss | 31 - .../bourbon/helpers/_radial-arg-parser.scss | 69 - .../helpers/_radial-gradient-parser.scss | 50 - .../helpers/_radial-positions-parser.scss | 18 - .../bourbon/helpers/_render-gradients.scss | 26 - .../bourbon/helpers/_shape-size-stripper.scss | 10 - .../vendor/bourbon/helpers/_str-to-num.scss | 50 - .../vendor/bourbon/settings/_prefixer.scss | 6 - .../vendor/bourbon/settings/_px-to-em.scss | 1 - .../vendor/color-schemer/_color-schemer.scss | 31 - .../color-schemer/color-schemer/_cmyk.scss | 14 - .../color-schemer/_color-adjustments.scss | 30 - .../color-schemer/_color-schemer.scss | 208 - .../color-schemer/_colorblind.scss | 29 - .../color-schemer/_comparison.scss | 15 - .../color-schemer/_equalize.scss | 5 - .../color-schemer/_harmonize.scss | 59 - .../color-schemer/_interpolation.scss | 34 - .../color-schemer/color-schemer/_mix.scss | 40 - .../color-schemer/color-schemer/_mixins.scss | 29 - .../color-schemer/color-schemer/_ryb.scss | 76 - .../color-schemer/_tint-shade.scss | 9 - .../antimatter/templates/blog.html.twig | 38 - .../antimatter/templates/default.html.twig | 5 - .../antimatter/templates/error.html.twig | 12 - .../antimatter/templates/form.html.twig | 8 - .../antimatter/templates/formdata.html.twig | 12 - .../antimatter/templates/forms/data.html.twig | 1 - .../antimatter/templates/forms/data.txt.twig | 1 - .../antimatter/templates/forms/form.html.twig | 1 - .../antimatter/templates/item.html.twig | 18 - .../templates/macros/macros.html.twig | 3 - .../antimatter/templates/modular.html.twig | 56 - .../templates/modular/features.html.twig | 22 - .../templates/modular/showcase.html.twig | 13 - .../templates/modular/text.html.twig | 7 - .../templates/partials/base.html.twig | 98 - .../templates/partials/blog_item.html.twig | 78 - .../templates/partials/metadata.html.twig | 3 - .../templates/partials/navigation.html.twig | 44 - .../templates/partials/sidebar.html.twig | 42 - .../antimatter/templates/snipcart.html.twig | 20 - src/user/themes/antimatter/thumbnail.jpg | Bin 24301 -> 0 bytes src/vendor/autoload.php | 7 - src/vendor/composer/ClassLoader.php | 413 - src/vendor/composer/LICENSE | 21 - src/vendor/composer/autoload_classmap.php | 786 -- src/vendor/composer/autoload_files.php | 13 - src/vendor/composer/autoload_namespaces.php | 19 - src/vendor/composer/autoload_psr4.php | 23 - src/vendor/composer/autoload_real.php | 55 - src/vendor/composer/installed.json | 1030 --- src/vendor/doctrine/cache/LICENSE | 19 - src/vendor/doctrine/cache/README.md | 14 - src/vendor/doctrine/cache/UPGRADE.md | 16 - .../lib/Doctrine/Common/Cache/ApcCache.php | 106 - .../lib/Doctrine/Common/Cache/ArrayCache.php | 94 - .../cache/lib/Doctrine/Common/Cache/Cache.php | 112 - .../Doctrine/Common/Cache/CacheProvider.php | 277 - .../lib/Doctrine/Common/Cache/ChainCache.php | 147 - .../Doctrine/Common/Cache/ClearableCache.php | 40 - .../Doctrine/Common/Cache/CouchbaseCache.php | 121 - .../lib/Doctrine/Common/Cache/FileCache.php | 237 - .../Doctrine/Common/Cache/FilesystemCache.php | 111 - .../Doctrine/Common/Cache/FlushableCache.php | 37 - .../Doctrine/Common/Cache/MemcacheCache.php | 125 - .../Doctrine/Common/Cache/MemcachedCache.php | 132 - .../Doctrine/Common/Cache/MongoDBCache.php | 191 - .../Doctrine/Common/Cache/MultiGetCache.php | 39 - .../Doctrine/Common/Cache/PhpFileCache.php | 120 - .../lib/Doctrine/Common/Cache/PredisCache.php | 107 - .../lib/Doctrine/Common/Cache/RedisCache.php | 142 - .../lib/Doctrine/Common/Cache/RiakCache.php | 250 - .../Doctrine/Common/Cache/SQLite3Cache.php | 219 - .../lib/Doctrine/Common/Cache/Version.php | 25 - .../lib/Doctrine/Common/Cache/VoidCache.php | 78 - .../Doctrine/Common/Cache/WinCacheCache.php | 91 - .../lib/Doctrine/Common/Cache/XcacheCache.php | 112 - .../Doctrine/Common/Cache/ZendDataCache.php | 83 - .../donatj/phpuseragentparser/CONTRIBUTING.md | 18 - .../donatj/phpuseragentparser/LICENSE.md | 22 - .../donatj/phpuseragentparser/README.md | 114 - .../Source/UserAgentParser.php | 167 - src/vendor/erusev/parsedown-extra/LICENSE.txt | 20 - .../erusev/parsedown-extra/ParsedownExtra.php | 526 -- src/vendor/erusev/parsedown-extra/README.md | 27 - src/vendor/erusev/parsedown/LICENSE.txt | 20 - src/vendor/erusev/parsedown/Parsedown.php | 1528 ---- src/vendor/erusev/parsedown/README.md | 57 - src/vendor/filp/whoops/.gitattributes | 10 - src/vendor/filp/whoops/CONTRIBUTING.md | 11 - src/vendor/filp/whoops/LICENSE.md | 19 - src/vendor/filp/whoops/README.md | 84 - .../src/Whoops/Exception/ErrorException.php | 17 - .../whoops/src/Whoops/Exception/Formatter.php | 74 - .../whoops/src/Whoops/Exception/Frame.php | 269 - .../src/Whoops/Exception/FrameCollection.php | 191 - .../whoops/src/Whoops/Exception/Inspector.php | 209 - .../src/Whoops/Handler/CallbackHandler.php | 52 - .../whoops/src/Whoops/Handler/Handler.php | 89 - .../src/Whoops/Handler/HandlerInterface.php | 37 - .../Whoops/Handler/JsonResponseHandler.php | 91 - .../src/Whoops/Handler/PlainTextHandler.php | 331 - .../src/Whoops/Handler/PrettyPageHandler.php | 529 -- .../Whoops/Handler/SoapResponseHandler.php | 49 - .../src/Whoops/Handler/XmlResponseHandler.php | 99 - .../Phalcon/WhoopsServiceProvider.php | 78 - .../Provider/Silex/WhoopsServiceProvider.php | 111 - .../src/Whoops/Resources/css/whoops.base.css | 428 - .../src/Whoops/Resources/js/whoops.base.js | 86 - .../src/Whoops/Resources/js/zepto.min.js | 2 - .../Resources/views/env_details.html.php | 40 - .../Resources/views/frame_code.html.php | 52 - .../Resources/views/frame_list.html.php | 17 - .../Whoops/Resources/views/header.html.php | 34 - .../Whoops/Resources/views/layout.html.php | 37 - src/vendor/filp/whoops/src/Whoops/Run.php | 408 - .../filp/whoops/src/Whoops/Util/Misc.php | 44 - .../whoops/src/Whoops/Util/TemplateHelper.php | 154 - .../src/deprecated/Zend/ExceptionStrategy.php | 63 - .../whoops/src/deprecated/Zend/Module.php | 107 - .../deprecated/Zend/RouteNotFoundStrategy.php | 67 - .../deprecated/Zend/module.config.example.php | 20 - .../gregwar/cache/Gregwar/Cache/Cache.php | 320 - .../cache/Gregwar/Cache/GarbageCollect.php | 86 - .../gregwar/cache/Gregwar/Cache/LICENSE | 19 - .../gregwar/cache/Gregwar/Cache/README.md | 166 - .../gregwar/cache/Gregwar/Cache/autoload.php | 16 - .../image/Gregwar/Image/Adapter/Adapter.php | 58 - .../Image/Adapter/AdapterInterface.php | 388 - .../image/Gregwar/Image/Adapter/Common.php | 351 - .../image/Gregwar/Image/Adapter/GD.php | 567 -- .../image/Gregwar/Image/Adapter/Imagick.php | 389 - .../Image/Exceptions/GenerationError.php | 16 - .../image/Gregwar/Image/GarbageCollect.php | 83 - .../gregwar/image/Gregwar/Image/Image.php | 752 -- .../image/Gregwar/Image/ImageColor.php | 93 - .../gregwar/image/Gregwar/Image/LICENSE | 19 - .../gregwar/image/Gregwar/Image/README.md | 275 - .../image/Gregwar/Image/Source/Create.php | 38 - .../image/Gregwar/Image/Source/Data.php | 26 - .../image/Gregwar/Image/Source/File.php | 63 - .../image/Gregwar/Image/Source/Resource.php | 21 - .../image/Gregwar/Image/Source/Source.php | 34 - .../gregwar/image/Gregwar/Image/autoload.php | 21 - .../image/Gregwar/Image/images/error.jpg | Bin 1108 -> 0 bytes .../ircmaxell/password-compat/.gitattributes | 8 - .../ircmaxell/password-compat/LICENSE.md | 7 - .../ircmaxell/password-compat/README.md | 76 - .../password-compat/lib/password.php | 314 - src/vendor/maximebf/debugbar/.gitattributes | 12 - src/vendor/maximebf/debugbar/CHANGELOG.md | 95 - src/vendor/maximebf/debugbar/CONTRIBUTING.md | 23 - src/vendor/maximebf/debugbar/LICENSE | 19 - src/vendor/maximebf/debugbar/README.md | 100 - .../DebugBar/Bridge/CacheCacheCollector.php | 62 - .../src/DebugBar/Bridge/DoctrineCollector.php | 98 - .../src/DebugBar/Bridge/MonologCollector.php | 103 - .../src/DebugBar/Bridge/Propel2Collector.php | 307 - .../src/DebugBar/Bridge/PropelCollector.php | 253 - .../src/DebugBar/Bridge/SlimCollector.php | 66 - .../Bridge/SwiftMailer/SwiftLogCollector.php | 44 - .../Bridge/SwiftMailer/SwiftMailCollector.php | 92 - .../Bridge/Twig/TraceableTwigEnvironment.php | 417 - .../Bridge/Twig/TraceableTwigTemplate.php | 131 - .../DebugBar/Bridge/Twig/TwigCollector.php | 87 - .../DataCollector/AggregatedCollector.php | 166 - .../DebugBar/DataCollector/AssetProvider.php | 28 - .../DataCollector/ConfigCollector.php | 71 - .../DebugBar/DataCollector/DataCollector.php | 90 - .../DataCollector/DataCollectorInterface.php | 31 - .../DataCollector/ExceptionsCollector.php | 111 - .../DataCollector/LocalizationCollector.php | 64 - .../DataCollector/MemoryCollector.php | 63 - .../MessagesAggregateInterface.php | 21 - .../DataCollector/MessagesCollector.php | 152 - .../DataCollector/PDO/PDOCollector.php | 182 - .../DataCollector/PDO/TraceablePDO.php | 196 - .../PDO/TraceablePDOStatement.php | 74 - .../DataCollector/PDO/TracedStatement.php | 240 - .../DataCollector/PhpInfoCollector.php | 29 - .../src/DebugBar/DataCollector/Renderable.php | 25 - .../DataCollector/RequestDataCollector.php | 48 - .../DataCollector/TimeDataCollector.php | 228 - .../DebugBar/DataFormatter/DataFormatter.php | 61 - .../DataFormatter/DataFormatterInterface.php | 42 - .../debugbar/src/DebugBar/DebugBar.php | 468 -- .../src/DebugBar/DebugBarException.php | 16 - .../src/DebugBar/HttpDriverInterface.php | 63 - .../src/DebugBar/JavascriptRenderer.php | 960 --- .../debugbar/src/DebugBar/OpenHandler.php | 107 - .../debugbar/src/DebugBar/PhpHttpDriver.php | 49 - .../src/DebugBar/RequestIdGenerator.php | 22 - .../DebugBar/RequestIdGeneratorInterface.php | 21 - .../src/DebugBar/Resources/debugbar.css | 290 - .../src/DebugBar/Resources/debugbar.js | 1129 --- .../src/DebugBar/Resources/openhandler.css | 69 - .../src/DebugBar/Resources/openhandler.js | 202 - .../font-awesome/css/font-awesome.min.css | 4 - .../vendor/font-awesome/fonts/FontAwesome.otf | Bin 93888 -> 0 bytes .../fonts/fontawesome-webfont.eot | Bin 60767 -> 0 bytes .../fonts/fontawesome-webfont.svg | 565 -- .../fonts/fontawesome-webfont.ttf | Bin 122092 -> 0 bytes .../fonts/fontawesome-webfont.woff | Bin 71508 -> 0 bytes .../fonts/fontawesome-webfont.woff2 | Bin 56780 -> 0 bytes .../vendor/highlightjs/highlight.pack.js | 1 - .../vendor/highlightjs/styles/github.css | 125 - .../vendor/jquery/dist/jquery.min.js | 4 - .../src/DebugBar/Resources/widgets.css | 208 - .../src/DebugBar/Resources/widgets.js | 456 -- .../Resources/widgets/mails/widget.css | 12 - .../Resources/widgets/mails/widget.js | 40 - .../Resources/widgets/sqlqueries/widget.css | 112 - .../Resources/widgets/sqlqueries/widget.js | 130 - .../Resources/widgets/templates/widget.css | 60 - .../Resources/widgets/templates/widget.js | 69 - .../src/DebugBar/StandardDebugBar.php | 34 - .../src/DebugBar/Storage/FileStorage.php | 128 - .../src/DebugBar/Storage/MemcachedStorage.php | 111 - .../src/DebugBar/Storage/PdoStorage.php | 137 - .../src/DebugBar/Storage/RedisStorage.php | 87 - .../src/DebugBar/Storage/StorageInterface.php | 45 - .../DebugBar/Storage/pdo_storage_schema.sql | 16 - src/vendor/monolog/monolog/.gitattributes | 3 - src/vendor/monolog/monolog/.php_cs | 15 - src/vendor/monolog/monolog/CHANGELOG.mdown | 265 - src/vendor/monolog/monolog/LICENSE | 19 - src/vendor/monolog/monolog/README.mdown | 95 - .../monolog/src/Monolog/ErrorHandler.php | 224 - .../Monolog/Formatter/ChromePHPFormatter.php | 79 - .../Monolog/Formatter/ElasticaFormatter.php | 87 - .../Monolog/Formatter/FlowdockFormatter.php | 116 - .../Monolog/Formatter/FormatterInterface.php | 36 - .../Formatter/GelfMessageFormatter.php | 111 - .../src/Monolog/Formatter/HtmlFormatter.php | 140 - .../src/Monolog/Formatter/JsonFormatter.php | 116 - .../src/Monolog/Formatter/LineFormatter.php | 159 - .../src/Monolog/Formatter/LogglyFormatter.php | 47 - .../Monolog/Formatter/LogstashFormatter.php | 166 - .../Monolog/Formatter/MongoDBFormatter.php | 105 - .../Monolog/Formatter/NormalizerFormatter.php | 193 - .../src/Monolog/Formatter/ScalarFormatter.php | 48 - .../Monolog/Formatter/WildfireFormatter.php | 113 - .../src/Monolog/Handler/AbstractHandler.php | 184 - .../Handler/AbstractProcessingHandler.php | 66 - .../Monolog/Handler/AbstractSyslogHandler.php | 92 - .../src/Monolog/Handler/AmqpHandler.php | 98 - .../Monolog/Handler/BrowserConsoleHandler.php | 192 - .../src/Monolog/Handler/BufferHandler.php | 117 - .../src/Monolog/Handler/ChromePHPHandler.php | 204 - .../src/Monolog/Handler/CouchDBHandler.php | 72 - .../src/Monolog/Handler/CubeHandler.php | 149 - .../monolog/src/Monolog/Handler/Curl/Util.php | 57 - .../Handler/DoctrineCouchDBHandler.php | 45 - .../src/Monolog/Handler/DynamoDbHandler.php | 89 - .../Monolog/Handler/ElasticSearchHandler.php | 128 - .../src/Monolog/Handler/ErrorLogHandler.php | 82 - .../src/Monolog/Handler/FilterHandler.php | 140 - .../ActivationStrategyInterface.php | 28 - .../ChannelLevelActivationStrategy.php | 59 - .../ErrorLevelActivationStrategy.php | 34 - .../Monolog/Handler/FingersCrossedHandler.php | 153 - .../src/Monolog/Handler/FirePHPHandler.php | 195 - .../src/Monolog/Handler/FleepHookHandler.php | 126 - .../src/Monolog/Handler/FlowdockHandler.php | 127 - .../src/Monolog/Handler/GelfHandler.php | 73 - .../src/Monolog/Handler/GroupHandler.php | 80 - .../src/Monolog/Handler/HandlerInterface.php | 90 - .../src/Monolog/Handler/HipChatHandler.php | 337 - .../src/Monolog/Handler/IFTTTHandler.php | 69 - .../src/Monolog/Handler/LogEntriesHandler.php | 55 - .../src/Monolog/Handler/LogglyHandler.php | 102 - .../src/Monolog/Handler/MailHandler.php | 55 - .../src/Monolog/Handler/MandrillHandler.php | 68 - .../Handler/MissingExtensionException.php | 21 - .../src/Monolog/Handler/MongoDBHandler.php | 55 - .../Monolog/Handler/NativeMailerHandler.php | 176 - .../src/Monolog/Handler/NewRelicHandler.php | 198 - .../src/Monolog/Handler/NullHandler.php | 45 - .../src/Monolog/Handler/PHPConsoleHandler.php | 242 - .../src/Monolog/Handler/PsrHandler.php | 56 - .../src/Monolog/Handler/PushoverHandler.php | 185 - .../src/Monolog/Handler/RavenHandler.php | 207 - .../src/Monolog/Handler/RedisHandler.php | 97 - .../src/Monolog/Handler/RollbarHandler.php | 95 - .../Monolog/Handler/RotatingFileHandler.php | 155 - .../src/Monolog/Handler/SamplingHandler.php | 82 - .../src/Monolog/Handler/SlackHandler.php | 284 - .../src/Monolog/Handler/SocketHandler.php | 284 - .../src/Monolog/Handler/StreamHandler.php | 146 - .../Monolog/Handler/SwiftMailerHandler.php | 88 - .../src/Monolog/Handler/SyslogHandler.php | 67 - .../Monolog/Handler/SyslogUdp/UdpSocket.php | 56 - .../src/Monolog/Handler/SyslogUdpHandler.php | 82 - .../src/Monolog/Handler/TestHandler.php | 148 - .../Handler/WhatFailureGroupHandler.php | 57 - .../Monolog/Handler/ZendMonitorHandler.php | 95 - .../monolog/monolog/src/Monolog/Logger.php | 649 -- .../src/Monolog/Processor/GitProcessor.php | 64 - .../Processor/IntrospectionProcessor.php | 102 - .../Processor/MemoryPeakUsageProcessor.php | 35 - .../src/Monolog/Processor/MemoryProcessor.php | 63 - .../Processor/MemoryUsageProcessor.php | 35 - .../Monolog/Processor/ProcessIdProcessor.php | 31 - .../Processor/PsrLogMessageProcessor.php | 48 - .../src/Monolog/Processor/TagProcessor.php | 44 - .../src/Monolog/Processor/UidProcessor.php | 46 - .../src/Monolog/Processor/WebProcessor.php | 105 - .../monolog/monolog/src/Monolog/Registry.php | 134 - src/vendor/mrclay/minify/.gitattributes | 5 - src/vendor/mrclay/minify/HISTORY.txt | 141 - src/vendor/mrclay/minify/LICENSE.txt | 26 - src/vendor/mrclay/minify/MIN.txt | 181 - src/vendor/mrclay/minify/README.txt | 68 - src/vendor/mrclay/minify/UPGRADING.txt | 28 - src/vendor/mrclay/minify/min/lib/CSSmin.php | 777 -- .../mrclay/minify/min/lib/DooDigestAuth.php | 121 - src/vendor/mrclay/minify/min/lib/FirePHP.php | 1370 ---- .../minify/min/lib/HTTP/ConditionalGet.php | 366 - .../mrclay/minify/min/lib/HTTP/Encoder.php | 335 - src/vendor/mrclay/minify/min/lib/JSMin.php | 449 -- .../mrclay/minify/min/lib/JSMinPlus.php | 2086 ----- src/vendor/mrclay/minify/min/lib/Minify.php | 608 -- .../mrclay/minify/min/lib/Minify/Build.php | 101 - .../mrclay/minify/min/lib/Minify/CSS.php | 99 - .../minify/min/lib/Minify/CSS/Compressor.php | 249 - .../minify/min/lib/Minify/CSS/UriRewriter.php | 307 - .../mrclay/minify/min/lib/Minify/CSSmin.php | 85 - .../minify/min/lib/Minify/Cache/APC.php | 133 - .../minify/min/lib/Minify/Cache/File.php | 197 - .../minify/min/lib/Minify/Cache/Memcache.php | 140 - .../minify/min/lib/Minify/Cache/WinCache.php | 130 - .../minify/min/lib/Minify/Cache/XCache.php | 126 - .../min/lib/Minify/Cache/ZendPlatform.php | 142 - .../minify/min/lib/Minify/ClosureCompiler.php | 139 - .../min/lib/Minify/CommentPreserver.php | 89 - .../minify/min/lib/Minify/Controller/Base.php | 222 - .../min/lib/Minify/Controller/Files.php | 76 - .../min/lib/Minify/Controller/Groups.php | 91 - .../min/lib/Minify/Controller/MinApp.php | 237 - .../minify/min/lib/Minify/Controller/Page.php | 68 - .../min/lib/Minify/Controller/Version1.php | 119 - .../minify/min/lib/Minify/DebugDetector.php | 26 - .../mrclay/minify/min/lib/Minify/HTML.php | 255 - .../minify/min/lib/Minify/HTML/Helper.php | 225 - .../minify/min/lib/Minify/ImportProcessor.php | 216 - .../min/lib/Minify/JS/ClosureCompiler.php | 230 - .../mrclay/minify/min/lib/Minify/Lines.php | 143 - .../mrclay/minify/min/lib/Minify/Loader.php | 28 - .../mrclay/minify/min/lib/Minify/Logger.php | 47 - .../mrclay/minify/min/lib/Minify/Packer.php | 37 - .../mrclay/minify/min/lib/Minify/Source.php | 187 - .../min/lib/Minify/YUI/CssCompressor.java | 382 - .../min/lib/Minify/YUI/CssCompressor.php | 171 - .../minify/min/lib/Minify/YUICompressor.php | 156 - .../mrclay/minify/min/lib/MrClay/Cli.php | 384 - .../mrclay/minify/min/lib/MrClay/Cli/Arg.php | 183 - src/vendor/pimple/pimple/CHANGELOG | 35 - src/vendor/pimple/pimple/LICENSE | 19 - src/vendor/pimple/pimple/README.rst | 201 - .../pimple/pimple/src/Pimple/Container.php | 282 - .../src/Pimple/ServiceProviderInterface.php | 46 - src/vendor/psr/log/LICENSE | 19 - src/vendor/psr/log/Psr/Log/AbstractLogger.php | 120 - .../log/Psr/Log/InvalidArgumentException.php | 7 - src/vendor/psr/log/Psr/Log/LogLevel.php | 18 - .../psr/log/Psr/Log/LoggerAwareInterface.php | 17 - .../psr/log/Psr/Log/LoggerAwareTrait.php | 22 - .../psr/log/Psr/Log/LoggerInterface.php | 114 - src/vendor/psr/log/Psr/Log/LoggerTrait.php | 131 - src/vendor/psr/log/Psr/Log/NullLogger.php | 27 - .../log/Psr/Log/Test/LoggerInterfaceTest.php | 116 - src/vendor/psr/log/README.md | 45 - .../toolbox/ArrayTraits/src/ArrayAccess.php | 66 - .../src/ArrayAccessWithGetters.php | 57 - .../toolbox/ArrayTraits/src/Constructor.php | 24 - .../toolbox/ArrayTraits/src/Countable.php | 24 - .../toolbox/ArrayTraits/src/Export.php | 51 - .../ArrayTraits/src/ExportInterface.php | 35 - .../toolbox/ArrayTraits/src/Iterator.php | 77 - .../ArrayTraits/src/NestedArrayAccess.php | 188 - .../src/NestedArrayAccessWithGetters.php | 57 - .../toolbox/ArrayTraits/src/Serializable.php | 34 - .../toolbox/Blueprints/src/Blueprints.php | 369 - src/vendor/rockettheme/toolbox/CHANGELOG.md | 21 - .../rockettheme/toolbox/DI/src/Container.php | 15 - .../DI/src/ServiceProviderInterface.php | 15 - .../rockettheme/toolbox/Event/src/Event.php | 23 - .../toolbox/Event/src/EventDispatcher.php | 25 - .../Event/src/EventSubscriberInterface.php | 15 - .../rockettheme/toolbox/File/src/File.php | 420 - .../toolbox/File/src/FileInterface.php | 106 - .../rockettheme/toolbox/File/src/IniFile.php | 76 - .../rockettheme/toolbox/File/src/JsonFile.php | 57 - .../rockettheme/toolbox/File/src/LogFile.php | 71 - .../toolbox/File/src/MarkdownFile.php | 168 - .../rockettheme/toolbox/File/src/MoFile.php | 160 - .../rockettheme/toolbox/File/src/PhpFile.php | 106 - .../rockettheme/toolbox/File/src/YamlFile.php | 84 - src/vendor/rockettheme/toolbox/LICENSE | 21 - src/vendor/rockettheme/toolbox/README.md | 56 - .../src/RecursiveUniformResourceIterator.php | 48 - .../src/ResourceLocatorInterface.php | 37 - .../src/UniformResourceIterator.php | 250 - .../src/UniformResourceLocator.php | 338 - .../toolbox/Session/src/Message.php | 94 - .../toolbox/Session/src/Session.php | 257 - .../toolbox/Session/tests/MessageTest.php | 12 - .../StreamWrapper/src/ReadOnlyStream.php | 78 - .../toolbox/StreamWrapper/src/Stream.php | 239 - .../StreamWrapper/src/StreamBuilder.php | 89 - .../StreamWrapper/src/StreamInterface.php | 255 - src/vendor/symfony/console/Application.php | 1179 --- src/vendor/symfony/console/CHANGELOG.md | 62 - .../symfony/console/Command/Command.php | 697 -- .../symfony/console/Command/HelpCommand.php | 93 - .../symfony/console/Command/ListCommand.php | 97 - src/vendor/symfony/console/ConsoleEvents.php | 61 - .../Descriptor/ApplicationDescription.php | 157 - .../symfony/console/Descriptor/Descriptor.php | 121 - .../Descriptor/DescriptorInterface.php | 31 - .../console/Descriptor/JsonDescriptor.php | 166 - .../console/Descriptor/MarkdownDescriptor.php | 143 - .../console/Descriptor/TextDescriptor.php | 287 - .../console/Descriptor/XmlDescriptor.php | 263 - .../console/Event/ConsoleCommandEvent.php | 62 - .../symfony/console/Event/ConsoleEvent.php | 67 - .../console/Event/ConsoleExceptionEvent.php | 67 - .../console/Event/ConsoleTerminateEvent.php | 58 - .../console/Formatter/OutputFormatter.php | 242 - .../Formatter/OutputFormatterInterface.php | 83 - .../Formatter/OutputFormatterStyle.php | 229 - .../OutputFormatterStyleInterface.php | 72 - .../Formatter/OutputFormatterStyleStack.php | 121 - .../console/Helper/DebugFormatterHelper.php | 127 - .../console/Helper/DescriptorHelper.php | 96 - .../symfony/console/Helper/DialogHelper.php | 483 -- .../console/Helper/FormatterHelper.php | 82 - src/vendor/symfony/console/Helper/Helper.php | 121 - .../console/Helper/HelperInterface.php | 49 - .../symfony/console/Helper/HelperSet.php | 116 - .../console/Helper/InputAwareHelper.php | 33 - .../symfony/console/Helper/ProcessHelper.php | 151 - .../symfony/console/Helper/ProgressBar.php | 620 -- .../symfony/console/Helper/ProgressHelper.php | 465 -- .../symfony/console/Helper/QuestionHelper.php | 446 -- .../console/Helper/SymfonyQuestionHelper.php | 106 - src/vendor/symfony/console/Helper/Table.php | 606 -- .../symfony/console/Helper/TableCell.php | 77 - .../symfony/console/Helper/TableHelper.php | 268 - .../symfony/console/Helper/TableSeparator.php | 29 - .../symfony/console/Helper/TableStyle.php | 255 - .../symfony/console/Input/ArgvInput.php | 353 - .../symfony/console/Input/ArrayInput.php | 211 - src/vendor/symfony/console/Input/Input.php | 226 - .../symfony/console/Input/InputArgument.php | 132 - .../console/Input/InputAwareInterface.php | 28 - .../symfony/console/Input/InputDefinition.php | 485 -- .../symfony/console/Input/InputInterface.php | 152 - .../symfony/console/Input/InputOption.php | 213 - .../symfony/console/Input/StringInput.php | 87 - src/vendor/symfony/console/LICENSE | 19 - .../symfony/console/Logger/ConsoleLogger.php | 119 - .../symfony/console/Output/BufferedOutput.php | 48 - .../symfony/console/Output/ConsoleOutput.php | 154 - .../console/Output/ConsoleOutputInterface.php | 35 - .../symfony/console/Output/NullOutput.php | 113 - src/vendor/symfony/console/Output/Output.php | 165 - .../console/Output/OutputInterface.php | 113 - .../symfony/console/Output/StreamOutput.php | 103 - .../console/Question/ChoiceQuestion.php | 175 - .../console/Question/ConfirmationQuestion.php | 61 - .../symfony/console/Question/Question.php | 247 - src/vendor/symfony/console/README.md | 67 - .../console/Resources/bin/hiddeninput.exe | Bin 9216 -> 0 bytes src/vendor/symfony/console/Shell.php | 228 - .../symfony/console/Style/OutputStyle.php | 116 - .../symfony/console/Style/StyleInterface.php | 159 - .../symfony/console/Style/SymfonyStyle.php | 406 - .../console/Tester/ApplicationTester.php | 128 - .../symfony/console/Tester/CommandTester.php | 132 - .../symfony/console/Tests/ApplicationTest.php | 1060 --- .../symfony/console/Tests/ClockMock.php | 41 - .../console/Tests/Command/CommandTest.php | 337 - .../console/Tests/Command/HelpCommandTest.php | 70 - .../console/Tests/Command/ListCommandTest.php | 64 - .../Descriptor/AbstractDescriptorTest.php | 105 - .../Tests/Descriptor/JsonDescriptorTest.php | 35 - .../Descriptor/MarkdownDescriptorTest.php | 27 - .../Tests/Descriptor/ObjectsProvider.php | 77 - .../Tests/Descriptor/TextDescriptorTest.php | 27 - .../Tests/Descriptor/XmlDescriptorTest.php | 27 - .../console/Tests/Fixtures/BarBucCommand.php | 11 - .../Tests/Fixtures/DescriptorApplication1.php | 18 - .../Tests/Fixtures/DescriptorApplication2.php | 24 - .../Tests/Fixtures/DescriptorCommand1.php | 27 - .../Tests/Fixtures/DescriptorCommand2.php | 32 - .../console/Tests/Fixtures/DummyOutput.php | 36 - .../console/Tests/Fixtures/Foo1Command.php | 26 - .../console/Tests/Fixtures/Foo2Command.php | 21 - .../console/Tests/Fixtures/Foo3Command.php | 29 - .../console/Tests/Fixtures/Foo4Command.php | 11 - .../console/Tests/Fixtures/Foo5Command.php | 10 - .../console/Tests/Fixtures/FooCommand.php | 33 - .../Fixtures/FooSubnamespaced1Command.php | 26 - .../Fixtures/FooSubnamespaced2Command.php | 26 - .../console/Tests/Fixtures/FoobarCommand.php | 25 - .../Style/SymfonyStyle/command/command_0.php | 11 - .../Style/SymfonyStyle/command/command_1.php | 13 - .../Style/SymfonyStyle/command/command_2.php | 16 - .../Style/SymfonyStyle/command/command_3.php | 12 - .../Style/SymfonyStyle/command/command_4.php | 34 - .../Style/SymfonyStyle/command/command_5.php | 29 - .../Style/SymfonyStyle/command/command_6.php | 16 - .../Style/SymfonyStyle/command/command_7.php | 15 - .../Style/SymfonyStyle/output/output_0.txt | 3 - .../Style/SymfonyStyle/output/output_1.txt | 9 - .../Style/SymfonyStyle/output/output_2.txt | 13 - .../Style/SymfonyStyle/output/output_3.txt | 7 - .../Style/SymfonyStyle/output/output_4.txt | 32 - .../Style/SymfonyStyle/output/output_5.txt | 11 - .../Style/SymfonyStyle/output/output_6.txt | 6 - .../Style/SymfonyStyle/output/output_7.txt | 5 - .../console/Tests/Fixtures/TestCommand.php | 28 - .../console/Tests/Fixtures/application_1.json | 1 - .../console/Tests/Fixtures/application_1.md | 201 - .../console/Tests/Fixtures/application_1.txt | 17 - .../console/Tests/Fixtures/application_1.xml | 110 - .../console/Tests/Fixtures/application_2.json | 1 - .../console/Tests/Fixtures/application_2.md | 396 - .../console/Tests/Fixtures/application_2.txt | 22 - .../console/Tests/Fixtures/application_2.xml | 190 - .../Tests/Fixtures/application_astext1.txt | 20 - .../Tests/Fixtures/application_astext2.txt | 16 - .../Tests/Fixtures/application_asxml1.txt | 146 - .../Tests/Fixtures/application_asxml2.txt | 37 - .../Tests/Fixtures/application_gethelp.txt | 1 - .../Fixtures/application_renderexception1.txt | 8 - .../Fixtures/application_renderexception2.txt | 11 - .../Fixtures/application_renderexception3.txt | 27 - .../application_renderexception3decorated.txt | 27 - .../Fixtures/application_renderexception4.txt | 9 - ...plication_renderexception_doublewidth1.txt | 11 - ..._renderexception_doublewidth1decorated.txt | 11 - ...plication_renderexception_doublewidth2.txt | 12 - .../Tests/Fixtures/application_run1.txt | 17 - .../Tests/Fixtures/application_run2.txt | 29 - .../Tests/Fixtures/application_run3.txt | 27 - .../Tests/Fixtures/application_run4.txt | 1 - .../console/Tests/Fixtures/command_1.json | 1 - .../console/Tests/Fixtures/command_1.md | 11 - .../console/Tests/Fixtures/command_1.txt | 7 - .../console/Tests/Fixtures/command_1.xml | 12 - .../console/Tests/Fixtures/command_2.json | 1 - .../console/Tests/Fixtures/command_2.md | 33 - .../console/Tests/Fixtures/command_2.txt | 13 - .../console/Tests/Fixtures/command_2.xml | 21 - .../console/Tests/Fixtures/command_astext.txt | 18 - .../console/Tests/Fixtures/command_asxml.txt | 38 - .../Tests/Fixtures/definition_astext.txt | 11 - .../Tests/Fixtures/definition_asxml.txt | 39 - .../Tests/Fixtures/input_argument_1.json | 1 - .../Tests/Fixtures/input_argument_1.md | 7 - .../Tests/Fixtures/input_argument_1.txt | 1 - .../Tests/Fixtures/input_argument_1.xml | 5 - .../Tests/Fixtures/input_argument_2.json | 1 - .../Tests/Fixtures/input_argument_2.md | 7 - .../Tests/Fixtures/input_argument_2.txt | 1 - .../Tests/Fixtures/input_argument_2.xml | 5 - .../Tests/Fixtures/input_argument_3.json | 1 - .../Tests/Fixtures/input_argument_3.md | 7 - .../Tests/Fixtures/input_argument_3.txt | 1 - .../Tests/Fixtures/input_argument_3.xml | 7 - .../Tests/Fixtures/input_argument_4.json | 1 - .../Tests/Fixtures/input_argument_4.md | 8 - .../Tests/Fixtures/input_argument_4.txt | 2 - .../Tests/Fixtures/input_argument_4.xml | 6 - .../Tests/Fixtures/input_definition_1.json | 1 - .../Tests/Fixtures/input_definition_1.md | 0 .../Tests/Fixtures/input_definition_1.txt | 0 .../Tests/Fixtures/input_definition_1.xml | 5 - .../Tests/Fixtures/input_definition_2.json | 1 - .../Tests/Fixtures/input_definition_2.md | 9 - .../Tests/Fixtures/input_definition_2.txt | 2 - .../Tests/Fixtures/input_definition_2.xml | 10 - .../Tests/Fixtures/input_definition_3.json | 1 - .../Tests/Fixtures/input_definition_3.md | 11 - .../Tests/Fixtures/input_definition_3.txt | 2 - .../Tests/Fixtures/input_definition_3.xml | 9 - .../Tests/Fixtures/input_definition_4.json | 1 - .../Tests/Fixtures/input_definition_4.md | 21 - .../Tests/Fixtures/input_definition_4.txt | 5 - .../Tests/Fixtures/input_definition_4.xml | 14 - .../Tests/Fixtures/input_option_1.json | 1 - .../console/Tests/Fixtures/input_option_1.md | 9 - .../console/Tests/Fixtures/input_option_1.txt | 1 - .../console/Tests/Fixtures/input_option_1.xml | 4 - .../Tests/Fixtures/input_option_2.json | 1 - .../console/Tests/Fixtures/input_option_2.md | 9 - .../console/Tests/Fixtures/input_option_2.txt | 1 - .../console/Tests/Fixtures/input_option_2.xml | 7 - .../Tests/Fixtures/input_option_3.json | 1 - .../console/Tests/Fixtures/input_option_3.md | 9 - .../console/Tests/Fixtures/input_option_3.txt | 1 - .../console/Tests/Fixtures/input_option_3.xml | 5 - .../Tests/Fixtures/input_option_4.json | 1 - .../console/Tests/Fixtures/input_option_4.md | 9 - .../console/Tests/Fixtures/input_option_4.txt | 1 - .../console/Tests/Fixtures/input_option_4.xml | 5 - .../Tests/Fixtures/input_option_5.json | 1 - .../console/Tests/Fixtures/input_option_5.md | 10 - .../console/Tests/Fixtures/input_option_5.txt | 2 - .../console/Tests/Fixtures/input_option_5.xml | 6 - .../Tests/Fixtures/input_option_6.json | 1 - .../console/Tests/Fixtures/input_option_6.md | 9 - .../console/Tests/Fixtures/input_option_6.txt | 1 - .../console/Tests/Fixtures/input_option_6.xml | 5 - .../OutputFormatterStyleStackTest.php | 70 - .../Formatter/OutputFormatterStyleTest.php | 99 - .../Tests/Formatter/OutputFormatterTest.php | 273 - .../Tests/Helper/FormatterHelperTest.php | 99 - .../console/Tests/Helper/HelperSetTest.php | 153 - .../Tests/Helper/LegacyDialogHelperTest.php | 195 - .../Tests/Helper/LegacyProgressHelperTest.php | 240 - .../Tests/Helper/LegacyTableHelperTest.php | 324 - .../Tests/Helper/ProcessHelperTest.php | 117 - .../console/Tests/Helper/ProgressBarTest.php | 612 -- .../Tests/Helper/QuestionHelperTest.php | 383 - .../console/Tests/Helper/TableStyleTest.php | 27 - .../console/Tests/Helper/TableTest.php | 568 -- .../console/Tests/Input/ArgvInputTest.php | 317 - .../console/Tests/Input/ArrayInputTest.php | 138 - .../console/Tests/Input/InputArgumentTest.php | 111 - .../Tests/Input/InputDefinitionTest.php | 437 -- .../console/Tests/Input/InputOptionTest.php | 204 - .../symfony/console/Tests/Input/InputTest.php | 121 - .../console/Tests/Input/StringInputTest.php | 99 - .../Tests/Logger/ConsoleLoggerTest.php | 58 - .../Tests/Output/ConsoleOutputTest.php | 25 - .../console/Tests/Output/NullOutputTest.php | 39 - .../console/Tests/Output/OutputTest.php | 156 - .../console/Tests/Output/StreamOutputTest.php | 60 - .../console/Tests/Style/SymfonyStyleTest.php | 64 - .../Tests/Tester/ApplicationTesterTest.php | 69 - .../Tests/Tester/CommandTesterTest.php | 84 - src/vendor/symfony/console/composer.json | 41 - src/vendor/symfony/console/phpunit.xml.dist | 29 - .../symfony/event-dispatcher/CHANGELOG.md | 23 - .../ContainerAwareEventDispatcher.php | 187 - .../Debug/TraceableEventDispatcher.php | 335 - .../TraceableEventDispatcherInterface.php | 34 - .../Debug/WrappedListener.php | 71 - .../RegisterListenersPass.php | 110 - src/vendor/symfony/event-dispatcher/Event.php | 134 - .../event-dispatcher/EventDispatcher.php | 179 - .../EventDispatcherInterface.php | 96 - .../EventSubscriberInterface.php | 50 - .../symfony/event-dispatcher/GenericEvent.php | 186 - .../ImmutableEventDispatcher.php | 93 - src/vendor/symfony/event-dispatcher/LICENSE | 19 - src/vendor/symfony/event-dispatcher/README.md | 27 - .../Tests/AbstractEventDispatcherTest.php | 382 - .../ContainerAwareEventDispatcherTest.php | 249 - .../Debug/TraceableEventDispatcherTest.php | 199 - .../RegisterListenersPassTest.php | 200 - .../Tests/EventDispatcherTest.php | 22 - .../event-dispatcher/Tests/EventTest.php | 96 - .../Tests/GenericEventTest.php | 139 - .../Tests/ImmutableEventDispatcherTest.php | 105 - .../symfony/event-dispatcher/composer.json | 42 - .../symfony/event-dispatcher/phpunit.xml.dist | 29 - src/vendor/symfony/var-dumper/CHANGELOG.md | 7 - .../symfony/var-dumper/Caster/AmqpCaster.php | 164 - .../symfony/var-dumper/Caster/Caster.php | 114 - .../symfony/var-dumper/Caster/ConstStub.php | 28 - .../symfony/var-dumper/Caster/CutStub.php | 56 - .../symfony/var-dumper/Caster/DOMCaster.php | 302 - .../var-dumper/Caster/DoctrineCaster.php | 60 - .../var-dumper/Caster/ExceptionCaster.php | 137 - .../symfony/var-dumper/Caster/MongoCaster.php | 34 - .../symfony/var-dumper/Caster/PdoCaster.php | 114 - .../var-dumper/Caster/ReflectionCaster.php | 241 - .../var-dumper/Caster/ResourceCaster.php | 67 - .../symfony/var-dumper/Caster/SplCaster.php | 102 - .../symfony/var-dumper/Caster/StubCaster.php | 46 - .../var-dumper/Caster/XmlResourceCaster.php | 61 - .../var-dumper/Cloner/AbstractCloner.php | 304 - .../var-dumper/Cloner/ClonerInterface.php | 27 - .../symfony/var-dumper/Cloner/Cursor.php | 41 - src/vendor/symfony/var-dumper/Cloner/Data.php | 241 - .../var-dumper/Cloner/DumperInterface.php | 60 - src/vendor/symfony/var-dumper/Cloner/Stub.php | 40 - .../symfony/var-dumper/Cloner/VarCloner.php | 300 - .../var-dumper/Dumper/AbstractDumper.php | 222 - .../symfony/var-dumper/Dumper/CliDumper.php | 473 -- .../var-dumper/Dumper/DataDumperInterface.php | 29 - .../symfony/var-dumper/Dumper/HtmlDumper.php | 475 -- .../Exception/ThrowingCasterException.php | 27 - src/vendor/symfony/var-dumper/LICENSE | 19 - src/vendor/symfony/var-dumper/README.md | 14 - .../var-dumper/Resources/functions/dump.php | 24 - .../var-dumper/Test/VarDumperTestCase.php | 44 - .../var-dumper/Test/VarDumperTestTrait.php | 45 - .../var-dumper/Tests/Caster/CasterTest.php | 147 - .../var-dumper/Tests/Caster/PdoCasterTest.php | 56 - .../Tests/Caster/ReflectionCasterTest.php | 63 - .../var-dumper/Tests/CliDumperTest.php | 390 - .../var-dumper/Tests/Fixtures/dumb-var.php | 40 - .../var-dumper/Tests/HtmlDumperTest.php | 152 - .../Tests/Test/VarDumpTestTraitRequire54.php | 41 - .../Tests/Test/VarDumpTestTraitTest.php | 16 - .../var-dumper/Tests/VarClonerTest.php | 187 - src/vendor/symfony/var-dumper/VarDumper.php | 52 - src/vendor/symfony/var-dumper/composer.json | 37 - .../symfony/var-dumper/phpunit.xml.dist | 29 - src/vendor/symfony/yaml/CHANGELOG.md | 8 - src/vendor/symfony/yaml/Dumper.php | 73 - src/vendor/symfony/yaml/Escaper.php | 97 - .../symfony/yaml/Exception/DumpException.php | 23 - .../yaml/Exception/ExceptionInterface.php | 23 - .../symfony/yaml/Exception/ParseException.php | 148 - .../yaml/Exception/RuntimeException.php | 23 - src/vendor/symfony/yaml/Inline.php | 546 -- src/vendor/symfony/yaml/LICENSE | 19 - src/vendor/symfony/yaml/Parser.php | 704 -- src/vendor/symfony/yaml/README.md | 21 - src/vendor/symfony/yaml/Tests/DumperTest.php | 236 - .../yaml/Tests/Fixtures/YtsAnchorAlias.yml | 31 - .../yaml/Tests/Fixtures/YtsBasicTests.yml | 202 - .../yaml/Tests/Fixtures/YtsBlockMapping.yml | 51 - .../Tests/Fixtures/YtsDocumentSeparator.yml | 85 - .../yaml/Tests/Fixtures/YtsErrorTests.yml | 25 - .../Tests/Fixtures/YtsFlowCollections.yml | 60 - .../yaml/Tests/Fixtures/YtsFoldedScalars.yml | 176 - .../Tests/Fixtures/YtsNullsAndEmpties.yml | 45 - .../Fixtures/YtsSpecificationExamples.yml | 1697 ---- .../yaml/Tests/Fixtures/YtsTypeTransfers.yml | 244 - .../yaml/Tests/Fixtures/embededPhp.yml | 1 - .../yaml/Tests/Fixtures/escapedCharacters.yml | 147 - .../symfony/yaml/Tests/Fixtures/index.yml | 18 - .../yaml/Tests/Fixtures/sfComments.yml | 73 - .../symfony/yaml/Tests/Fixtures/sfCompact.yml | 159 - .../yaml/Tests/Fixtures/sfMergeKey.yml | 58 - .../symfony/yaml/Tests/Fixtures/sfObjects.yml | 11 - .../symfony/yaml/Tests/Fixtures/sfQuotes.yml | 33 - .../symfony/yaml/Tests/Fixtures/sfTests.yml | 135 - .../Tests/Fixtures/unindentedCollections.yml | 82 - src/vendor/symfony/yaml/Tests/InlineTest.php | 384 - .../symfony/yaml/Tests/ParseExceptionTest.php | 41 - src/vendor/symfony/yaml/Tests/ParserTest.php | 773 -- src/vendor/symfony/yaml/Tests/YamlTest.php | 37 - src/vendor/symfony/yaml/Unescaper.php | 147 - src/vendor/symfony/yaml/Yaml.php | 105 - src/vendor/symfony/yaml/composer.json | 33 - src/vendor/symfony/yaml/phpunit.xml.dist | 28 - src/vendor/twig/twig/CHANGELOG | 799 -- src/vendor/twig/twig/LICENSE | 31 - src/vendor/twig/twig/README.rst | 15 - src/vendor/twig/twig/lib/Twig/Autoloader.php | 54 - .../twig/twig/lib/Twig/BaseNodeVisitor.php | 62 - .../twig/twig/lib/Twig/Cache/Filesystem.php | 96 - src/vendor/twig/twig/lib/Twig/Cache/Null.php | 48 - .../twig/twig/lib/Twig/CacheInterface.php | 56 - src/vendor/twig/twig/lib/Twig/Compiler.php | 277 - .../twig/twig/lib/Twig/CompilerInterface.php | 36 - src/vendor/twig/twig/lib/Twig/Environment.php | 1355 ---- src/vendor/twig/twig/lib/Twig/Error.php | 250 - .../twig/twig/lib/Twig/Error/Loader.php | 31 - .../twig/twig/lib/Twig/Error/Runtime.php | 20 - .../twig/twig/lib/Twig/Error/Syntax.php | 20 - .../twig/lib/Twig/ExistsLoaderInterface.php | 29 - .../twig/twig/lib/Twig/ExpressionParser.php | 645 -- src/vendor/twig/twig/lib/Twig/Extension.php | 75 - .../twig/twig/lib/Twig/Extension/Core.php | 1574 ---- .../twig/twig/lib/Twig/Extension/Debug.php | 71 - .../twig/twig/lib/Twig/Extension/Escaper.php | 122 - .../twig/lib/Twig/Extension/Optimizer.php | 35 - .../twig/twig/lib/Twig/Extension/Profiler.php | 52 - .../twig/twig/lib/Twig/Extension/Sandbox.php | 112 - .../twig/twig/lib/Twig/Extension/Staging.php | 115 - .../twig/lib/Twig/Extension/StringLoader.php | 47 - .../twig/twig/lib/Twig/ExtensionInterface.php | 83 - .../Twig/FileExtensionEscapingStrategy.php | 58 - src/vendor/twig/twig/lib/Twig/Filter.php | 84 - .../twig/twig/lib/Twig/Filter/Function.php | 40 - .../twig/twig/lib/Twig/Filter/Method.php | 42 - src/vendor/twig/twig/lib/Twig/Filter/Node.php | 42 - .../twig/lib/Twig/FilterCallableInterface.php | 24 - .../twig/twig/lib/Twig/FilterInterface.php | 43 - src/vendor/twig/twig/lib/Twig/Function.php | 74 - .../twig/twig/lib/Twig/Function/Function.php | 41 - .../twig/twig/lib/Twig/Function/Method.php | 43 - .../twig/twig/lib/Twig/Function/Node.php | 42 - .../lib/Twig/FunctionCallableInterface.php | 24 - .../twig/twig/lib/Twig/FunctionInterface.php | 40 - src/vendor/twig/twig/lib/Twig/Lexer.php | 411 - .../twig/twig/lib/Twig/LexerInterface.php | 32 - .../twig/twig/lib/Twig/Loader/Array.php | 95 - .../twig/twig/lib/Twig/Loader/Chain.php | 138 - .../twig/twig/lib/Twig/Loader/Filesystem.php | 260 - .../twig/twig/lib/Twig/Loader/String.php | 63 - .../twig/twig/lib/Twig/LoaderInterface.php | 53 - src/vendor/twig/twig/lib/Twig/Markup.php | 37 - src/vendor/twig/twig/lib/Twig/Node.php | 231 - .../twig/twig/lib/Twig/Node/AutoEscape.php | 39 - src/vendor/twig/twig/lib/Twig/Node/Block.php | 44 - .../twig/lib/Twig/Node/BlockReference.php | 37 - src/vendor/twig/twig/lib/Twig/Node/Body.php | 19 - .../twig/twig/lib/Twig/Node/CheckSecurity.php | 78 - src/vendor/twig/twig/lib/Twig/Node/Do.php | 38 - src/vendor/twig/twig/lib/Twig/Node/Embed.php | 42 - .../twig/twig/lib/Twig/Node/Expression.php | 20 - .../twig/lib/Twig/Node/Expression/Array.php | 86 - .../lib/Twig/Node/Expression/AssignName.php | 28 - .../twig/lib/Twig/Node/Expression/Binary.php | 40 - .../lib/Twig/Node/Expression/Binary/Add.php | 18 - .../lib/Twig/Node/Expression/Binary/And.php | 18 - .../Node/Expression/Binary/BitwiseAnd.php | 18 - .../Twig/Node/Expression/Binary/BitwiseOr.php | 18 - .../Node/Expression/Binary/BitwiseXor.php | 18 - .../Twig/Node/Expression/Binary/Concat.php | 18 - .../lib/Twig/Node/Expression/Binary/Div.php | 18 - .../Twig/Node/Expression/Binary/EndsWith.php | 30 - .../lib/Twig/Node/Expression/Binary/Equal.php | 17 - .../Twig/Node/Expression/Binary/FloorDiv.php | 29 - .../Twig/Node/Expression/Binary/Greater.php | 17 - .../Node/Expression/Binary/GreaterEqual.php | 17 - .../lib/Twig/Node/Expression/Binary/In.php | 33 - .../lib/Twig/Node/Expression/Binary/Less.php | 17 - .../Twig/Node/Expression/Binary/LessEqual.php | 17 - .../Twig/Node/Expression/Binary/Matches.php | 28 - .../lib/Twig/Node/Expression/Binary/Mod.php | 18 - .../lib/Twig/Node/Expression/Binary/Mul.php | 18 - .../Twig/Node/Expression/Binary/NotEqual.php | 17 - .../lib/Twig/Node/Expression/Binary/NotIn.php | 33 - .../lib/Twig/Node/Expression/Binary/Or.php | 18 - .../lib/Twig/Node/Expression/Binary/Power.php | 33 - .../lib/Twig/Node/Expression/Binary/Range.php | 33 - .../Node/Expression/Binary/StartsWith.php | 30 - .../lib/Twig/Node/Expression/Binary/Sub.php | 18 - .../Twig/Node/Expression/BlockReference.php | 51 - .../twig/lib/Twig/Node/Expression/Call.php | 247 - .../lib/Twig/Node/Expression/Conditional.php | 31 - .../lib/Twig/Node/Expression/Constant.php | 23 - .../Node/Expression/ExtensionReference.php | 33 - .../twig/lib/Twig/Node/Expression/Filter.php | 39 - .../Twig/Node/Expression/Filter/Default.php | 43 - .../lib/Twig/Node/Expression/Function.php | 38 - .../twig/lib/Twig/Node/Expression/GetAttr.php | 63 - .../lib/Twig/Node/Expression/MethodCall.php | 41 - .../twig/lib/Twig/Node/Expression/Name.php | 98 - .../twig/lib/Twig/Node/Expression/Parent.php | 47 - .../lib/Twig/Node/Expression/TempName.php | 26 - .../twig/lib/Twig/Node/Expression/Test.php | 35 - .../Twig/Node/Expression/Test/Constant.php | 46 - .../lib/Twig/Node/Expression/Test/Defined.php | 54 - .../Twig/Node/Expression/Test/Divisibleby.php | 33 - .../lib/Twig/Node/Expression/Test/Even.php | 32 - .../lib/Twig/Node/Expression/Test/Null.php | 31 - .../lib/Twig/Node/Expression/Test/Odd.php | 32 - .../lib/Twig/Node/Expression/Test/Sameas.php | 29 - .../twig/lib/Twig/Node/Expression/Unary.php | 27 - .../lib/Twig/Node/Expression/Unary/Neg.php | 18 - .../lib/Twig/Node/Expression/Unary/Not.php | 18 - .../lib/Twig/Node/Expression/Unary/Pos.php | 18 - src/vendor/twig/twig/lib/Twig/Node/Flush.php | 36 - src/vendor/twig/twig/lib/Twig/Node/For.php | 111 - .../twig/twig/lib/Twig/Node/ForLoop.php | 55 - src/vendor/twig/twig/lib/Twig/Node/If.php | 66 - src/vendor/twig/twig/lib/Twig/Node/Import.php | 54 - .../twig/twig/lib/Twig/Node/Include.php | 88 - src/vendor/twig/twig/lib/Twig/Node/Macro.php | 123 - src/vendor/twig/twig/lib/Twig/Node/Module.php | 408 - src/vendor/twig/twig/lib/Twig/Node/Print.php | 39 - .../twig/twig/lib/Twig/Node/Sandbox.php | 47 - .../twig/lib/Twig/Node/SandboxedPrint.php | 61 - src/vendor/twig/twig/lib/Twig/Node/Set.php | 101 - .../twig/twig/lib/Twig/Node/SetTemp.php | 35 - .../twig/twig/lib/Twig/Node/Spaceless.php | 40 - src/vendor/twig/twig/lib/Twig/Node/Text.php | 39 - .../twig/twig/lib/Twig/NodeInterface.php | 31 - .../twig/lib/Twig/NodeOutputInterface.php | 19 - .../twig/twig/lib/Twig/NodeTraverser.php | 89 - .../twig/lib/Twig/NodeVisitor/Escaper.php | 157 - .../twig/lib/Twig/NodeVisitor/Optimizer.php | 271 - .../lib/Twig/NodeVisitor/SafeAnalysis.php | 154 - .../twig/lib/Twig/NodeVisitor/Sandbox.php | 82 - .../twig/lib/Twig/NodeVisitorInterface.php | 47 - src/vendor/twig/twig/lib/Twig/Parser.php | 399 - .../twig/twig/lib/Twig/ParserInterface.php | 31 - .../lib/Twig/Profiler/Dumper/Blackfire.php | 68 - .../twig/lib/Twig/Profiler/Dumper/Html.php | 43 - .../twig/lib/Twig/Profiler/Dumper/Text.php | 68 - .../lib/Twig/Profiler/Node/EnterProfile.php | 40 - .../lib/Twig/Profiler/Node/LeaveProfile.php | 34 - .../Twig/Profiler/NodeVisitor/Profiler.php | 72 - .../twig/twig/lib/Twig/Profiler/Profile.php | 160 - .../twig/lib/Twig/Sandbox/SecurityError.php | 19 - .../Sandbox/SecurityNotAllowedFilterError.php | 31 - .../SecurityNotAllowedFunctionError.php | 31 - .../Sandbox/SecurityNotAllowedTagError.php | 31 - .../twig/lib/Twig/Sandbox/SecurityPolicy.php | 119 - .../Twig/Sandbox/SecurityPolicyInterface.php | 24 - .../twig/twig/lib/Twig/SimpleFilter.php | 112 - .../twig/twig/lib/Twig/SimpleFunction.php | 102 - src/vendor/twig/twig/lib/Twig/SimpleTest.php | 64 - src/vendor/twig/twig/lib/Twig/Template.php | 614 -- .../twig/twig/lib/Twig/TemplateInterface.php | 48 - src/vendor/twig/twig/lib/Twig/Test.php | 37 - .../twig/twig/lib/Twig/Test/Function.php | 38 - .../lib/Twig/Test/IntegrationTestCase.php | 230 - src/vendor/twig/twig/lib/Twig/Test/Method.php | 40 - src/vendor/twig/twig/lib/Twig/Test/Node.php | 40 - .../twig/twig/lib/Twig/Test/NodeTestCase.php | 60 - .../twig/lib/Twig/TestCallableInterface.php | 22 - .../twig/twig/lib/Twig/TestInterface.php | 27 - src/vendor/twig/twig/lib/Twig/Token.php | 216 - src/vendor/twig/twig/lib/Twig/TokenParser.php | 33 - .../twig/lib/Twig/TokenParser/AutoEscape.php | 91 - .../twig/twig/lib/Twig/TokenParser/Block.php | 81 - .../twig/twig/lib/Twig/TokenParser/Do.php | 42 - .../twig/twig/lib/Twig/TokenParser/Embed.php | 66 - .../twig/lib/Twig/TokenParser/Extends.php | 52 - .../twig/twig/lib/Twig/TokenParser/Filter.php | 61 - .../twig/twig/lib/Twig/TokenParser/Flush.php | 42 - .../twig/twig/lib/Twig/TokenParser/For.php | 135 - .../twig/twig/lib/Twig/TokenParser/From.php | 74 - .../twig/twig/lib/Twig/TokenParser/If.php | 94 - .../twig/twig/lib/Twig/TokenParser/Import.php | 49 - .../twig/lib/Twig/TokenParser/Include.php | 75 - .../twig/twig/lib/Twig/TokenParser/Macro.php | 68 - .../twig/lib/Twig/TokenParser/Sandbox.php | 68 - .../twig/twig/lib/Twig/TokenParser/Set.php | 83 - .../twig/lib/Twig/TokenParser/Spaceless.php | 59 - .../twig/twig/lib/Twig/TokenParser/Use.php | 76 - .../twig/twig/lib/Twig/TokenParserBroker.php | 141 - .../lib/Twig/TokenParserBrokerInterface.php | 46 - .../twig/lib/Twig/TokenParserInterface.php | 43 - src/vendor/twig/twig/lib/Twig/TokenStream.php | 155 - .../lib/Twig/Util/DeprecationCollector.php | 82 - .../lib/Twig/Util/TemplateDirIterator.php | 26 - src/web.config | 55 - 1854 files changed, 1171 insertions(+), 201075 deletions(-) create mode 100644 LICENSE create mode 100644 check_process create mode 100644 conf/php-fpm.ini create mode 100644 scripts/.fonctions create mode 100644 scripts/backup create mode 100644 scripts/restore create mode 100644 sources/source_dir create mode 100644 sources/source_md5. create mode 100644 sources/source_url delete mode 100644 src/.config delete mode 100644 src/.debug delete mode 100644 src/.dependencies delete mode 100644 src/.hg_archival.txt delete mode 100644 src/.hgignore delete mode 100644 src/.htaccess delete mode 100644 src/.installer delete mode 100644 src/CHANGELOG.md delete mode 100644 src/LICENSE delete mode 100644 src/README.md delete mode 100644 src/assets/.gitkeep delete mode 100644 src/backup/.gitkeep delete mode 100755 src/bin/composer.phar delete mode 100755 src/bin/gpm delete mode 100755 src/bin/grav delete mode 100644 src/cache/.gitkeep delete mode 100644 src/composer.json delete mode 100644 src/composer.lock delete mode 100644 src/htaccess.txt delete mode 100644 src/images/.gitkeep delete mode 100644 src/index.php delete mode 100644 src/logs/.gitkeep delete mode 100644 src/nginx.conf delete mode 100644 src/robots.txt delete mode 100644 src/system/assets/debugger.css delete mode 100644 src/system/assets/grav.png delete mode 100644 src/system/assets/jquery/jquery-2.1.4.min.js delete mode 100644 src/system/assets/responsive-overlays/1x.png delete mode 100644 src/system/assets/responsive-overlays/2x.png delete mode 100644 src/system/assets/responsive-overlays/3x.png delete mode 100644 src/system/assets/responsive-overlays/4x.png delete mode 100644 src/system/assets/responsive-overlays/unknown.png delete mode 100644 src/system/assets/whoops.css delete mode 100644 src/system/blueprints/config/media.yaml delete mode 100644 src/system/blueprints/config/site.yaml delete mode 100644 src/system/blueprints/config/streams.yaml delete mode 100644 src/system/blueprints/config/system.yaml delete mode 100644 src/system/blueprints/pages/default.yaml delete mode 100644 src/system/blueprints/pages/modular.yaml delete mode 100644 src/system/blueprints/pages/modular_new.yaml delete mode 100644 src/system/blueprints/pages/modular_raw.yaml delete mode 100644 src/system/blueprints/pages/move.yaml delete mode 100644 src/system/blueprints/pages/new.yaml delete mode 100644 src/system/blueprints/pages/raw.yaml delete mode 100644 src/system/blueprints/user/account.yaml delete mode 100644 src/system/blueprints/user/account_new.yaml delete mode 100644 src/system/config/media.yaml delete mode 100644 src/system/config/site.yaml delete mode 100644 src/system/config/streams.yaml delete mode 100644 src/system/config/system.yaml delete mode 100644 src/system/defines.php delete mode 100644 src/system/images/media/thumb-doc.png delete mode 100644 src/system/images/media/thumb-gif.png delete mode 100644 src/system/images/media/thumb-gz.png delete mode 100644 src/system/images/media/thumb-html.png delete mode 100644 src/system/images/media/thumb-jpeg.png delete mode 100644 src/system/images/media/thumb-jpg.png delete mode 100644 src/system/images/media/thumb-m4v.png delete mode 100644 src/system/images/media/thumb-mov.png delete mode 100644 src/system/images/media/thumb-mp4.png delete mode 100644 src/system/images/media/thumb-pdf.png delete mode 100644 src/system/images/media/thumb-png.png delete mode 100644 src/system/images/media/thumb-swf.png delete mode 100644 src/system/images/media/thumb-txt.png delete mode 100644 src/system/images/media/thumb-zip.png delete mode 100644 src/system/languages/cs.yaml delete mode 100644 src/system/languages/de.yaml delete mode 100644 src/system/languages/en.yaml delete mode 100644 src/system/languages/fr.yaml delete mode 100644 src/system/languages/it.yaml delete mode 100644 src/system/languages/nl.yaml delete mode 100644 src/system/languages/ru.yaml delete mode 100644 src/system/src/Grav/Common/Assets.php delete mode 100644 src/system/src/Grav/Common/Backup/ZipBackup.php delete mode 100644 src/system/src/Grav/Common/Browser.php delete mode 100644 src/system/src/Grav/Common/Cache.php delete mode 100644 src/system/src/Grav/Common/Composer.php delete mode 100644 src/system/src/Grav/Common/Config/Blueprints.php delete mode 100644 src/system/src/Grav/Common/Config/Config.php delete mode 100644 src/system/src/Grav/Common/Config/ConfigFinder.php delete mode 100644 src/system/src/Grav/Common/Config/Languages.php delete mode 100644 src/system/src/Grav/Common/Data/Blueprint.php delete mode 100644 src/system/src/Grav/Common/Data/Blueprints.php delete mode 100644 src/system/src/Grav/Common/Data/Data.php delete mode 100644 src/system/src/Grav/Common/Data/DataInterface.php delete mode 100644 src/system/src/Grav/Common/Data/DataMutatorTrait.php delete mode 100644 src/system/src/Grav/Common/Data/Validation.php delete mode 100644 src/system/src/Grav/Common/Debugger.php delete mode 100644 src/system/src/Grav/Common/Errors/Errors.php delete mode 100644 src/system/src/Grav/Common/Errors/Resources/error.css delete mode 100644 src/system/src/Grav/Common/Errors/Resources/layout.html.php delete mode 100644 src/system/src/Grav/Common/Errors/SimplePageHandler.php delete mode 100644 src/system/src/Grav/Common/File/CompiledFile.php delete mode 100644 src/system/src/Grav/Common/File/CompiledMarkdownFile.php delete mode 100644 src/system/src/Grav/Common/File/CompiledYamlFile.php delete mode 100644 src/system/src/Grav/Common/Filesystem/Folder.php delete mode 100644 src/system/src/Grav/Common/Filesystem/RecursiveFolderFilterIterator.php delete mode 100644 src/system/src/Grav/Common/GPM/AbstractCollection.php delete mode 100644 src/system/src/Grav/Common/GPM/Common/AbstractPackageCollection.php delete mode 100644 src/system/src/Grav/Common/GPM/Common/CachedCollection.php delete mode 100644 src/system/src/Grav/Common/GPM/Common/Package.php delete mode 100644 src/system/src/Grav/Common/GPM/GPM.php delete mode 100644 src/system/src/Grav/Common/GPM/Installer.php delete mode 100644 src/system/src/Grav/Common/GPM/Local/AbstractPackageCollection.php delete mode 100644 src/system/src/Grav/Common/GPM/Local/Package.php delete mode 100644 src/system/src/Grav/Common/GPM/Local/Packages.php delete mode 100644 src/system/src/Grav/Common/GPM/Local/Plugins.php delete mode 100644 src/system/src/Grav/Common/GPM/Local/Themes.php delete mode 100644 src/system/src/Grav/Common/GPM/PackageInterface.php delete mode 100644 src/system/src/Grav/Common/GPM/Remote/AbstractPackageCollection.php delete mode 100644 src/system/src/Grav/Common/GPM/Remote/Grav.php delete mode 100644 src/system/src/Grav/Common/GPM/Remote/Package.php delete mode 100644 src/system/src/Grav/Common/GPM/Remote/Packages.php delete mode 100644 src/system/src/Grav/Common/GPM/Remote/Plugins.php delete mode 100644 src/system/src/Grav/Common/GPM/Remote/Themes.php delete mode 100644 src/system/src/Grav/Common/GPM/Response.php delete mode 100644 src/system/src/Grav/Common/GPM/Upgrader.php delete mode 100644 src/system/src/Grav/Common/Getters.php delete mode 100644 src/system/src/Grav/Common/Grav.php delete mode 100644 src/system/src/Grav/Common/GravTrait.php delete mode 100644 src/system/src/Grav/Common/Helpers/Truncator.php delete mode 100644 src/system/src/Grav/Common/Inflector.php delete mode 100644 src/system/src/Grav/Common/Iterator.php delete mode 100644 src/system/src/Grav/Common/Language/Language.php delete mode 100644 src/system/src/Grav/Common/Language/LanguageCodes.php delete mode 100644 src/system/src/Grav/Common/Markdown/Parsedown.php delete mode 100644 src/system/src/Grav/Common/Markdown/ParsedownExtra.php delete mode 100644 src/system/src/Grav/Common/Markdown/ParsedownGravTrait.php delete mode 100644 src/system/src/Grav/Common/Page/Collection.php delete mode 100644 src/system/src/Grav/Common/Page/Header.php delete mode 100644 src/system/src/Grav/Common/Page/Media.php delete mode 100644 src/system/src/Grav/Common/Page/Medium/AudioMedium.php delete mode 100644 src/system/src/Grav/Common/Page/Medium/ImageFile.php delete mode 100644 src/system/src/Grav/Common/Page/Medium/ImageMedium.php delete mode 100644 src/system/src/Grav/Common/Page/Medium/Link.php delete mode 100644 src/system/src/Grav/Common/Page/Medium/Medium.php delete mode 100644 src/system/src/Grav/Common/Page/Medium/MediumFactory.php delete mode 100644 src/system/src/Grav/Common/Page/Medium/ParsedownHtmlTrait.php delete mode 100644 src/system/src/Grav/Common/Page/Medium/RenderableInterface.php delete mode 100644 src/system/src/Grav/Common/Page/Medium/StaticImageMedium.php delete mode 100644 src/system/src/Grav/Common/Page/Medium/StaticResizeTrait.php delete mode 100644 src/system/src/Grav/Common/Page/Medium/ThumbnailImageMedium.php delete mode 100644 src/system/src/Grav/Common/Page/Medium/VideoMedium.php delete mode 100644 src/system/src/Grav/Common/Page/Page.php delete mode 100644 src/system/src/Grav/Common/Page/Pages.php delete mode 100644 src/system/src/Grav/Common/Page/Types.php delete mode 100644 src/system/src/Grav/Common/Plugin.php delete mode 100644 src/system/src/Grav/Common/Plugins.php delete mode 100644 src/system/src/Grav/Common/Service/ConfigServiceProvider.php delete mode 100644 src/system/src/Grav/Common/Service/ErrorServiceProvider.php delete mode 100644 src/system/src/Grav/Common/Service/LoggerServiceProvider.php delete mode 100644 src/system/src/Grav/Common/Service/StreamsServiceProvider.php delete mode 100644 src/system/src/Grav/Common/Session.php delete mode 100644 src/system/src/Grav/Common/Taxonomy.php delete mode 100644 src/system/src/Grav/Common/Theme.php delete mode 100644 src/system/src/Grav/Common/Themes.php delete mode 100644 src/system/src/Grav/Common/Twig/Twig.php delete mode 100644 src/system/src/Grav/Common/Twig/TwigEnvironment.php delete mode 100644 src/system/src/Grav/Common/Twig/TwigExtension.php delete mode 100644 src/system/src/Grav/Common/Twig/WriteCacheFileTrait.php delete mode 100644 src/system/src/Grav/Common/Uri.php delete mode 100644 src/system/src/Grav/Common/User/Authentication.php delete mode 100644 src/system/src/Grav/Common/User/User.php delete mode 100644 src/system/src/Grav/Common/Utils.php delete mode 100644 src/system/src/Grav/Console/Cli/BackupCommand.php delete mode 100644 src/system/src/Grav/Console/Cli/CleanCommand.php delete mode 100644 src/system/src/Grav/Console/Cli/ClearCacheCommand.php delete mode 100644 src/system/src/Grav/Console/Cli/ComposerCommand.php delete mode 100644 src/system/src/Grav/Console/Cli/InstallCommand.php delete mode 100644 src/system/src/Grav/Console/Cli/NewProjectCommand.php delete mode 100644 src/system/src/Grav/Console/Cli/NewUserCommand.php delete mode 100644 src/system/src/Grav/Console/Cli/SandboxCommand.php delete mode 100644 src/system/src/Grav/Console/ConsoleTrait.php delete mode 100644 src/system/src/Grav/Console/Gpm/IndexCommand.php delete mode 100644 src/system/src/Grav/Console/Gpm/InfoCommand.php delete mode 100644 src/system/src/Grav/Console/Gpm/InstallCommand.php delete mode 100644 src/system/src/Grav/Console/Gpm/SelfupgradeCommand.php delete mode 100644 src/system/src/Grav/Console/Gpm/UninstallCommand.php delete mode 100644 src/system/src/Grav/Console/Gpm/UpdateCommand.php delete mode 100644 src/system/src/Grav/Console/Gpm/VersionCommand.php delete mode 100644 src/system/tests/Grav/Test/.gitkeep delete mode 100644 src/system/tests/Grav/TestCase.php delete mode 100644 src/system/tests/bootstrap.php delete mode 100644 src/system/tests/phpunit.xml delete mode 100644 src/user/accounts/.gitkeep delete mode 100644 src/user/config/site.yaml delete mode 100644 src/user/config/system.yaml delete mode 100644 src/user/data/.gitkeep delete mode 100644 src/user/pages/01.home/default.md delete mode 100644 src/user/plugins/.gitkeep delete mode 100644 src/user/plugins/admin/CHANGELOG.md delete mode 100644 src/user/plugins/admin/LICENSE delete mode 100644 src/user/plugins/admin/README.md delete mode 100644 src/user/plugins/admin/admin.php delete mode 100644 src/user/plugins/admin/admin.yaml delete mode 100644 src/user/plugins/admin/assets/admin-dashboard.png delete mode 100644 src/user/plugins/admin/blueprints.yaml delete mode 100644 src/user/plugins/admin/classes/admin.php delete mode 100644 src/user/plugins/admin/classes/controller.php delete mode 100644 src/user/plugins/admin/classes/gpm.php delete mode 100644 src/user/plugins/admin/classes/popularity.php delete mode 100644 src/user/plugins/admin/languages.yaml delete mode 100644 src/user/plugins/admin/pages/admin/backup.md delete mode 100644 src/user/plugins/admin/pages/admin/cache.md delete mode 100644 src/user/plugins/admin/pages/admin/dashboard.md delete mode 100644 src/user/plugins/admin/pages/admin/denied.md delete mode 100644 src/user/plugins/admin/pages/admin/forgot.md delete mode 100644 src/user/plugins/admin/pages/admin/info.md delete mode 100644 src/user/plugins/admin/pages/admin/installer.md delete mode 100644 src/user/plugins/admin/pages/admin/login.md delete mode 100644 src/user/plugins/admin/pages/admin/logout.md delete mode 100644 src/user/plugins/admin/pages/admin/logs.md delete mode 100644 src/user/plugins/admin/pages/admin/media.md delete mode 100644 src/user/plugins/admin/pages/admin/pages-filter.md delete mode 100644 src/user/plugins/admin/pages/admin/pages.md delete mode 100644 src/user/plugins/admin/pages/admin/plugins.md delete mode 100644 src/user/plugins/admin/pages/admin/reset.md delete mode 100644 src/user/plugins/admin/pages/admin/site.md delete mode 100644 src/user/plugins/admin/pages/admin/statistics.md delete mode 100644 src/user/plugins/admin/pages/admin/system.md delete mode 100644 src/user/plugins/admin/pages/admin/themes.md delete mode 100644 src/user/plugins/admin/pages/admin/update.md delete mode 100644 src/user/plugins/admin/pages/admin/users.md delete mode 100644 src/user/plugins/admin/themes/grav/css-compiled/nucleus.css delete mode 100644 src/user/plugins/admin/themes/grav/css-compiled/nucleus.css.map delete mode 100644 src/user/plugins/admin/themes/grav/css-compiled/template.css delete mode 100644 src/user/plugins/admin/themes/grav/css-compiled/template.css.map delete mode 100755 src/user/plugins/admin/themes/grav/css/chartist.min.css delete mode 100644 src/user/plugins/admin/themes/grav/css/codemirror/base16-light.css delete mode 100644 src/user/plugins/admin/themes/grav/css/codemirror/codemirror.css delete mode 100644 src/user/plugins/admin/themes/grav/css/codemirror/paper.css delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/Flat/editor.png delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/Flat/imagebrowser.png delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/Flat/indeterminate.gif delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/Flat/loading-image.gif delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/Flat/loading.gif delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/Flat/loading_2x.gif delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/Flat/slider-h.gif delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/Flat/slider-v.gif delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/Flat/sprite.png delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/Flat/sprite_2x.png delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/Flat/sprite_kpi.png delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/Flat/sprite_kpi_2x.png delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/README.md delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/grav.overrides.css delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/kendo.common.core.min.css delete mode 100644 src/user/plugins/admin/themes/grav/css/datepicker/kendo.flat.min.css delete mode 100644 src/user/plugins/admin/themes/grav/css/featherlight.min.css delete mode 100644 src/user/plugins/admin/themes/grav/css/font-awesome.min.css delete mode 100644 src/user/plugins/admin/themes/grav/css/hint.base.min.css delete mode 100644 src/user/plugins/admin/themes/grav/css/nucleus-ie10.css delete mode 100644 src/user/plugins/admin/themes/grav/css/nucleus-ie9.css delete mode 100644 src/user/plugins/admin/themes/grav/css/prism.css delete mode 100644 src/user/plugins/admin/themes/grav/css/pure-0.5.0/grids-min.css delete mode 100644 src/user/plugins/admin/themes/grav/css/selectize.min.css delete mode 100755 src/user/plugins/admin/themes/grav/css/uikit.css delete mode 100644 src/user/plugins/admin/themes/grav/fonts/FontAwesome.otf delete mode 100644 src/user/plugins/admin/themes/grav/fonts/fontawesome-webfont.eot delete mode 100644 src/user/plugins/admin/themes/grav/fonts/fontawesome-webfont.svg delete mode 100644 src/user/plugins/admin/themes/grav/fonts/fontawesome-webfont.ttf delete mode 100644 src/user/plugins/admin/themes/grav/fonts/fontawesome-webfont.woff delete mode 100644 src/user/plugins/admin/themes/grav/fonts/fontawesome-webfont.woff2 delete mode 100644 src/user/plugins/admin/themes/grav/images/favicon.png delete mode 100644 src/user/plugins/admin/themes/grav/images/logo.png delete mode 100644 src/user/plugins/admin/themes/grav/js/admin-all.js delete mode 100644 src/user/plugins/admin/themes/grav/js/ajax.js delete mode 100755 src/user/plugins/admin/themes/grav/js/chartist.min.js delete mode 100644 src/user/plugins/admin/themes/grav/js/codemirror-compressed.js delete mode 100644 src/user/plugins/admin/themes/grav/js/datepicker/README.md delete mode 100644 src/user/plugins/admin/themes/grav/js/datepicker/init.js delete mode 100644 src/user/plugins/admin/themes/grav/js/datepicker/kendo.custom.min.js delete mode 100644 src/user/plugins/admin/themes/grav/js/dropdown.js delete mode 100755 src/user/plugins/admin/themes/grav/js/dropzone.min.js delete mode 100644 src/user/plugins/admin/themes/grav/js/featherlight.min.js delete mode 100644 src/user/plugins/admin/themes/grav/js/form-attr.polyfill.js delete mode 100644 src/user/plugins/admin/themes/grav/js/forms.js delete mode 100644 src/user/plugins/admin/themes/grav/js/forms/fields/array.js delete mode 100644 src/user/plugins/admin/themes/grav/js/forms/fields/checkboxes.js delete mode 100644 src/user/plugins/admin/themes/grav/js/forms/fields/input.js delete mode 100644 src/user/plugins/admin/themes/grav/js/forms/fields/selectize.js delete mode 100644 src/user/plugins/admin/themes/grav/js/forms/fields/toggle.js delete mode 100644 src/user/plugins/admin/themes/grav/js/forms/form.js delete mode 100644 src/user/plugins/admin/themes/grav/js/html5shiv-printshiv.min.js delete mode 100644 src/user/plugins/admin/themes/grav/js/jquery-2.1.1.min.js delete mode 100644 src/user/plugins/admin/themes/grav/js/jquery.remodal.min.js delete mode 100644 src/user/plugins/admin/themes/grav/js/mdeditor.js delete mode 100644 src/user/plugins/admin/themes/grav/js/mobile.js delete mode 100644 src/user/plugins/admin/themes/grav/js/modernizr.custom.71422.js delete mode 100644 src/user/plugins/admin/themes/grav/js/pages-all.js delete mode 100644 src/user/plugins/admin/themes/grav/js/selectize.min.js delete mode 100644 src/user/plugins/admin/themes/grav/js/slugify.min.js delete mode 100644 src/user/plugins/admin/themes/grav/js/sortable.min.js delete mode 100644 src/user/plugins/admin/themes/grav/js/speakingurl.min.js delete mode 100755 src/user/plugins/admin/themes/grav/js/toastr.min.js delete mode 100755 src/user/plugins/admin/themes/grav/scss.sh delete mode 100644 src/user/plugins/admin/themes/grav/scss/configuration/nucleus/_base.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/configuration/nucleus/_breakpoints.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/configuration/nucleus/_core.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/configuration/nucleus/_layout.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/configuration/nucleus/_nav.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/configuration/nucleus/_typography.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/configuration/template/_base.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/configuration/template/_bullets.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/configuration/template/_colors.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/configuration/template/_typography.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/configuration/template/_variables.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/nucleus.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/nucleus/_core.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/nucleus/_flex.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/nucleus/_forms.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/nucleus/_typography.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/nucleus/functions/_base.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/nucleus/functions/_direction.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/nucleus/functions/_range.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/nucleus/mixins/_base.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/nucleus/mixins/_breakpoints.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/nucleus/mixins/_utilities.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/nucleus/particles/_align-text.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/nucleus/particles/_visibility.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/platform/joomla/_core.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_admin.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_buttons.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_core.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_custom.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_dropzone.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_editor.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_errors.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_extensions.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_fonts.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_forms.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_gpm.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_header.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_login.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_pages.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_phpinfo.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_remodal.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_tables.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_tabs.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_toastr.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/_typography.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/modules/_base.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/modules/_buttons.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/template/modules/_toggle-switch.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/_bourbon-deprecated-upcoming.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/_bourbon.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/addons/_button.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/addons/_clearfix.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/addons/_directional-values.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/addons/_ellipsis.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/addons/_font-family.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/addons/_hide-text.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/addons/_html5-input-types.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/addons/_position.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/addons/_prefixer.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/addons/_rem.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/addons/_retina-image.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/addons/_size.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/addons/_timing-functions.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/addons/_triangle.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/addons/_word-wrap.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_animation.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_appearance.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_backface-visibility.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_background-image.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_background.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_border-image.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_border-radius.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_box-sizing.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_calc.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_columns.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_filter.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_flex-box.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_font-face.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_font-feature-settings.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_hidpi-media-query.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_hyphens.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_image-rendering.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_keyframes.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_linear-gradient.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_perspective.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_placeholder.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_radial-gradient.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_transform.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_transition.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/css3/_user-select.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/functions/_assign.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/functions/_color-lightness.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/functions/_flex-grid.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/functions/_golden-ratio.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/functions/_grid-width.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/functions/_modular-scale.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/functions/_px-to-em.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/functions/_px-to-rem.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/functions/_strip-units.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/functions/_tint-shade.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/functions/_transition-property-name.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/functions/_unpack.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/helpers/_convert-units.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/helpers/_gradient-positions-parser.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/helpers/_is-num.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/helpers/_linear-angle-parser.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/helpers/_linear-gradient-parser.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/helpers/_linear-positions-parser.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/helpers/_linear-side-corner-parser.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/helpers/_radial-arg-parser.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/helpers/_radial-gradient-parser.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/helpers/_radial-positions-parser.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/helpers/_render-gradients.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/helpers/_shape-size-stripper.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/helpers/_str-to-num.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/settings/_prefixer.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/bourbon/settings/_px-to-em.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/color-schemer/_color-schemer.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/color-schemer/color-schemer/_cmyk.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/color-schemer/color-schemer/_color-adjustments.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/color-schemer/color-schemer/_color-schemer.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/color-schemer/color-schemer/_colorblind.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/color-schemer/color-schemer/_comparison.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/color-schemer/color-schemer/_equalize.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/color-schemer/color-schemer/_harmonize.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/color-schemer/color-schemer/_interpolation.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/color-schemer/color-schemer/_mix.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/color-schemer/color-schemer/_mixins.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/color-schemer/color-schemer/_ryb.scss delete mode 100644 src/user/plugins/admin/themes/grav/scss/vendor/color-schemer/color-schemer/_tint-shade.scss delete mode 100644 src/user/plugins/admin/themes/grav/templates/ajax.json.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/cache.json.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/dashboard.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/denied.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/email/base.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/email/reset.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/error.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/error.json.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forgot.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/field.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/array/array.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/blueprint/blueprint.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/column/column.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/columns/columns.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/dateformat/dateformat.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/fieldset/fieldset.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/frontmatter/frontmatter.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/ignore/ignore.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/list/list.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/markdown/markdown.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/order/order.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/pagemedia/pagemedia.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/pages/pages.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/section/section.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/selectize/selectize.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/tab/tab.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/tabs/tabs.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/taxonomy/taxonomy.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/themeselect/themeselect.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/forms/fields/toggle/toggle.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/info.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/installer.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/login.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/logout.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/logs.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/media.json.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/pages-filter.json.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/pages.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/base.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/blueprints-new.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/blueprints-raw.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/blueprints.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/header.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/javascript-config.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/login.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/messages.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/nav.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/page-children.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/page-move.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/plugin-data.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/plugins-details.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/plugins-list.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/theme.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/themes-details.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/themes-list.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/toolbar.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/users-details.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/partials/users-list.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/plugins.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/reset.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/site.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/statistics.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/system.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/themes.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/update.json.twig delete mode 100644 src/user/plugins/admin/themes/grav/templates/users.html.twig delete mode 100644 src/user/plugins/admin/themes/grav/theme.yaml delete mode 100644 src/user/plugins/admin/twig/AdminTwigExtension.php delete mode 100644 src/user/plugins/email/CHANGELOG.md delete mode 100644 src/user/plugins/email/LICENSE delete mode 100644 src/user/plugins/email/README.md delete mode 100644 src/user/plugins/email/blueprints.yaml delete mode 100644 src/user/plugins/email/classes/email.php delete mode 100644 src/user/plugins/email/composer.json delete mode 100644 src/user/plugins/email/email.php delete mode 100644 src/user/plugins/email/email.yaml delete mode 100644 src/user/plugins/email/vendor/autoload.php delete mode 100644 src/user/plugins/email/vendor/composer/ClassLoader.php delete mode 100644 src/user/plugins/email/vendor/composer/autoload_classmap.php delete mode 100644 src/user/plugins/email/vendor/composer/autoload_files.php delete mode 100644 src/user/plugins/email/vendor/composer/autoload_namespaces.php delete mode 100644 src/user/plugins/email/vendor/composer/autoload_psr4.php delete mode 100644 src/user/plugins/email/vendor/composer/autoload_real.php delete mode 100644 src/user/plugins/email/vendor/composer/installed.json delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/CHANGES delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/LICENSE delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/README delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/VERSION delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Attachment.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ConfigurableSpool.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/DependencyContainer.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/DependencyException.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/EmbeddedFile.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoding.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/CommandEvent.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/CommandListener.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/Event.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/EventListener.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/EventObject.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/ResponseListener.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SendEvent.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SendListener.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FailoverTransport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FileSpool.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FileStream.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Filterable.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Image.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/InputByteStream.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/IoException.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MailTransport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MemorySpool.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Message.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Attachment.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Grammar.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Header.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderFactory.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderSet.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Message.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/MimePart.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MimePart.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/NullTransport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/OutputByteStream.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Logger.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Exception.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporter.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Timer.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Preferences.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/RfcComplianceException.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SendmailTransport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SignedMessage.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signer.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/BodySigner.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SmtpTransport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Spool.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SpoolTransport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilter.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SwiftException.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/MailTransport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/NullTransport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SpoolTransport.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/TransportException.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Validate.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/dependency_maps/cache_deps.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/dependency_maps/message_deps.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/dependency_maps/mime_deps.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/dependency_maps/transport_deps.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/mime_types.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/preferences.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/swift_init.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/swift_required.php delete mode 100644 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/swift_required_pear.php delete mode 100755 src/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/swiftmailer_generate_mimes_config.php delete mode 100644 src/user/plugins/error/CHANGELOG.md delete mode 100644 src/user/plugins/error/LICENSE delete mode 100644 src/user/plugins/error/README.md delete mode 100644 src/user/plugins/error/assets/readme_1.png delete mode 100644 src/user/plugins/error/blueprints.yaml delete mode 100644 src/user/plugins/error/error.php delete mode 100644 src/user/plugins/error/error.yaml delete mode 100644 src/user/plugins/error/pages/error.md delete mode 100644 src/user/plugins/error/templates/error.html.twig delete mode 100644 src/user/plugins/error/templates/error.json.twig delete mode 100644 src/user/plugins/form/CHANGELOG.md delete mode 100644 src/user/plugins/form/LICENSE delete mode 100644 src/user/plugins/form/README.md delete mode 100644 src/user/plugins/form/blueprints.yaml delete mode 100644 src/user/plugins/form/classes/form.php delete mode 100644 src/user/plugins/form/form.php delete mode 100644 src/user/plugins/form/form.yaml delete mode 100644 src/user/plugins/form/languages.yaml delete mode 100644 src/user/plugins/form/templates/forms/data.html.twig delete mode 100644 src/user/plugins/form/templates/forms/data.txt.twig delete mode 100644 src/user/plugins/form/templates/forms/default/data.html.twig delete mode 100644 src/user/plugins/form/templates/forms/default/data.txt.twig delete mode 100644 src/user/plugins/form/templates/forms/default/form.html.twig delete mode 100644 src/user/plugins/form/templates/forms/field.html.twig delete mode 100644 src/user/plugins/form/templates/forms/fields/captcha/captcha.html.twig delete mode 100644 src/user/plugins/form/templates/forms/fields/checkbox/checkbox.html.twig delete mode 100644 src/user/plugins/form/templates/forms/fields/checkbox/checkbox.yaml delete mode 100644 src/user/plugins/form/templates/forms/fields/checkboxes/checkboxes.html.twig delete mode 100644 src/user/plugins/form/templates/forms/fields/date/date.html.twig delete mode 100644 src/user/plugins/form/templates/forms/fields/datetime/datetime.html.twig delete mode 100644 src/user/plugins/form/templates/forms/fields/display/display.html.twig delete mode 100644 src/user/plugins/form/templates/forms/fields/email/email.html.twig delete mode 100644 src/user/plugins/form/templates/forms/fields/hidden/hidden.html.twig delete mode 100644 src/user/plugins/form/templates/forms/fields/password/password.html.twig delete mode 100644 src/user/plugins/form/templates/forms/fields/radio/radio.html.twig delete mode 100644 src/user/plugins/form/templates/forms/fields/select/select.html.twig delete mode 100644 src/user/plugins/form/templates/forms/fields/spacer/spacer.html.twig delete mode 100644 src/user/plugins/form/templates/forms/fields/text/text.html.twig delete mode 100644 src/user/plugins/form/templates/forms/fields/textarea/textarea.html.twig delete mode 100644 src/user/plugins/form/templates/forms/form.html.twig delete mode 100644 src/user/plugins/login/CHANGELOG.md delete mode 100644 src/user/plugins/login/LICENSE delete mode 100644 src/user/plugins/login/README.md delete mode 100644 src/user/plugins/login/blueprints.yaml delete mode 100644 src/user/plugins/login/classes/controller.php delete mode 100644 src/user/plugins/login/css/login.css delete mode 100644 src/user/plugins/login/languages.yaml delete mode 100644 src/user/plugins/login/login.php delete mode 100644 src/user/plugins/login/login.yaml delete mode 100644 src/user/plugins/login/pages/login.md delete mode 100644 src/user/plugins/login/templates/login.html.twig delete mode 100644 src/user/plugins/login/templates/login.json.twig delete mode 100644 src/user/plugins/login/templates/partials/login-form.html.twig delete mode 100644 src/user/plugins/login/templates/partials/login-status.html.twig delete mode 100644 src/user/plugins/login/templates/partials/messages.html.twig delete mode 100644 src/user/plugins/problems/CHANGELOG.md delete mode 100644 src/user/plugins/problems/LICENSE delete mode 100644 src/user/plugins/problems/README.md delete mode 100644 src/user/plugins/problems/assets/readme_1.png delete mode 100644 src/user/plugins/problems/blueprints.yaml delete mode 100644 src/user/plugins/problems/css/problems.css delete mode 100644 src/user/plugins/problems/css/template.css delete mode 100644 src/user/plugins/problems/html/problems.html delete mode 100644 src/user/plugins/problems/problems.php delete mode 100644 src/user/plugins/problems/problems.yaml delete mode 100644 src/user/themes/.gitkeep delete mode 100644 src/user/themes/antimatter/CHANGELOG.md delete mode 100644 src/user/themes/antimatter/LICENSE delete mode 100644 src/user/themes/antimatter/README.md delete mode 100644 src/user/themes/antimatter/antimatter.php delete mode 100644 src/user/themes/antimatter/antimatter.yaml delete mode 100644 src/user/themes/antimatter/assets/readme_1.png delete mode 100644 src/user/themes/antimatter/blueprints.yaml delete mode 100644 src/user/themes/antimatter/blueprints/asset/file.yaml delete mode 100644 src/user/themes/antimatter/blueprints/blog.yaml delete mode 100644 src/user/themes/antimatter/blueprints/form.yaml delete mode 100644 src/user/themes/antimatter/blueprints/item.yaml delete mode 100644 src/user/themes/antimatter/blueprints/modular/features.yaml delete mode 100644 src/user/themes/antimatter/blueprints/modular/showcase.yaml delete mode 100644 src/user/themes/antimatter/blueprints/modular/text.yaml delete mode 100644 src/user/themes/antimatter/composer.json delete mode 100644 src/user/themes/antimatter/css-compiled/nucleus.css delete mode 100644 src/user/themes/antimatter/css-compiled/nucleus.css.map delete mode 100644 src/user/themes/antimatter/css-compiled/particles.css delete mode 100644 src/user/themes/antimatter/css-compiled/particles.css.map delete mode 100644 src/user/themes/antimatter/css-compiled/template.css delete mode 100644 src/user/themes/antimatter/css-compiled/template.css.map delete mode 100644 src/user/themes/antimatter/css/font-awesome.min.css delete mode 100644 src/user/themes/antimatter/css/nucleus-ie10.css delete mode 100644 src/user/themes/antimatter/css/nucleus-ie9.css delete mode 100644 src/user/themes/antimatter/css/prism.css delete mode 100644 src/user/themes/antimatter/css/pure-0.5.0/grids-min.css delete mode 100644 src/user/themes/antimatter/css/slidebars.min.css delete mode 100644 src/user/themes/antimatter/fonts/FontAwesome.otf delete mode 100644 src/user/themes/antimatter/fonts/fontawesome-webfont.eot delete mode 100644 src/user/themes/antimatter/fonts/fontawesome-webfont.svg delete mode 100644 src/user/themes/antimatter/fonts/fontawesome-webfont.ttf delete mode 100644 src/user/themes/antimatter/fonts/fontawesome-webfont.woff delete mode 100644 src/user/themes/antimatter/images/favicon.png delete mode 100644 src/user/themes/antimatter/images/logo.png delete mode 100644 src/user/themes/antimatter/js/antimatter.js delete mode 100644 src/user/themes/antimatter/js/html5shiv-printshiv.min.js delete mode 100644 src/user/themes/antimatter/js/modernizr.custom.71422.js delete mode 100644 src/user/themes/antimatter/js/singlePageNav.min.js delete mode 100644 src/user/themes/antimatter/js/slidebars.min.js delete mode 100644 src/user/themes/antimatter/languages.yaml delete mode 100644 src/user/themes/antimatter/screenshot.jpg delete mode 100755 src/user/themes/antimatter/scss.sh delete mode 100644 src/user/themes/antimatter/scss/configuration/nucleus/_base.scss delete mode 100644 src/user/themes/antimatter/scss/configuration/nucleus/_breakpoints.scss delete mode 100644 src/user/themes/antimatter/scss/configuration/nucleus/_core.scss delete mode 100644 src/user/themes/antimatter/scss/configuration/nucleus/_layout.scss delete mode 100644 src/user/themes/antimatter/scss/configuration/nucleus/_nav.scss delete mode 100644 src/user/themes/antimatter/scss/configuration/nucleus/_typography.scss delete mode 100644 src/user/themes/antimatter/scss/configuration/template/_base.scss delete mode 100644 src/user/themes/antimatter/scss/configuration/template/_bullets.scss delete mode 100644 src/user/themes/antimatter/scss/configuration/template/_colors.scss delete mode 100644 src/user/themes/antimatter/scss/configuration/template/_typography.scss delete mode 100644 src/user/themes/antimatter/scss/configuration/template/_variables.scss delete mode 100644 src/user/themes/antimatter/scss/nucleus.scss delete mode 100644 src/user/themes/antimatter/scss/nucleus/_core.scss delete mode 100644 src/user/themes/antimatter/scss/nucleus/_flex.scss delete mode 100644 src/user/themes/antimatter/scss/nucleus/_forms.scss delete mode 100644 src/user/themes/antimatter/scss/nucleus/_typography.scss delete mode 100644 src/user/themes/antimatter/scss/nucleus/functions/_base.scss delete mode 100644 src/user/themes/antimatter/scss/nucleus/functions/_direction.scss delete mode 100644 src/user/themes/antimatter/scss/nucleus/functions/_range.scss delete mode 100644 src/user/themes/antimatter/scss/nucleus/mixins/_base.scss delete mode 100644 src/user/themes/antimatter/scss/nucleus/mixins/_breakpoints.scss delete mode 100644 src/user/themes/antimatter/scss/nucleus/mixins/_utilities.scss delete mode 100644 src/user/themes/antimatter/scss/nucleus/particles/_align-text.scss delete mode 100644 src/user/themes/antimatter/scss/nucleus/particles/_visibility.scss delete mode 100644 src/user/themes/antimatter/scss/particles.scss delete mode 100644 src/user/themes/antimatter/scss/template.scss delete mode 100644 src/user/themes/antimatter/scss/template/_blog.scss delete mode 100644 src/user/themes/antimatter/scss/template/_bullets.scss delete mode 100644 src/user/themes/antimatter/scss/template/_buttons.scss delete mode 100644 src/user/themes/antimatter/scss/template/_core.scss delete mode 100644 src/user/themes/antimatter/scss/template/_custom.scss delete mode 100644 src/user/themes/antimatter/scss/template/_errors.scss delete mode 100644 src/user/themes/antimatter/scss/template/_extensions.scss delete mode 100644 src/user/themes/antimatter/scss/template/_fonts.scss delete mode 100644 src/user/themes/antimatter/scss/template/_footer.scss delete mode 100644 src/user/themes/antimatter/scss/template/_forms.scss delete mode 100644 src/user/themes/antimatter/scss/template/_header.scss delete mode 100644 src/user/themes/antimatter/scss/template/_panel.scss delete mode 100644 src/user/themes/antimatter/scss/template/_simplesearch.scss delete mode 100644 src/user/themes/antimatter/scss/template/_tables.scss delete mode 100644 src/user/themes/antimatter/scss/template/_typography.scss delete mode 100644 src/user/themes/antimatter/scss/template/modular/_all.scss delete mode 100644 src/user/themes/antimatter/scss/template/modular/_features.scss delete mode 100644 src/user/themes/antimatter/scss/template/modular/_showcase.scss delete mode 100644 src/user/themes/antimatter/scss/template/modular/_text.scss delete mode 100644 src/user/themes/antimatter/scss/template/modules/_base.scss delete mode 100644 src/user/themes/antimatter/scss/template/modules/_buttons.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/_bourbon-deprecated-upcoming.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/_bourbon.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/addons/_button.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/addons/_clearfix.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/addons/_directional-values.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/addons/_ellipsis.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/addons/_font-family.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/addons/_hide-text.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/addons/_html5-input-types.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/addons/_position.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/addons/_prefixer.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/addons/_rem.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/addons/_retina-image.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/addons/_size.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/addons/_timing-functions.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/addons/_triangle.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/addons/_word-wrap.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_animation.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_appearance.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_backface-visibility.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_background-image.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_background.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_border-image.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_border-radius.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_box-sizing.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_calc.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_columns.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_filter.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_flex-box.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_font-face.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_font-feature-settings.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_hidpi-media-query.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_hyphens.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_image-rendering.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_keyframes.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_linear-gradient.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_perspective.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_placeholder.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_radial-gradient.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_transform.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_transition.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/css3/_user-select.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/functions/_assign.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/functions/_color-lightness.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/functions/_flex-grid.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/functions/_golden-ratio.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/functions/_grid-width.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/functions/_modular-scale.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/functions/_px-to-em.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/functions/_px-to-rem.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/functions/_strip-units.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/functions/_tint-shade.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/functions/_transition-property-name.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/functions/_unpack.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/helpers/_convert-units.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/helpers/_gradient-positions-parser.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/helpers/_is-num.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/helpers/_linear-angle-parser.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/helpers/_linear-gradient-parser.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/helpers/_linear-positions-parser.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/helpers/_linear-side-corner-parser.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/helpers/_radial-arg-parser.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/helpers/_radial-gradient-parser.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/helpers/_radial-positions-parser.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/helpers/_render-gradients.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/helpers/_shape-size-stripper.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/helpers/_str-to-num.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/settings/_prefixer.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/bourbon/settings/_px-to-em.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/color-schemer/_color-schemer.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/color-schemer/color-schemer/_cmyk.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/color-schemer/color-schemer/_color-adjustments.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/color-schemer/color-schemer/_color-schemer.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/color-schemer/color-schemer/_colorblind.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/color-schemer/color-schemer/_comparison.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/color-schemer/color-schemer/_equalize.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/color-schemer/color-schemer/_harmonize.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/color-schemer/color-schemer/_interpolation.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/color-schemer/color-schemer/_mix.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/color-schemer/color-schemer/_mixins.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/color-schemer/color-schemer/_ryb.scss delete mode 100644 src/user/themes/antimatter/scss/vendor/color-schemer/color-schemer/_tint-shade.scss delete mode 100644 src/user/themes/antimatter/templates/blog.html.twig delete mode 100644 src/user/themes/antimatter/templates/default.html.twig delete mode 100644 src/user/themes/antimatter/templates/error.html.twig delete mode 100644 src/user/themes/antimatter/templates/form.html.twig delete mode 100644 src/user/themes/antimatter/templates/formdata.html.twig delete mode 100644 src/user/themes/antimatter/templates/forms/data.html.twig delete mode 100644 src/user/themes/antimatter/templates/forms/data.txt.twig delete mode 100644 src/user/themes/antimatter/templates/forms/form.html.twig delete mode 100644 src/user/themes/antimatter/templates/item.html.twig delete mode 100644 src/user/themes/antimatter/templates/macros/macros.html.twig delete mode 100644 src/user/themes/antimatter/templates/modular.html.twig delete mode 100644 src/user/themes/antimatter/templates/modular/features.html.twig delete mode 100644 src/user/themes/antimatter/templates/modular/showcase.html.twig delete mode 100644 src/user/themes/antimatter/templates/modular/text.html.twig delete mode 100644 src/user/themes/antimatter/templates/partials/base.html.twig delete mode 100644 src/user/themes/antimatter/templates/partials/blog_item.html.twig delete mode 100644 src/user/themes/antimatter/templates/partials/metadata.html.twig delete mode 100644 src/user/themes/antimatter/templates/partials/navigation.html.twig delete mode 100644 src/user/themes/antimatter/templates/partials/sidebar.html.twig delete mode 100644 src/user/themes/antimatter/templates/snipcart.html.twig delete mode 100644 src/user/themes/antimatter/thumbnail.jpg delete mode 100644 src/vendor/autoload.php delete mode 100644 src/vendor/composer/ClassLoader.php delete mode 100644 src/vendor/composer/LICENSE delete mode 100644 src/vendor/composer/autoload_classmap.php delete mode 100644 src/vendor/composer/autoload_files.php delete mode 100644 src/vendor/composer/autoload_namespaces.php delete mode 100644 src/vendor/composer/autoload_psr4.php delete mode 100644 src/vendor/composer/autoload_real.php delete mode 100644 src/vendor/composer/installed.json delete mode 100644 src/vendor/doctrine/cache/LICENSE delete mode 100644 src/vendor/doctrine/cache/README.md delete mode 100644 src/vendor/doctrine/cache/UPGRADE.md delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ApcCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ArrayCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Cache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/CacheProvider.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ChainCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ClearableCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/CouchbaseCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FileCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FilesystemCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FlushableCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/MemcacheCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/MemcachedCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/MongoDBCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/MultiGetCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/PhpFileCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/PredisCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/RedisCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/RiakCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/SQLite3Cache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Version.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/VoidCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/WinCacheCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/XcacheCache.php delete mode 100644 src/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ZendDataCache.php delete mode 100644 src/vendor/donatj/phpuseragentparser/CONTRIBUTING.md delete mode 100644 src/vendor/donatj/phpuseragentparser/LICENSE.md delete mode 100644 src/vendor/donatj/phpuseragentparser/README.md delete mode 100644 src/vendor/donatj/phpuseragentparser/Source/UserAgentParser.php delete mode 100644 src/vendor/erusev/parsedown-extra/LICENSE.txt delete mode 100644 src/vendor/erusev/parsedown-extra/ParsedownExtra.php delete mode 100644 src/vendor/erusev/parsedown-extra/README.md delete mode 100644 src/vendor/erusev/parsedown/LICENSE.txt delete mode 100755 src/vendor/erusev/parsedown/Parsedown.php delete mode 100644 src/vendor/erusev/parsedown/README.md delete mode 100644 src/vendor/filp/whoops/.gitattributes delete mode 100644 src/vendor/filp/whoops/CONTRIBUTING.md delete mode 100644 src/vendor/filp/whoops/LICENSE.md delete mode 100644 src/vendor/filp/whoops/README.md delete mode 100644 src/vendor/filp/whoops/src/Whoops/Exception/ErrorException.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Exception/Formatter.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Exception/Frame.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Exception/Inspector.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Handler/CallbackHandler.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Handler/Handler.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Handler/HandlerInterface.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Handler/SoapResponseHandler.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Provider/Phalcon/WhoopsServiceProvider.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Provider/Silex/WhoopsServiceProvider.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css delete mode 100644 src/vendor/filp/whoops/src/Whoops/Resources/js/whoops.base.js delete mode 100644 src/vendor/filp/whoops/src/Whoops/Resources/js/zepto.min.js delete mode 100644 src/vendor/filp/whoops/src/Whoops/Resources/views/env_details.html.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Resources/views/frame_code.html.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Resources/views/frame_list.html.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Resources/views/header.html.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Run.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Util/Misc.php delete mode 100644 src/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php delete mode 100644 src/vendor/filp/whoops/src/deprecated/Zend/ExceptionStrategy.php delete mode 100644 src/vendor/filp/whoops/src/deprecated/Zend/Module.php delete mode 100644 src/vendor/filp/whoops/src/deprecated/Zend/RouteNotFoundStrategy.php delete mode 100644 src/vendor/filp/whoops/src/deprecated/Zend/module.config.example.php delete mode 100644 src/vendor/gregwar/cache/Gregwar/Cache/Cache.php delete mode 100644 src/vendor/gregwar/cache/Gregwar/Cache/GarbageCollect.php delete mode 100644 src/vendor/gregwar/cache/Gregwar/Cache/LICENSE delete mode 100644 src/vendor/gregwar/cache/Gregwar/Cache/README.md delete mode 100644 src/vendor/gregwar/cache/Gregwar/Cache/autoload.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/Adapter/Adapter.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/Adapter/AdapterInterface.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/Adapter/Common.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/Adapter/GD.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/Adapter/Imagick.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/Exceptions/GenerationError.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/GarbageCollect.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/Image.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/ImageColor.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/LICENSE delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/README.md delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/Source/Create.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/Source/Data.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/Source/File.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/Source/Resource.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/Source/Source.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/autoload.php delete mode 100644 src/vendor/gregwar/image/Gregwar/Image/images/error.jpg delete mode 100644 src/vendor/ircmaxell/password-compat/.gitattributes delete mode 100644 src/vendor/ircmaxell/password-compat/LICENSE.md delete mode 100644 src/vendor/ircmaxell/password-compat/README.md delete mode 100644 src/vendor/ircmaxell/password-compat/lib/password.php delete mode 100644 src/vendor/maximebf/debugbar/.gitattributes delete mode 100644 src/vendor/maximebf/debugbar/CHANGELOG.md delete mode 100644 src/vendor/maximebf/debugbar/CONTRIBUTING.md delete mode 100644 src/vendor/maximebf/debugbar/LICENSE delete mode 100644 src/vendor/maximebf/debugbar/README.md delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Bridge/CacheCacheCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Bridge/DoctrineCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Bridge/MonologCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Bridge/Propel2Collector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Bridge/PropelCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Bridge/SlimCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Bridge/SwiftMailer/SwiftLogCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Bridge/SwiftMailer/SwiftMailCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Bridge/Twig/TraceableTwigEnvironment.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Bridge/Twig/TraceableTwigTemplate.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Bridge/Twig/TwigCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/AggregatedCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/AssetProvider.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/ConfigCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/DataCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/DataCollectorInterface.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/ExceptionsCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/LocalizationCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/MemoryCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/MessagesAggregateInterface.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/MessagesCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/PDO/PDOCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/PDO/TraceablePDO.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/PDO/TraceablePDOStatement.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/PDO/TracedStatement.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/PhpInfoCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/Renderable.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/RequestDataCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataCollector/TimeDataCollector.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataFormatter/DataFormatter.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DataFormatter/DataFormatterInterface.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DebugBar.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/DebugBarException.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/HttpDriverInterface.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/JavascriptRenderer.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/OpenHandler.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/PhpHttpDriver.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/RequestIdGenerator.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/RequestIdGeneratorInterface.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/debugbar.css delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/debugbar.js delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/openhandler.css delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/openhandler.js delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/vendor/font-awesome/css/font-awesome.min.css delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/vendor/font-awesome/fonts/FontAwesome.otf delete mode 100755 src/vendor/maximebf/debugbar/src/DebugBar/Resources/vendor/font-awesome/fonts/fontawesome-webfont.eot delete mode 100755 src/vendor/maximebf/debugbar/src/DebugBar/Resources/vendor/font-awesome/fonts/fontawesome-webfont.svg delete mode 100755 src/vendor/maximebf/debugbar/src/DebugBar/Resources/vendor/font-awesome/fonts/fontawesome-webfont.ttf delete mode 100755 src/vendor/maximebf/debugbar/src/DebugBar/Resources/vendor/font-awesome/fonts/fontawesome-webfont.woff delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/vendor/font-awesome/fonts/fontawesome-webfont.woff2 delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/vendor/highlightjs/highlight.pack.js delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/vendor/highlightjs/styles/github.css delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/vendor/jquery/dist/jquery.min.js delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/widgets.css delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/widgets.js delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/widgets/mails/widget.css delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/widgets/mails/widget.js delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/widgets/sqlqueries/widget.css delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/widgets/sqlqueries/widget.js delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/widgets/templates/widget.css delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Resources/widgets/templates/widget.js delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/StandardDebugBar.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Storage/FileStorage.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Storage/MemcachedStorage.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Storage/PdoStorage.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Storage/RedisStorage.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Storage/StorageInterface.php delete mode 100644 src/vendor/maximebf/debugbar/src/DebugBar/Storage/pdo_storage_schema.sql delete mode 100644 src/vendor/monolog/monolog/.gitattributes delete mode 100644 src/vendor/monolog/monolog/.php_cs delete mode 100644 src/vendor/monolog/monolog/CHANGELOG.mdown delete mode 100644 src/vendor/monolog/monolog/LICENSE delete mode 100644 src/vendor/monolog/monolog/README.mdown delete mode 100644 src/vendor/monolog/monolog/src/Monolog/ErrorHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/RavenHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Logger.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php delete mode 100644 src/vendor/monolog/monolog/src/Monolog/Registry.php delete mode 100644 src/vendor/mrclay/minify/.gitattributes delete mode 100644 src/vendor/mrclay/minify/HISTORY.txt delete mode 100644 src/vendor/mrclay/minify/LICENSE.txt delete mode 100644 src/vendor/mrclay/minify/MIN.txt delete mode 100644 src/vendor/mrclay/minify/README.txt delete mode 100644 src/vendor/mrclay/minify/UPGRADING.txt delete mode 100644 src/vendor/mrclay/minify/min/lib/CSSmin.php delete mode 100644 src/vendor/mrclay/minify/min/lib/DooDigestAuth.php delete mode 100644 src/vendor/mrclay/minify/min/lib/FirePHP.php delete mode 100644 src/vendor/mrclay/minify/min/lib/HTTP/ConditionalGet.php delete mode 100644 src/vendor/mrclay/minify/min/lib/HTTP/Encoder.php delete mode 100644 src/vendor/mrclay/minify/min/lib/JSMin.php delete mode 100644 src/vendor/mrclay/minify/min/lib/JSMinPlus.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Build.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/CSS.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/CSS/Compressor.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/CSS/UriRewriter.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/CSSmin.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Cache/APC.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Cache/File.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Cache/Memcache.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Cache/WinCache.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Cache/XCache.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Cache/ZendPlatform.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/ClosureCompiler.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/CommentPreserver.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Controller/Base.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Controller/Files.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Controller/Groups.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Controller/MinApp.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Controller/Page.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Controller/Version1.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/DebugDetector.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/HTML.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/HTML/Helper.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/ImportProcessor.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/JS/ClosureCompiler.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Lines.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Loader.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Logger.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Packer.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/Source.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/YUI/CssCompressor.java delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/YUI/CssCompressor.php delete mode 100644 src/vendor/mrclay/minify/min/lib/Minify/YUICompressor.php delete mode 100644 src/vendor/mrclay/minify/min/lib/MrClay/Cli.php delete mode 100644 src/vendor/mrclay/minify/min/lib/MrClay/Cli/Arg.php delete mode 100644 src/vendor/pimple/pimple/CHANGELOG delete mode 100644 src/vendor/pimple/pimple/LICENSE delete mode 100644 src/vendor/pimple/pimple/README.rst delete mode 100644 src/vendor/pimple/pimple/src/Pimple/Container.php delete mode 100644 src/vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.php delete mode 100644 src/vendor/psr/log/LICENSE delete mode 100644 src/vendor/psr/log/Psr/Log/AbstractLogger.php delete mode 100644 src/vendor/psr/log/Psr/Log/InvalidArgumentException.php delete mode 100644 src/vendor/psr/log/Psr/Log/LogLevel.php delete mode 100644 src/vendor/psr/log/Psr/Log/LoggerAwareInterface.php delete mode 100644 src/vendor/psr/log/Psr/Log/LoggerAwareTrait.php delete mode 100644 src/vendor/psr/log/Psr/Log/LoggerInterface.php delete mode 100644 src/vendor/psr/log/Psr/Log/LoggerTrait.php delete mode 100644 src/vendor/psr/log/Psr/Log/NullLogger.php delete mode 100644 src/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php delete mode 100644 src/vendor/psr/log/README.md delete mode 100644 src/vendor/rockettheme/toolbox/ArrayTraits/src/ArrayAccess.php delete mode 100644 src/vendor/rockettheme/toolbox/ArrayTraits/src/ArrayAccessWithGetters.php delete mode 100644 src/vendor/rockettheme/toolbox/ArrayTraits/src/Constructor.php delete mode 100644 src/vendor/rockettheme/toolbox/ArrayTraits/src/Countable.php delete mode 100644 src/vendor/rockettheme/toolbox/ArrayTraits/src/Export.php delete mode 100644 src/vendor/rockettheme/toolbox/ArrayTraits/src/ExportInterface.php delete mode 100644 src/vendor/rockettheme/toolbox/ArrayTraits/src/Iterator.php delete mode 100644 src/vendor/rockettheme/toolbox/ArrayTraits/src/NestedArrayAccess.php delete mode 100644 src/vendor/rockettheme/toolbox/ArrayTraits/src/NestedArrayAccessWithGetters.php delete mode 100644 src/vendor/rockettheme/toolbox/ArrayTraits/src/Serializable.php delete mode 100644 src/vendor/rockettheme/toolbox/Blueprints/src/Blueprints.php delete mode 100644 src/vendor/rockettheme/toolbox/CHANGELOG.md delete mode 100644 src/vendor/rockettheme/toolbox/DI/src/Container.php delete mode 100644 src/vendor/rockettheme/toolbox/DI/src/ServiceProviderInterface.php delete mode 100644 src/vendor/rockettheme/toolbox/Event/src/Event.php delete mode 100644 src/vendor/rockettheme/toolbox/Event/src/EventDispatcher.php delete mode 100644 src/vendor/rockettheme/toolbox/Event/src/EventSubscriberInterface.php delete mode 100644 src/vendor/rockettheme/toolbox/File/src/File.php delete mode 100644 src/vendor/rockettheme/toolbox/File/src/FileInterface.php delete mode 100644 src/vendor/rockettheme/toolbox/File/src/IniFile.php delete mode 100644 src/vendor/rockettheme/toolbox/File/src/JsonFile.php delete mode 100644 src/vendor/rockettheme/toolbox/File/src/LogFile.php delete mode 100644 src/vendor/rockettheme/toolbox/File/src/MarkdownFile.php delete mode 100644 src/vendor/rockettheme/toolbox/File/src/MoFile.php delete mode 100644 src/vendor/rockettheme/toolbox/File/src/PhpFile.php delete mode 100644 src/vendor/rockettheme/toolbox/File/src/YamlFile.php delete mode 100644 src/vendor/rockettheme/toolbox/LICENSE delete mode 100644 src/vendor/rockettheme/toolbox/README.md delete mode 100644 src/vendor/rockettheme/toolbox/ResourceLocator/src/RecursiveUniformResourceIterator.php delete mode 100644 src/vendor/rockettheme/toolbox/ResourceLocator/src/ResourceLocatorInterface.php delete mode 100644 src/vendor/rockettheme/toolbox/ResourceLocator/src/UniformResourceIterator.php delete mode 100644 src/vendor/rockettheme/toolbox/ResourceLocator/src/UniformResourceLocator.php delete mode 100644 src/vendor/rockettheme/toolbox/Session/src/Message.php delete mode 100644 src/vendor/rockettheme/toolbox/Session/src/Session.php delete mode 100644 src/vendor/rockettheme/toolbox/Session/tests/MessageTest.php delete mode 100644 src/vendor/rockettheme/toolbox/StreamWrapper/src/ReadOnlyStream.php delete mode 100644 src/vendor/rockettheme/toolbox/StreamWrapper/src/Stream.php delete mode 100644 src/vendor/rockettheme/toolbox/StreamWrapper/src/StreamBuilder.php delete mode 100644 src/vendor/rockettheme/toolbox/StreamWrapper/src/StreamInterface.php delete mode 100644 src/vendor/symfony/console/Application.php delete mode 100644 src/vendor/symfony/console/CHANGELOG.md delete mode 100644 src/vendor/symfony/console/Command/Command.php delete mode 100644 src/vendor/symfony/console/Command/HelpCommand.php delete mode 100644 src/vendor/symfony/console/Command/ListCommand.php delete mode 100644 src/vendor/symfony/console/ConsoleEvents.php delete mode 100644 src/vendor/symfony/console/Descriptor/ApplicationDescription.php delete mode 100644 src/vendor/symfony/console/Descriptor/Descriptor.php delete mode 100644 src/vendor/symfony/console/Descriptor/DescriptorInterface.php delete mode 100644 src/vendor/symfony/console/Descriptor/JsonDescriptor.php delete mode 100644 src/vendor/symfony/console/Descriptor/MarkdownDescriptor.php delete mode 100644 src/vendor/symfony/console/Descriptor/TextDescriptor.php delete mode 100644 src/vendor/symfony/console/Descriptor/XmlDescriptor.php delete mode 100644 src/vendor/symfony/console/Event/ConsoleCommandEvent.php delete mode 100644 src/vendor/symfony/console/Event/ConsoleEvent.php delete mode 100644 src/vendor/symfony/console/Event/ConsoleExceptionEvent.php delete mode 100644 src/vendor/symfony/console/Event/ConsoleTerminateEvent.php delete mode 100644 src/vendor/symfony/console/Formatter/OutputFormatter.php delete mode 100644 src/vendor/symfony/console/Formatter/OutputFormatterInterface.php delete mode 100644 src/vendor/symfony/console/Formatter/OutputFormatterStyle.php delete mode 100644 src/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php delete mode 100644 src/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php delete mode 100644 src/vendor/symfony/console/Helper/DebugFormatterHelper.php delete mode 100644 src/vendor/symfony/console/Helper/DescriptorHelper.php delete mode 100644 src/vendor/symfony/console/Helper/DialogHelper.php delete mode 100644 src/vendor/symfony/console/Helper/FormatterHelper.php delete mode 100644 src/vendor/symfony/console/Helper/Helper.php delete mode 100644 src/vendor/symfony/console/Helper/HelperInterface.php delete mode 100644 src/vendor/symfony/console/Helper/HelperSet.php delete mode 100644 src/vendor/symfony/console/Helper/InputAwareHelper.php delete mode 100644 src/vendor/symfony/console/Helper/ProcessHelper.php delete mode 100644 src/vendor/symfony/console/Helper/ProgressBar.php delete mode 100644 src/vendor/symfony/console/Helper/ProgressHelper.php delete mode 100644 src/vendor/symfony/console/Helper/QuestionHelper.php delete mode 100644 src/vendor/symfony/console/Helper/SymfonyQuestionHelper.php delete mode 100644 src/vendor/symfony/console/Helper/Table.php delete mode 100644 src/vendor/symfony/console/Helper/TableCell.php delete mode 100644 src/vendor/symfony/console/Helper/TableHelper.php delete mode 100644 src/vendor/symfony/console/Helper/TableSeparator.php delete mode 100644 src/vendor/symfony/console/Helper/TableStyle.php delete mode 100644 src/vendor/symfony/console/Input/ArgvInput.php delete mode 100644 src/vendor/symfony/console/Input/ArrayInput.php delete mode 100644 src/vendor/symfony/console/Input/Input.php delete mode 100644 src/vendor/symfony/console/Input/InputArgument.php delete mode 100644 src/vendor/symfony/console/Input/InputAwareInterface.php delete mode 100644 src/vendor/symfony/console/Input/InputDefinition.php delete mode 100644 src/vendor/symfony/console/Input/InputInterface.php delete mode 100644 src/vendor/symfony/console/Input/InputOption.php delete mode 100644 src/vendor/symfony/console/Input/StringInput.php delete mode 100644 src/vendor/symfony/console/LICENSE delete mode 100644 src/vendor/symfony/console/Logger/ConsoleLogger.php delete mode 100644 src/vendor/symfony/console/Output/BufferedOutput.php delete mode 100644 src/vendor/symfony/console/Output/ConsoleOutput.php delete mode 100644 src/vendor/symfony/console/Output/ConsoleOutputInterface.php delete mode 100644 src/vendor/symfony/console/Output/NullOutput.php delete mode 100644 src/vendor/symfony/console/Output/Output.php delete mode 100644 src/vendor/symfony/console/Output/OutputInterface.php delete mode 100644 src/vendor/symfony/console/Output/StreamOutput.php delete mode 100644 src/vendor/symfony/console/Question/ChoiceQuestion.php delete mode 100644 src/vendor/symfony/console/Question/ConfirmationQuestion.php delete mode 100644 src/vendor/symfony/console/Question/Question.php delete mode 100644 src/vendor/symfony/console/README.md delete mode 100644 src/vendor/symfony/console/Resources/bin/hiddeninput.exe delete mode 100644 src/vendor/symfony/console/Shell.php delete mode 100644 src/vendor/symfony/console/Style/OutputStyle.php delete mode 100644 src/vendor/symfony/console/Style/StyleInterface.php delete mode 100644 src/vendor/symfony/console/Style/SymfonyStyle.php delete mode 100644 src/vendor/symfony/console/Tester/ApplicationTester.php delete mode 100644 src/vendor/symfony/console/Tester/CommandTester.php delete mode 100644 src/vendor/symfony/console/Tests/ApplicationTest.php delete mode 100644 src/vendor/symfony/console/Tests/ClockMock.php delete mode 100644 src/vendor/symfony/console/Tests/Command/CommandTest.php delete mode 100644 src/vendor/symfony/console/Tests/Command/HelpCommandTest.php delete mode 100644 src/vendor/symfony/console/Tests/Command/ListCommandTest.php delete mode 100644 src/vendor/symfony/console/Tests/Descriptor/AbstractDescriptorTest.php delete mode 100644 src/vendor/symfony/console/Tests/Descriptor/JsonDescriptorTest.php delete mode 100644 src/vendor/symfony/console/Tests/Descriptor/MarkdownDescriptorTest.php delete mode 100644 src/vendor/symfony/console/Tests/Descriptor/ObjectsProvider.php delete mode 100644 src/vendor/symfony/console/Tests/Descriptor/TextDescriptorTest.php delete mode 100644 src/vendor/symfony/console/Tests/Descriptor/XmlDescriptorTest.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/BarBucCommand.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/DescriptorApplication1.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/DescriptorApplication2.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/DescriptorCommand1.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/DescriptorCommand2.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/DummyOutput.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Foo1Command.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Foo2Command.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Foo3Command.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Foo4Command.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Foo5Command.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/FooCommand.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/FooSubnamespaced1Command.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/FooSubnamespaced2Command.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/FoobarCommand.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_0.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_1.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_2.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_3.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_4.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_5.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_6.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_7.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_0.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_1.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_2.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_3.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_4.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_5.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_6.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_7.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/TestCommand.php delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_1.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_1.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_1.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_1.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_2.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_2.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_2.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_2.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_astext1.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_astext2.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_asxml1.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_asxml2.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_gethelp.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_renderexception1.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_renderexception2.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_renderexception3.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_renderexception3decorated.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_renderexception4.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth1.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth1decorated.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth2.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_run1.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_run2.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_run3.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/application_run4.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/command_1.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/command_1.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/command_1.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/command_1.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/command_2.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/command_2.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/command_2.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/command_2.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/command_astext.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/command_asxml.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/definition_astext.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/definition_asxml.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_1.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_1.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_1.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_1.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_2.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_2.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_2.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_2.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_3.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_3.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_3.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_3.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_4.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_4.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_4.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_argument_4.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_1.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_1.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_1.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_1.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_2.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_2.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_2.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_2.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_3.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_3.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_3.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_3.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_4.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_4.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_4.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_definition_4.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_1.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_1.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_1.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_1.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_2.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_2.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_2.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_2.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_3.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_3.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_3.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_3.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_4.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_4.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_4.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_4.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_5.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_5.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_5.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_5.xml delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_6.json delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_6.md delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_6.txt delete mode 100644 src/vendor/symfony/console/Tests/Fixtures/input_option_6.xml delete mode 100644 src/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleStackTest.php delete mode 100644 src/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleTest.php delete mode 100644 src/vendor/symfony/console/Tests/Formatter/OutputFormatterTest.php delete mode 100644 src/vendor/symfony/console/Tests/Helper/FormatterHelperTest.php delete mode 100644 src/vendor/symfony/console/Tests/Helper/HelperSetTest.php delete mode 100644 src/vendor/symfony/console/Tests/Helper/LegacyDialogHelperTest.php delete mode 100644 src/vendor/symfony/console/Tests/Helper/LegacyProgressHelperTest.php delete mode 100644 src/vendor/symfony/console/Tests/Helper/LegacyTableHelperTest.php delete mode 100644 src/vendor/symfony/console/Tests/Helper/ProcessHelperTest.php delete mode 100644 src/vendor/symfony/console/Tests/Helper/ProgressBarTest.php delete mode 100644 src/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php delete mode 100644 src/vendor/symfony/console/Tests/Helper/TableStyleTest.php delete mode 100644 src/vendor/symfony/console/Tests/Helper/TableTest.php delete mode 100644 src/vendor/symfony/console/Tests/Input/ArgvInputTest.php delete mode 100644 src/vendor/symfony/console/Tests/Input/ArrayInputTest.php delete mode 100644 src/vendor/symfony/console/Tests/Input/InputArgumentTest.php delete mode 100644 src/vendor/symfony/console/Tests/Input/InputDefinitionTest.php delete mode 100644 src/vendor/symfony/console/Tests/Input/InputOptionTest.php delete mode 100644 src/vendor/symfony/console/Tests/Input/InputTest.php delete mode 100644 src/vendor/symfony/console/Tests/Input/StringInputTest.php delete mode 100644 src/vendor/symfony/console/Tests/Logger/ConsoleLoggerTest.php delete mode 100644 src/vendor/symfony/console/Tests/Output/ConsoleOutputTest.php delete mode 100644 src/vendor/symfony/console/Tests/Output/NullOutputTest.php delete mode 100644 src/vendor/symfony/console/Tests/Output/OutputTest.php delete mode 100644 src/vendor/symfony/console/Tests/Output/StreamOutputTest.php delete mode 100644 src/vendor/symfony/console/Tests/Style/SymfonyStyleTest.php delete mode 100644 src/vendor/symfony/console/Tests/Tester/ApplicationTesterTest.php delete mode 100644 src/vendor/symfony/console/Tests/Tester/CommandTesterTest.php delete mode 100644 src/vendor/symfony/console/composer.json delete mode 100644 src/vendor/symfony/console/phpunit.xml.dist delete mode 100644 src/vendor/symfony/event-dispatcher/CHANGELOG.md delete mode 100644 src/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php delete mode 100644 src/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php delete mode 100644 src/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php delete mode 100644 src/vendor/symfony/event-dispatcher/Debug/WrappedListener.php delete mode 100644 src/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php delete mode 100644 src/vendor/symfony/event-dispatcher/Event.php delete mode 100644 src/vendor/symfony/event-dispatcher/EventDispatcher.php delete mode 100644 src/vendor/symfony/event-dispatcher/EventDispatcherInterface.php delete mode 100644 src/vendor/symfony/event-dispatcher/EventSubscriberInterface.php delete mode 100644 src/vendor/symfony/event-dispatcher/GenericEvent.php delete mode 100644 src/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php delete mode 100644 src/vendor/symfony/event-dispatcher/LICENSE delete mode 100644 src/vendor/symfony/event-dispatcher/README.md delete mode 100644 src/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php delete mode 100644 src/vendor/symfony/event-dispatcher/Tests/ContainerAwareEventDispatcherTest.php delete mode 100644 src/vendor/symfony/event-dispatcher/Tests/Debug/TraceableEventDispatcherTest.php delete mode 100644 src/vendor/symfony/event-dispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php delete mode 100644 src/vendor/symfony/event-dispatcher/Tests/EventDispatcherTest.php delete mode 100644 src/vendor/symfony/event-dispatcher/Tests/EventTest.php delete mode 100644 src/vendor/symfony/event-dispatcher/Tests/GenericEventTest.php delete mode 100644 src/vendor/symfony/event-dispatcher/Tests/ImmutableEventDispatcherTest.php delete mode 100644 src/vendor/symfony/event-dispatcher/composer.json delete mode 100644 src/vendor/symfony/event-dispatcher/phpunit.xml.dist delete mode 100644 src/vendor/symfony/var-dumper/CHANGELOG.md delete mode 100644 src/vendor/symfony/var-dumper/Caster/AmqpCaster.php delete mode 100644 src/vendor/symfony/var-dumper/Caster/Caster.php delete mode 100644 src/vendor/symfony/var-dumper/Caster/ConstStub.php delete mode 100644 src/vendor/symfony/var-dumper/Caster/CutStub.php delete mode 100644 src/vendor/symfony/var-dumper/Caster/DOMCaster.php delete mode 100644 src/vendor/symfony/var-dumper/Caster/DoctrineCaster.php delete mode 100644 src/vendor/symfony/var-dumper/Caster/ExceptionCaster.php delete mode 100644 src/vendor/symfony/var-dumper/Caster/MongoCaster.php delete mode 100644 src/vendor/symfony/var-dumper/Caster/PdoCaster.php delete mode 100644 src/vendor/symfony/var-dumper/Caster/ReflectionCaster.php delete mode 100644 src/vendor/symfony/var-dumper/Caster/ResourceCaster.php delete mode 100644 src/vendor/symfony/var-dumper/Caster/SplCaster.php delete mode 100644 src/vendor/symfony/var-dumper/Caster/StubCaster.php delete mode 100644 src/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php delete mode 100644 src/vendor/symfony/var-dumper/Cloner/AbstractCloner.php delete mode 100644 src/vendor/symfony/var-dumper/Cloner/ClonerInterface.php delete mode 100644 src/vendor/symfony/var-dumper/Cloner/Cursor.php delete mode 100644 src/vendor/symfony/var-dumper/Cloner/Data.php delete mode 100644 src/vendor/symfony/var-dumper/Cloner/DumperInterface.php delete mode 100644 src/vendor/symfony/var-dumper/Cloner/Stub.php delete mode 100644 src/vendor/symfony/var-dumper/Cloner/VarCloner.php delete mode 100644 src/vendor/symfony/var-dumper/Dumper/AbstractDumper.php delete mode 100644 src/vendor/symfony/var-dumper/Dumper/CliDumper.php delete mode 100644 src/vendor/symfony/var-dumper/Dumper/DataDumperInterface.php delete mode 100644 src/vendor/symfony/var-dumper/Dumper/HtmlDumper.php delete mode 100644 src/vendor/symfony/var-dumper/Exception/ThrowingCasterException.php delete mode 100644 src/vendor/symfony/var-dumper/LICENSE delete mode 100644 src/vendor/symfony/var-dumper/README.md delete mode 100644 src/vendor/symfony/var-dumper/Resources/functions/dump.php delete mode 100644 src/vendor/symfony/var-dumper/Test/VarDumperTestCase.php delete mode 100644 src/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php delete mode 100644 src/vendor/symfony/var-dumper/Tests/Caster/CasterTest.php delete mode 100644 src/vendor/symfony/var-dumper/Tests/Caster/PdoCasterTest.php delete mode 100644 src/vendor/symfony/var-dumper/Tests/Caster/ReflectionCasterTest.php delete mode 100644 src/vendor/symfony/var-dumper/Tests/CliDumperTest.php delete mode 100644 src/vendor/symfony/var-dumper/Tests/Fixtures/dumb-var.php delete mode 100644 src/vendor/symfony/var-dumper/Tests/HtmlDumperTest.php delete mode 100644 src/vendor/symfony/var-dumper/Tests/Test/VarDumpTestTraitRequire54.php delete mode 100644 src/vendor/symfony/var-dumper/Tests/Test/VarDumpTestTraitTest.php delete mode 100644 src/vendor/symfony/var-dumper/Tests/VarClonerTest.php delete mode 100644 src/vendor/symfony/var-dumper/VarDumper.php delete mode 100644 src/vendor/symfony/var-dumper/composer.json delete mode 100644 src/vendor/symfony/var-dumper/phpunit.xml.dist delete mode 100644 src/vendor/symfony/yaml/CHANGELOG.md delete mode 100644 src/vendor/symfony/yaml/Dumper.php delete mode 100644 src/vendor/symfony/yaml/Escaper.php delete mode 100644 src/vendor/symfony/yaml/Exception/DumpException.php delete mode 100644 src/vendor/symfony/yaml/Exception/ExceptionInterface.php delete mode 100644 src/vendor/symfony/yaml/Exception/ParseException.php delete mode 100644 src/vendor/symfony/yaml/Exception/RuntimeException.php delete mode 100644 src/vendor/symfony/yaml/Inline.php delete mode 100644 src/vendor/symfony/yaml/LICENSE delete mode 100644 src/vendor/symfony/yaml/Parser.php delete mode 100644 src/vendor/symfony/yaml/README.md delete mode 100644 src/vendor/symfony/yaml/Tests/DumperTest.php delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/YtsAnchorAlias.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/YtsBasicTests.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/YtsBlockMapping.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/YtsDocumentSeparator.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/YtsErrorTests.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/YtsFlowCollections.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/YtsFoldedScalars.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/YtsNullsAndEmpties.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/YtsSpecificationExamples.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/YtsTypeTransfers.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/embededPhp.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/escapedCharacters.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/index.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/sfComments.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/sfCompact.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/sfMergeKey.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/sfObjects.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/sfQuotes.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/sfTests.yml delete mode 100644 src/vendor/symfony/yaml/Tests/Fixtures/unindentedCollections.yml delete mode 100644 src/vendor/symfony/yaml/Tests/InlineTest.php delete mode 100644 src/vendor/symfony/yaml/Tests/ParseExceptionTest.php delete mode 100644 src/vendor/symfony/yaml/Tests/ParserTest.php delete mode 100644 src/vendor/symfony/yaml/Tests/YamlTest.php delete mode 100644 src/vendor/symfony/yaml/Unescaper.php delete mode 100644 src/vendor/symfony/yaml/Yaml.php delete mode 100644 src/vendor/symfony/yaml/composer.json delete mode 100644 src/vendor/symfony/yaml/phpunit.xml.dist delete mode 100644 src/vendor/twig/twig/CHANGELOG delete mode 100644 src/vendor/twig/twig/LICENSE delete mode 100644 src/vendor/twig/twig/README.rst delete mode 100644 src/vendor/twig/twig/lib/Twig/Autoloader.php delete mode 100644 src/vendor/twig/twig/lib/Twig/BaseNodeVisitor.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Cache/Filesystem.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Cache/Null.php delete mode 100644 src/vendor/twig/twig/lib/Twig/CacheInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Compiler.php delete mode 100644 src/vendor/twig/twig/lib/Twig/CompilerInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Environment.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Error.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Error/Loader.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Error/Runtime.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Error/Syntax.php delete mode 100644 src/vendor/twig/twig/lib/Twig/ExistsLoaderInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/ExpressionParser.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Extension.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Extension/Core.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Extension/Debug.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Extension/Escaper.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Extension/Optimizer.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Extension/Profiler.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Extension/Sandbox.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Extension/Staging.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Extension/StringLoader.php delete mode 100644 src/vendor/twig/twig/lib/Twig/ExtensionInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/FileExtensionEscapingStrategy.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Filter.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Filter/Function.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Filter/Method.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Filter/Node.php delete mode 100644 src/vendor/twig/twig/lib/Twig/FilterCallableInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/FilterInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Function.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Function/Function.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Function/Method.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Function/Node.php delete mode 100644 src/vendor/twig/twig/lib/Twig/FunctionCallableInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/FunctionInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Lexer.php delete mode 100644 src/vendor/twig/twig/lib/Twig/LexerInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Loader/Array.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Loader/Chain.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Loader/Filesystem.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Loader/String.php delete mode 100644 src/vendor/twig/twig/lib/Twig/LoaderInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Markup.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/AutoEscape.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Block.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/BlockReference.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Body.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/CheckSecurity.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Do.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Embed.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Array.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/AssignName.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Add.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/And.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/BitwiseAnd.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/BitwiseOr.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/BitwiseXor.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Concat.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Div.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/EndsWith.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Equal.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/FloorDiv.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Greater.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/GreaterEqual.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/In.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Less.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/LessEqual.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Matches.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Mod.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Mul.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/NotEqual.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/NotIn.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Or.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Power.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Range.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/StartsWith.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Sub.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/BlockReference.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Call.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Conditional.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Constant.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/ExtensionReference.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Filter.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Filter/Default.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Function.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/GetAttr.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/MethodCall.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Name.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Parent.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/TempName.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Test.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Test/Constant.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Test/Defined.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Test/Divisibleby.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Test/Even.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Test/Null.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Test/Odd.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Test/Sameas.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Unary.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Unary/Neg.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Unary/Not.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Expression/Unary/Pos.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Flush.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/For.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/ForLoop.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/If.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Import.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Include.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Macro.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Module.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Print.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Sandbox.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/SandboxedPrint.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Set.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/SetTemp.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Spaceless.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Node/Text.php delete mode 100644 src/vendor/twig/twig/lib/Twig/NodeInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/NodeOutputInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/NodeTraverser.php delete mode 100644 src/vendor/twig/twig/lib/Twig/NodeVisitor/Escaper.php delete mode 100644 src/vendor/twig/twig/lib/Twig/NodeVisitor/Optimizer.php delete mode 100644 src/vendor/twig/twig/lib/Twig/NodeVisitor/SafeAnalysis.php delete mode 100644 src/vendor/twig/twig/lib/Twig/NodeVisitor/Sandbox.php delete mode 100644 src/vendor/twig/twig/lib/Twig/NodeVisitorInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Parser.php delete mode 100644 src/vendor/twig/twig/lib/Twig/ParserInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Profiler/Dumper/Blackfire.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Profiler/Dumper/Html.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Profiler/Dumper/Text.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Profiler/Node/EnterProfile.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Profiler/Node/LeaveProfile.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Profiler/NodeVisitor/Profiler.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Profiler/Profile.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Sandbox/SecurityError.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedFilterError.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedFunctionError.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedTagError.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Sandbox/SecurityPolicy.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Sandbox/SecurityPolicyInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/SimpleFilter.php delete mode 100644 src/vendor/twig/twig/lib/Twig/SimpleFunction.php delete mode 100644 src/vendor/twig/twig/lib/Twig/SimpleTest.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Template.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TemplateInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Test.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Test/Function.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Test/IntegrationTestCase.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Test/Method.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Test/Node.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Test/NodeTestCase.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TestCallableInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TestInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Token.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/AutoEscape.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/Block.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/Do.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/Embed.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/Extends.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/Filter.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/Flush.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/For.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/From.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/If.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/Import.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/Include.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/Macro.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/Sandbox.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/Set.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/Spaceless.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParser/Use.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParserBroker.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParserBrokerInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenParserInterface.php delete mode 100644 src/vendor/twig/twig/lib/Twig/TokenStream.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Util/DeprecationCollector.php delete mode 100644 src/vendor/twig/twig/lib/Twig/Util/TemplateDirIterator.php delete mode 100644 src/web.config diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..10926e8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,675 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + diff --git a/check_process b/check_process new file mode 100644 index 0000000..359db85 --- /dev/null +++ b/check_process @@ -0,0 +1,62 @@ +;; Test complet sans multisite + auto_remove=1 + ; Manifest + domain="domain.tld" (DOMAIN) + path="/path" (PATH) + admin="john" (USER) + language="fr_FR" + multisite="No" + is_public="Yes" (PUBLIC|public=Yes|private=No) + ; Checks + pkg_linter=1 + setup_sub_dir=1 + setup_root=1 + setup_nourl=0 + setup_private=1 + setup_public=1 + upgrade=1 + backup_restore=1 + multi_instance=1 + wrong_user=1 + wrong_path=1 + incorrect_path=1 + corrupt_source=0 + fail_download_source=0 + port_already_use=0 + final_path_already_use=0 +;; Test avec multisite + auto_remove=1 + ; Manifest + domain="domain.tld" (DOMAIN) + path="/path" (PATH) + admin="john" (USER) + language="fr_FR" + multisite="Yes" + is_public="Yes" (PUBLIC|public=Yes|private=No) + ; Checks + setup_sub_dir=1 + setup_root=0 + setup_nourl=0 + setup_private=1 + setup_public=1 + upgrade=1 + backup_restore=1 + multi_instance=1 + wrong_user=0 + wrong_path=0 + incorrect_path=0 + corrupt_source=0 + fail_download_source=0 + port_already_use=0 + final_path_already_use=0 +;;; Levels + Level 1=auto + Level 2=auto + Level 3=auto + Level 4=1 + Level 5=1 + Level 6=auto + Level 7=auto + Level 8=0 + Level 9=0 + Level 10=0 \ No newline at end of file diff --git a/conf/php-fpm.ini b/conf/php-fpm.ini new file mode 100644 index 0000000..55e2ba7 --- /dev/null +++ b/conf/php-fpm.ini @@ -0,0 +1,3 @@ +upload_max_filesize=30M +post_max_size=30M +; max_execution_time=60 \ No newline at end of file diff --git a/scripts/.fonctions b/scripts/.fonctions new file mode 100644 index 0000000..14ec502 --- /dev/null +++ b/scripts/.fonctions @@ -0,0 +1,205 @@ +#!/bin/bash + +ynh_version="2.4" + +YNH_VERSION () { # Renvoi le numéro de version de la moulinette Yunohost + ynh_version=$(sudo yunohost -v | grep "moulinette:" | cut -d' ' -f2 | cut -d'.' -f1,2) +} + +CHECK_VAR () { # Vérifie que la variable n'est pas vide. +# $1 = Variable à vérifier +# $2 = Texte à afficher en cas d'erreur + test -n "$1" || (echo "$2" >&2 && false) +} + +EXIT_PROPERLY () { # Provoque l'arrêt du script en cas d'erreur. Et nettoye les résidus. + trap '' ERR + echo -e "\e[91m \e[1m" # Shell in light red bold + echo -e "!!\n $app install's script has encountered an error. Installation was cancelled.\n!!" >&2 + + CLEAN_SETUP # Appel la fonction de nettoyage spécifique du script install. + + # Compense le bug de ssowat qui ne supprime pas l'entrée de l'app en cas d'erreur d'installation. + sudo sed -i "\@\"$domain$path/\":@d" /etc/ssowat/conf.json + + if [ "$ynh_version" = "2.2" ]; then + /bin/bash $script_dir/remove # Appel le script remove. En 2.2, ce comportement n'est pas automatique. + fi + + ynh_die +} + +TRAP_ON () { # Activate signal capture + trap EXIT_PROPERLY ERR # Capturing exit signals on error +} + +TRAP_OFF () { # Ignoring signal capture until TRAP_ON + # Pour une raison que j'ignore, la fonction TRAP_ON fonctionne très bien. + # Mais pas la fonction TRAP_OFF... + # Utiliser directement `trap '' ERR` dans le code pour l'utiliser, à la place de la fonction. + trap '' ERR # Ignoring exit signals +} + +CHECK_USER () { # Vérifie la validité de l'user admin +# $1 = Variable de l'user admin. + ynh_user_exists "$1" || (echo "Wrong admin" >&2 && false) +} + +CHECK_PATH () { # Vérifie la présence du / en début de path. Et son absence à la fin. + if [ "${path:0:1}" != "/" ]; then # Si le premier caractère n'est pas un / + path="/$path" # Ajoute un / en début de path + fi + if [ "${path:${#path}-1}" == "/" ] && [ ${#path} -gt 1 ]; then # Si le dernier caractère est un / et que ce n'est pas le seul caractère. + path="${path:0:${#path}-1}" # Supprime le dernier caractère + fi +} + +CHECK_DOMAINPATH () { # Vérifie la disponibilité du path et du domaine. + sudo yunohost app checkurl $domain$path -a $app +} + +CHECK_FINALPATH () { # Vérifie que le dossier de destination n'est pas déjà utilisé. + final_path=/var/www/$app + if [ -e "$final_path" ] + then + echo "This path already contains a folder" >&2 + false + fi +} + +GENERATE_DB () { # Créer une base de données et un utilisateur dédié au nom de l'app. +# $1 = Nom de la base de donnée + # Génère un mot de passe aléatoire. + db_user=$1 + db_pwd=$(head -n20 /dev/urandom | tr -c -d 'A-Za-z0-9' | head -c20) + CHECK_VAR "$db_pwd" "db_pwd empty" + # Utilise '$app' comme nom d'utilisateur et de base de donnée + # Initialise la base de donnée et stocke le mot de passe mysql. + ynh_mysql_create_db "$db_user" "$db_user" $db_pwd + ynh_app_setting_set $app mysqlpwd $db_pwd +} + +SETUP_SOURCE () { # Télécharge la source, décompresse et copie dans $final_path +# $1 = Nom de l'archive téléchargée. + wget -nv --show-progress -i ../sources/source_url -O $1 + # Vérifie la somme de contrôle de la source téléchargée. + md5sum -c ../sources/source_md5 --status || (echo "Corrupt source" >&2 && false) + # Décompresse la source + if [ "$(echo ${1##*.})" == "gz" ]; then + tar -x -f $1 + elif [ "$(echo ${1##*.})" == "zip" ]; then + unzip -q $1 + else + false # Format d'archive non pris en charge. + fi + # Copie les fichiers sources + sudo cp -a $(cat ../sources/source_dir)/. "$final_path" + # Copie les fichiers additionnels ou modifiés. + if test -e "../sources/ajouts"; then + sudo cp -a ../sources/ajouts/. "$final_path" + fi +} + +POOL_FPM () { # Créer le fichier de configuration du pool php-fpm et le configure. + sed -i "s@__NAMETOCHANGE__@$app@g" ../conf/php-fpm.conf + sed -i "s@__FINALPATH__@$final_path@g" ../conf/php-fpm.conf + finalphpconf=/etc/php5/fpm/pool.d/$app.conf + sudo cp ../conf/php-fpm.conf $finalphpconf + sudo chown root: $finalphpconf + finalphpini=/etc/php5/fpm/conf.d/20-$app.ini + sudo cp ../conf/php-fpm.ini $finalphpini + sudo chown root: $finalphpini + sudo service php5-fpm reload +} + +STORE_MD5_CONFIG () { # Enregistre la somme de contrôle du fichier de config +# $1 = Nom du fichier de conf pour le stockage dans settings.yml +# $2 = Nom complet et chemin du fichier de conf. + ynh_app_setting_set $app $1_file_md5 $(sudo md5sum "$2" | cut -d' ' -f1) +} + +CHECK_MD5_CONFIG () { # Créé un backup du fichier de config si il a été modifié. +# $1 = Nom du fichier de conf pour le stockage dans settings.yml +# $2 = Nom complet et chemin du fichier de conf. + if [ "$(ynh_app_setting_get $app $1_file_md5)" != $(sudo md5sum "$2" | cut -d' ' -f1) ]; then + sudo cp -a "$2" "$2.backup.$(date '+%d.%m.%y_%Hh%M,%Ss')" # Si le fichier de config a été modifié, créer un backup. + fi +} + +FIND_PORT () { # Cherche un port libre. +# $1 = Numéro de port pour débuter la recherche. + port=$1 + while ! sudo yunohost app checkport $port ; do + port=$((port+1)) + done + CHECK_VAR "$port" "port empty" +} + + +### REMOVE SCRIPT + +REMOVE_NGINX_CONF () { # Suppression de la configuration nginx + if [ -e "/etc/nginx/conf.d/$domain.d/$app.conf" ]; then # Delete nginx config + echo "Delete nginx config" + sudo rm "/etc/nginx/conf.d/$domain.d/$app.conf" + sudo service nginx reload + fi +} + +REMOVE_FPM_CONF () { # Suppression de la configuration du pool php-fpm + if [ -e "/etc/php5/fpm/pool.d/$app.conf" ]; then # Delete fpm config + echo "Delete fpm config" + sudo rm "/etc/php5/fpm/pool.d/$app.conf" + fi + if [ -e "/etc/php5/fpm/conf.d/20-$app.ini" ]; then # Delete php config + echo "Delete php config" + sudo rm "/etc/php5/fpm/conf.d/20-$app.ini" + fi + sudo service php5-fpm reload +} + +REMOVE_LOGROTATE_CONF () { # Suppression de la configuration de logrotate + if [ -e "/etc/logrotate.d/$app" ]; then + echo "Delete logrotate config" + sudo rm "/etc/logrotate.d/$app" + fi +} + +SECURE_REMOVE () { # Suppression de dossier avec vérification des variables + chaine="$1" # L'argument doit être donné entre quotes simple '', pour éviter d'interpréter les variables. + no_var=0 + while (echo "$chaine" | grep -q '\$') # Boucle tant qu'il y a des $ dans la chaine + do + no_var=1 + global_var=$(echo "$chaine" | cut -d '$' -f 2) # Isole la première variable trouvée. + only_var=\$$(expr "$global_var" : '\([A-Za-z0-9_]*\)') # Isole complètement la variable en ajoutant le $ au début et en gardant uniquement le nom de la variable. Se débarrasse surtout du / et d'un éventuel chemin derrière. + real_var=$(eval "echo ${only_var}") # `eval "echo ${var}` permet d'interpréter une variable contenue dans une variable. + if test -z "$real_var" || [ "$real_var" = "/" ]; then + echo "Variable $only_var is empty, suppression of $chaine cancelled." >&2 + return 1 + fi + chaine=$(echo "$chaine" | sed "s@$only_var@$real_var@") # remplace la variable par sa valeur dans la chaine. + done + if [ "$no_var" -eq 1 ] + then + if [ -e "$chaine" ]; then + echo "Delete directory $chaine" + sudo rm -r "$chaine" + fi + return 0 + else + echo "No detected variable." >&2 + return 1 + fi +} + +REMOVE_BDD () { # Suppression de la base de donnée et de l'utilisateur associé. +# $1 = Nom de la base de donnée + # Utilise '$app' comme nom d'utilisateur et de base de donnée + db_user=$1 + if mysqlshow -u root -p$(sudo cat $MYSQL_ROOT_PWD_FILE) | grep -q "^| $db_user"; then + echo "Delete db" + ynh_mysql_drop_db $db_user + ynh_mysql_drop_user $db_user + fi +} \ No newline at end of file diff --git a/scripts/backup b/scripts/backup new file mode 100644 index 0000000..10a9c9c --- /dev/null +++ b/scripts/backup @@ -0,0 +1,28 @@ +#!/bin/bash + +# Exit on command errors and treat unset variables as an error +set -eu + +# The parameter $1 is the backup directory location dedicated to the app +backup_dir=$1 + +# The parameter $2 is theid of the app instance +app=$2 + +# Source app helpers +source /usr/share/yunohost/helpers + +domain=$(ynh_app_setting_get $app domain) +final_path=$(ynh_app_setting_get $app final_path) + +# Copy the app files +sudo mkdir -p ${backup_dir}/var/www +sudo cp -a $final_path "${backup_dir}/var/www/$app" + +# Copy the conf files +sudo mkdir -p "${backup_dir}/conf" +sudo cp -a /etc/nginx/conf.d/$domain.d/$app.conf "${backup_dir}/conf/nginx.conf" + +# Copy dedicated php-fpm process to backup folder +sudo cp -a /etc/php5/fpm/pool.d/$app.conf "${backup_dir}/conf/php-fpm.conf" +sudo cp -a /etc/php5/fpm/conf.d/20-$app.ini "${backup_dir}/conf/php-fpm.ini" diff --git a/scripts/install b/scripts/install index 06816b7..b4654de 100644 --- a/scripts/install +++ b/scripts/install @@ -1,46 +1,95 @@ #!/bin/bash -# Retrieve arguments -domain=$1 -path=$2 -admin_grav=$3 +# Exit on command errors and treat unset variables as an error +set -eu -# Check if admin exists -sudo yunohost user list --json | grep -q "\"username\": \"$admin_grav\"" -if [[ ! $? -eq 0 ]]; then - echo "Wrong admin" - exit 1 -fi -sudo yunohost app setting grav admin -v $admin_grav +source .fonctions # Charge les fonctions génériques habituellement utilisées dans le script -# Check domain/path availability -sudo yunohost app checkurl $domain$path -a grav -if [[ ! $? -eq 0 ]]; then - exit 1 -fi +CLEAN_SETUP () { +# Nettoyage des résidus d'installation non pris en charge par le script remove. + # Clean hosts + sudo sed -i '/#GRAV/d' /etc/hosts +} +TRAP_ON # Active trap pour arrêter le script si une erreur est détectée. -# Copy files to the right place -final_path=/var/www/grav -sudo mkdir -p $final_path -sudo cp -aR ../src/* $final_path +domain=$YNH_APP_ARG_DOMAIN +path=$YNH_APP_ARG_PATH +admin_grav=$YNH_APP_ARG_ADMIN +language=$YNH_APP_ARG_LANGUAGE +multisite=$YNH_APP_ARG_MULTISITE +is_public=$YNH_APP_ARG_IS_PUBLIC -# Set permissions to roundcube directory +app=$YNH_APP_INSTANCE_NAME + +# Source app helpers +source /usr/share/yunohost/helpers + +CHECK_VAR "$app" "app name not set" + +CHECK_USER "$admin_grav" + +CHECK_PATH + +CHECK_DOMAINPATH + +CHECK_FINALPATH + +ynh_app_setting_set $app domain $domain +ynh_app_setting_set $app path $path +ynh_app_setting_set $app admin $admin_grav +ynh_app_setting_set $app is_public $is_public +ynh_app_setting_set $app language $language +ynh_app_setting_set $app multisite $multisite + +GENERATE_DB $app # Créer une base de données et un utilisateur dédié au nom de l'app. + +# Crée le repertoire de destination et stocke son emplacement. +sudo mkdir "$final_path" +ynh_app_setting_set $app final_path $final_path + +SETUP_SOURCE "grav-admin-v1.1.17.zip" + +# Set permissions to grav directory sudo chown -R www-data: $final_path -# Modify Nginx configuration file and copy it to Nginx conf directory -sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf -sed -i "s@ALIASTOCHANGE@$final_path@g" ../conf/nginx.conf -sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/grav.conf +echo -e "127.0.0.1 $domain #GRAV" | sudo tee -a /etc/hosts -sed -i "s@NAMETOCHANGE@grav@g" ../conf/php-fpm.conf -finalphpconf=/etc/php5/fpm/pool.d/grav.conf -sudo cp ../conf/php-fpm.conf $finalphpconf -sudo chown root: $finalphpconf -sudo chmod 644 $finalphpconf -# sudo $final_path/bin/grav install +# Et copie le fichier de config nginx +sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf + +# Modifie les variables dans le fichier de configuration nginx +sudo sed -i "s@__PATHTOCHANGE__@$path@g" /etc/nginx/conf.d/$domain.d/$app.conf +sudo sed -i "s@__FINALPATH__@$final_path@g" /etc/nginx/conf.d/$domain.d/$app.conf +sudo sed -i "s@__NAMETOCHANGE__@$app@g" /etc/nginx/conf.d/$domain.d/$app.conf + +if [ "$multisite" = "Yes" ]; +then + sudo sed -i "s@#--MULTISITE--@@g" /etc/nginx/conf.d/$domain.d/$app.conf +fi + +if [ "$is_public" = "Yes" ]; +then + sudo sed -i "s@#--PRIVATE--@@g" /etc/nginx/conf.d/$domain.d/$app.conf +fi + +POOL_FPM + +# Donne un accès public pour curl +ynh_app_setting_set $app unprotected_uris "/" + +# Régénère la configuration de SSOwat +sudo yunohost app ssowatconf # Reload Nginx and regenerate SSOwat conf sudo service php5-fpm restart sudo service nginx reload -sudo yunohost app setting grav skipped_uris -v "/" -sudo yunohost app ssowatconf \ No newline at end of file + +if [ "$is_public" = "No" ]; +then + # Retire l'accès public + ynh_app_setting_delete $app unprotected_uris + sudo yunohost app ssowatconf +fi + +# Nettoyer hosts +sudo sed -i '/#GRAV/d' /etc/hosts \ No newline at end of file diff --git a/scripts/remove b/scripts/remove index 77cd60d..51e35a6 100644 --- a/scripts/remove +++ b/scripts/remove @@ -1,10 +1,26 @@ #!/bin/bash -domain=$(sudo yunohost app setting grav domain) +# Exit on command errors and treat unset variables as an error +set -u -sudo rm -rf /var/www/grav -sudo rm -f /etc/nginx/conf.d/$domain.d/grav.conf -sudo rm -f /etc/php5/fpm/pool.d/grav.conf +source .fonctions # Charge les fonctions génériques habituellement utilisées dans le script -sudo service php5-fpm restart -sudo service nginx reload \ No newline at end of file +# Source app helpers +source /usr/share/yunohost/helpers + +# Récupère les infos de l'application. +app=$YNH_APP_INSTANCE_NAME +domain=$(ynh_app_setting_get $app domain) + +REMOVE_BDD $app # Suppression de la base de donnée et de l'utilisateur associé. + +SECURE_REMOVE '/var/www/$app' # Suppression du dossier de l'application + +REMOVE_NGINX_CONF # Suppression de la configuration nginx + +REMOVE_FPM_CONF # Suppression de la configuration du pool php-fpm + +# Régénère la configuration de SSOwat +sudo yunohost app ssowatconf + +echo -e "\e[0m" # Restore normal color \ No newline at end of file diff --git a/scripts/restore b/scripts/restore new file mode 100644 index 0000000..bb3d11b --- /dev/null +++ b/scripts/restore @@ -0,0 +1,53 @@ +#!/bin/bash +# This restore script is adapted to Yunohost >=2.4 + +# Exit on command errors and treat unset variables as an error +set -eu + +# The parameter $1 is the backup directory location dedicated to the app +backup_dir=$1 + +# The parameter $2 is the id of the app instance ex: ynhexample__2 +app=$2 + +# Source app helpers +source /usr/share/yunohost/helpers + +# Get old parameter of the app +domain=$(ynh_app_setting_get $app domain) +path=$(ynh_app_setting_get $app path) +is_public=$(ynh_app_setting_get $app is_public) +final_path=$(ynh_app_setting_get $app final_path) + +if [ -d $final_path ]; then + ynh_die "There is already a directory: $final_path" +fi + +conf=/etc/nginx/conf.d/$domain.d/$app.conf +if [ -f $conf ]; then + ynh_die "There is already a nginx conf file at this path: $conf" +fi +# Restore conf files +sudo cp -a "${backup_dir}/conf/nginx.conf" $conf + +# Reload Nginx +sudo service nginx reload + +sudo cp -a "${backup_dir}/var/www/$app" $final_path + +# Set permissions +# Les fichiers appartiennent à www-data, pour permettre les mises à jour. +sudo chown -R www-data: $final_path + +# Copy dedicated php-fpm process from backup folder to the right location +sudo cp -a $backup_dir/conf/php-fpm.conf /etc/php5/fpm/pool.d/$app.conf +sudo cp -a $backup_dir/conf/php-fpm.ini /etc/php5/fpm/conf.d/20-$app.ini +# And restart service +sudo service php5-fpm reload + +# Set ssowat config +if [ "$is_public" = "No" ]; +then + ynh_app_setting_delete $app skipped_uris +fi +sudo yunohost app ssowatconf diff --git a/scripts/upgrade b/scripts/upgrade index 12534ed..8f33ef4 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,20 +1,38 @@ #!/bin/bash -# Retrieve arguments -domain=$(sudo yunohost app setting grav domain) -path=$(sudo yunohost app setting grav path) -admin_grav=$(sudo yunohost app setting grav admin) -language=$(sudo yunohost app setting grav language) -is_public=$(sudo yunohost app setting grav is_public) +# Exit on command errors and treat unset variables as an error +set -eu -final_path=/var/www/grav +source .fonctions # Charge les fonctions génériques habituellement utilisées dans le script + +# See comments in install script +app=$YNH_APP_INSTANCE_NAME + +# Source YunoHost helpers +source /usr/share/yunohost/helpers + +# Retrieve app settings +domain=$(ynh_app_setting_get "$app" domain) +path=$(ynh_app_setting_get "$app" path) +admin=$(ynh_app_setting_get "$app" admin) +is_public=$(ynh_app_setting_get "$app" is_public) +language=$(ynh_app_setting_get "$app" language) + +CHECK_PATH # Vérifie et corrige la syntaxe du path. # Check if admin is not null -if [[ "$admin_grav" = "" || "$is_public" = "" || "$language" = "" ]]; then +if [[ "$admin" = "" || "$is_public" = "" || "$language" = "" ]]; then echo "Unable to upgrade, please contact support" - exit 1 + ynh_die fi +root_pwd=$(sudo cat /etc/yunohost/mysql) + +final_path=/var/www/$app + +db_name=$app + +# CHECK_MD5_CONFIG "connect.php" "$final_path/config/connect.php" # Créé un backup du fichier de config si il a été modifié. # Modify Nginx configuration file and copy it to Nginx conf directory sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf* @@ -22,9 +40,18 @@ sed -i "s@ALIASTOCHANGE@$final_path/@g" ../conf/nginx.conf* if [ $is_public = "Yes" ]; then - sudo cp ../conf/nginx.conf-public /etc/nginx/conf.d/$domain.d/grav.conf + sudo cp ../conf/nginx.conf-public /etc/nginx/conf.d/$domain.d/$app.conf else - sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/grav.conf + sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf +fi + +# If app is public, add url to SSOWat conf as skipped_uris +if [[ $is_public -eq 1 ]]; then + # See install script + ynh_app_setting_set "$app" unprotected_uris "/" + sudo cp ../conf/nginx.conf-public /etc/nginx/conf.d/$domain.d/$app.conf +else + sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf fi # Reload Nginx diff --git a/sources/source_dir b/sources/source_dir new file mode 100644 index 0000000..d4e0cb1 --- /dev/null +++ b/sources/source_dir @@ -0,0 +1 @@ +grav \ No newline at end of file diff --git a/sources/source_md5. b/sources/source_md5. new file mode 100644 index 0000000..02defc2 --- /dev/null +++ b/sources/source_md5. @@ -0,0 +1 @@ +5593142893cfb1c8bc90a407ede00c09 grav-admin-v1.1.17.zip \ No newline at end of file diff --git a/sources/source_url b/sources/source_url new file mode 100644 index 0000000..78e6805 --- /dev/null +++ b/sources/source_url @@ -0,0 +1 @@ +https://getgrav.org/download/core/grav-admin/1.1.17 \ No newline at end of file diff --git a/src/.config b/src/.config deleted file mode 100644 index 6a27223..0000000 --- a/src/.config +++ /dev/null @@ -1,233 +0,0 @@ -SITE_NAME - * get::$config->SITE_DOMAIN - */ - const SITE_NAME = 'YourSite'; - const SITE_DOMAIN = 'YourSite.com'; - - /** - * Database name - create new constants for additional connections (commented out example for DB_SLAVE_NAME follows) - * Defining DB-name constants is a good practice but not required if you hard-code them in dbConnect() below - */ - const DB_NAME = 'vork'; - //const DB_SLAVE_NAME = 'slave4readonly'; - - /** - * Most RDBMS users will only need to adjust the connection string in the first $db object. The syntax of this must - * always match the syntax of the constructor or connect method of your relational-database PHP extension. - * - * For the MySQLi extension all arguments are optional and formatted as: - * self::$db = new $db($host, $username, $passwd, $dbname, $port, $socket); - * - * Note: in most setups $host is either "localhost" or set to an IP address - * for Amazon RDS it would be something like: myinstance.crwjauxgijdf.us-east-1.rds.amazonaws.com - * - * For the syntax of other extensions refer to: http://www.php.net/manual/en/refs.database.vendors.php - * - * @param string $modelObject One of the values in self::$modelObjects determining which DB connection to establish - */ - public function dbConnect($modelObject) { - $db = (!DEBUG_MODE ? 'db' : 'dbDebug'); - switch ($modelObject) { //a case must exist for each value in self::$modelObjects (additional cases are benign) - case 'db': - self::$db = new $db('HOSTNAME', 'USERNAME', 'PASSWORD', self::DB_NAME); - break; - case 'mongo': - if (!class_exists('vorkMongo')) { - require self::basepath() . 'sql' . self::DS . 'mongodb'; - } - $m = new vorkMongo(); - self::$mongo = $m->selectDB(self::DB_NAME); - //Upsert arg is array in newer MongoDB (leave as-is), Boolean in older- remove comments around (Boolean) - $this->mongoUpsert = /* (Boolean) */ array('upsert' => true); - break; - case 'dbro': - //if an additional connection is needed, adjust credentials below and follow the instructions in the - //comment for $modelObjects just after this class. - self::$dbro = new $db('HOSTNAME', 'USERNAME', 'PASSWORD', self::DB_SLAVE_NAME); - break; - } - } - - /** - * Using multiple database connections and/or NoSQL like MongoDB or CouchDB - * - * If you are only using one DB connection and it is an RDBMS (any databaes except non-relational like Mongo) - * then you should skip this step. - * - * Each database connection (both RDBMS & NoSQL) needs to be defined in the $modelObjects array and have a static - * propery existing by the same name. "db" exists by default so to add a second read-only connection you set - * $modelObjects to array('db', 'dbro') and create a new $dbro static property (commented-out examples follow). - * - * Use the same process for adding a MongoDB connection in conjuction with an RDBMS (substituting in the last - * example "mongo" for "dbro"). To use MongoDB as the sole database just overwrite $modelObjects with - * array('mongo') - this is instead of keeping the default 'db' connection within the array. You will also want to - * comment out the last line in this file which is RDBMS-specific: require '.config-rdbms'; - * - * Important: each connection defined here must establish the connection within the dbConnect() method above, an - * example for both mongo and dbro exists, for other connections just provide a unique name and access from within - * your models by name: $this->mydbname->query(...); - * - * Caution: do NOT uncomment more than one of the following examples; it will trigger a PHP fatal error if you do! - */ - //Adds MongoDB support in conjunction with other databases - //public static $modelObjects = array('db', 'mongo'); public static $mongo; - - //Uses MongoDB as the exclusive datasource - //public static $modelObjects = array('mongo'); public static $mongo; - - //Adds an additional database connection called "dbro" - //public static $modelObjects = array('db', 'dbro'); public static $dbro; - - /** - * If true all self::$modelObjects database connections are made upon loading the first model - * If false your connections are lazy-loaded when needed but each of your models must extend the model abstract - * eg.: class wikiModel extends model {...} - */ - const MODEL_AUTOCONNECT = true; - - /** - * Enables the caching functions by initializing get::$cache with a cache object (Memcache is default, but - * can be any object-oriented cache mechanism.) - */ - public function cache() { - /* // uncomment this section to enable Memcache caching (Memcache must be installed and enabled in PHP) - if (!class_exists('memcache')) { - return false; - } - get::$cache = new Memcache; - //get::$cache->addServer('HOSTNAME', 'PORT') - //Following is the typical setting for a single-server configuration: - get::$cache->addServer('localhost', 11211); - */ - } - - /** - * Enables special AJAX handling - eg.: AJAX requests will skip the layout file and just return the view contents - * - * Can be set globally here and then overridden form within any controller-action or component - * - * Valid values: - * (Boolean) true or false will enable or disable AJAX in all controllers - * array('controlerName1' => true, - * 'controlerName2' => 'actionName', - * 'controlerName3' => array('action1', 'action2')) - * - * @var mixed Boolean or an array with controller-name keys & val either true, an action name or an array of actions - */ - public $ajaxEnabled = true; - - /** - * Execute a file that is global to the application before the page loads - * File must be in the root of the mvc directory - */ - const APP_CONSTRUCT = null; - - /** - * Execute a file that is global to the application after the page loads - * File must be in the root of the mvc directory - */ - const APP_DESTRUCT = null; - - /** - * Enter your ShareThis publisher code to enable the shareThis tools helper - */ - //const SHARE_THIS = 'd123456789-1234-1234-1234-a1e123456f'; - - - /** - * Enter your AddThis publisher code to enable the addThis tools helper - */ - //const ADD_THIS = 'xa-1234567890123e'; - - /** - * Enter your Google AdSense client ID to enable use of the adSense tools helper - */ - //const GOOGLE_AD_CLIENT = ''; - - /** - * Enter your Google Checkout credentials to enable use of the helper - */ - /* - public $GOOGLE_CHECKOUT = array('useSandbox' => false, - 'live' => array('id' => 'YOURID', 'key' => 'YOURKEY'), - 'sandbox' => array('id' => 'YOURID', 'key' => 'YOURKEY')); - */ - - /** - * Enter your AuthorizeNet credentials to enable use of the chargeAuthNet method of the cc component - */ - /* - const AUTHNET_LOGIN = ''; - const AUTHNET_PASSWORD = ''; - */ - - /** - * Meetup API key - enables usage of the Meetup tools-helper - */ - //const MEETUP_API_KEY = '47e794a9c4766374c761a57833a77'; - - /** - * Enter your UPS account credentials and XML Access Key (refer to ups.com for signup) to enable use of - * the UPS functions in the shipping component - * - * @var array - */ - //public $UPS = array('xmlAccessKey' => 'YOURKEY000000000', 'userid' => 'YOURID', 'password' => 'YOURPASS'); - - /** - * Enter your Amazon Web Services credentials to enable use of the amazon component - */ - /* - public $AMAZON = array('id' => '0000-0000-1234', 'accessKey' => 'AAAABBBBX12345CCDDDD', - 'secretKey' => 'aA01234560bB01234560cC01234560dD'); - */ - - /** - * Enter your PayPal email to enable use of the PayPal component - */ - //const PAYPAL_EMAIL = 'you@yourdomain.com'; - - /** - * Convenience function to determine if a user is a "superuser" (someone who gets complete access to - * all information) and by default only used in the errorhandler view (to determine verbosity) but typical applications - * find many uses for this - * - * Note, if your application uses this method to grant access to private resources then you are highly-recommended - * to use a stronger authentication method than just checking the IP address (IPs can easily be spoofed.) - * - * @return boolean - */ - public function isSuperuser() { - return (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] == '127.0.0.1'); // <--change this before use - } - - /** - * Set any application-specific constants or properties after this comment. - * examples: - * const MY_CONSTANT = 'Hello, Shalom and Bonjour'; - * public $myProperty = array(1, 2, 3); - * - * Access them from any MVC element via: - * get::$config->MY_CONSTANT - * get::$config->myProperty - */ - //const EXAMPLE_CONSTANT = 'your data...'; -} - -/** - * If you are using a relational-database other than MySQL or Amazon RDS (eg. SQLite, Oracle, etc.) then you need to - * set your RDBMS-type in the .config-rdbms file. If you are NOT using a relational-database then comment out the - * next line. Note: MongoDB and other NoSQL databases are NOT relational and do not require the .config-rdbms file - */ -require '.config-rdbms'; \ No newline at end of file diff --git a/src/.debug b/src/.debug deleted file mode 100644 index 52fa0a0..0000000 --- a/src/.debug +++ /dev/null @@ -1,221 +0,0 @@ - 1) { - $return = (end(self::$timer[$id]) - reset(self::$timer[$id])); - } - return number_format($return, 5); - } - - /** - * Reports the total time table for a timer via the debug output mode - * - * @param mixed $id Optional, any vector type is valid - * @return string Nicely formatted float - */ - public static function timerReport($id = 'default') { - if (!isset(self::$timer[$id])) { - return null; - } - $last = reset(self::$timer[$id]); - if (self::$_modeStatic == 'FirePHP') { - $FirePHP = FirePHP::getInstance(true); - foreach (self::$timer[$id] as $breakpointId => $val) { - $FirePHP->info((string) $breakpointId, number_format(($val - $last), 5)); - $last = $val; - } - } else { - foreach (self::$timer[$id] as $breakpointId => $val) { - $return[] = number_format(($val - $last), 5) . ' - ' . $breakpointId; - $last = $val; - } - if (self::$_modeStatic == 'html' || self::$_modeStatic == 'text') { - $recordDelimiter = PHP_EOL . PHP_EOL; - if (self::$_modeStatic == 'html') { - $recordDelimiter .= '
'; - } - echo $recordDelimiter . implode($recordDelimiter, $return) . $recordDelimiter; - } - return $return; - } - } - - /** - * Logs a SQL query - * - * @param string $query - * @param float $executionTime Optional - * @param string $error Optional - */ - public static function logQuery($query, $executionTime = null, $error = null) { - self::$_queries[] = array('query' => $query, 'executionTime' => $executionTime, 'error' => $error); - } - - /** - * Logs a message - * - * @param str $data - * @param str $type Valid options are log, info, warn and error - */ - public static function log($data, $type = 'log') { - self::$_log[] = array('data' => $data, 'method' => $type, 'time' => self::microtime()); - } - - /** - * Initializes the debug system - * - * @param string $mode Optional. Mode of output by default is html, but the framework automatically overrides - * this with your DEBUG_OUTPUT_METHOD setting - */ - public function __construct($mode = 'html') { - if ($mode == 'auto') { - $mode = (strpos($_SERVER['HTTP_USER_AGENT'], 'FirePHP') !== false ? 'FirePHP' : 'html'); - } - if ($mode == 'FirePHP' && !class_exists('FirePHP')) { - $configInit = new configInit; - $firephpDir = $configInit->packagesPath() . 'FirePHPCore' . $configInit->DS; - if (is_dir($firephpDir)) { - require_once $firephpDir . 'FirePHP.class.php'; - } - if (!class_exists('FirePHP')) { - $mode = 'html'; - } - } - if ($mode == 'FirePHP' && ini_get('output_buffering') != 'On') { - ob_start(); - } - self::$_modeStatic = $this->_mode = $mode; - $this->_timeStart = self::microtime(); - } - - /** - * Tallies up the debug info and outputs it - */ - public function __destruct() { - $execTime = 'Page execution time: ' . number_format(self::microtime() - $this->_timeStart, 5); - $sqlExecString = 'Execution time of previous SQL: '; - if ($this->_mode == 'FirePHP') { - $FirePHP = FirePHP::getInstance(true); - $FirePHP->info($execTime); - if (!empty(self::$_log)) { - $timeLast = $this->_timeStart; - foreach (self::$_log as $logArray) { - $data = '(' . number_format($logArray['time'] - $timeLast, 5) . ') ' . $logArray['data']; - $FirePHP->{$logArray['method']}($data); - $timeLast = $logArray['time']; - } - } - if (!empty(self::$_queries)) { - foreach (self::$_queries as $queryArray) { - $FirePHP->group('SQL'); - $FirePHP->log($queryArray['query']); - if ($queryArray['executionTime'] !== null) { - $FirePHP->info($sqlExecString . $queryArray['executionTime']); - } - if ($queryArray['error'] !== null) { - $FirePHP->error($queryArray['error']); - } - $FirePHP->groupEnd(); - } - } - } else { - $recordDelimiter = PHP_EOL . PHP_EOL; - $lineDelimiter = PHP_EOL; - if ($this->_mode == 'html') { - echo '
'; - $recordDelimiter .= '
'; - $lineDelimiter .= '
'; - } - echo $recordDelimiter . $execTime; - if (!empty(self::$_log)) { - foreach (self::$_log as $logArray) { - echo $lineDelimiter . $logArray['method'] . ': ' . get::htmlentities($logArray['data']); - } - } - if (!empty(self::$_queries)) { - foreach (self::$_queries as $queryArray) { - echo $recordDelimiter . ($this->_mode == 'html' ? get::htmlentities($queryArray['query']) - : $queryArray['query']); - if ($queryArray['executionTime'] !== null) { - echo $lineDelimiter . $sqlExecString . $queryArray['executionTime']; - } - if ($queryArray['error'] !== null) { - echo $lineDelimiter . $queryArray['error']; - } - } - } - } - } -} -$debugObject = new debug(DEBUG_OUTPUT_METHOD); \ No newline at end of file diff --git a/src/.dependencies b/src/.dependencies deleted file mode 100644 index 3e82e06..0000000 --- a/src/.dependencies +++ /dev/null @@ -1,26 +0,0 @@ -git: - problems: - url: https://github.com/getgrav/grav-plugin-problems - path: user/plugins/problems - branch: master - error: - url: https://github.com/getgrav/grav-plugin-error - path: user/plugins/error - branch: master - antimatter: - url: https://github.com/getgrav/grav-theme-antimatter - path: user/themes/antimatter - branch: master -links: - problems: - src: grav-plugin-problems - path: user/plugins/problems - scm: github - error: - src: grav-plugin-error - path: user/plugins/error - scm: github - antimatter: - src: grav-theme-antimatter - path: user/themes/antimatter - scm: github diff --git a/src/.hg_archival.txt b/src/.hg_archival.txt deleted file mode 100644 index 268fb1e..0000000 --- a/src/.hg_archival.txt +++ /dev/null @@ -1,5 +0,0 @@ -repo: 4bb20edbf41fe2cf5294bfad1428e943f7d3fe65 -node: 01251bf0ea8aeaec434f4226bee735eaf1bc14ba -branch: default -latesttag: null -latesttagdistance: 25 diff --git a/src/.hgignore b/src/.hgignore deleted file mode 100644 index e43b0f9..0000000 --- a/src/.hgignore +++ /dev/null @@ -1 +0,0 @@ -.DS_Store diff --git a/src/.htaccess b/src/.htaccess deleted file mode 100644 index db50159..0000000 --- a/src/.htaccess +++ /dev/null @@ -1,63 +0,0 @@ - - -RewriteEngine On - -## Begin RewriteBase -# If you are getting 404 errors on subpages, you may have to uncomment the RewriteBase entry -# You should change the '/' to your appropriate subfolder. For example if you have -# your Grav install at the root of your site '/' should work, else it might be something -# along the lines of: RewriteBase / -## - -# RewriteBase / - -## End - RewriteBase - -## Begin - Exploits -# If you experience problems on your site block out the operations listed below -# This attempts to block the most common type of exploit `attempts` to Grav -# -# Block out any script trying to base64_encode data within the URL. -RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR] -# Block out any script that includes a ' . "\n"; - } - foreach ($this->js_no_pipeline as $file) { - if ($group && $file['group'] == $group) { - $output .= '' . "\n"; - } - } - } else { - foreach ($this->js as $file) { - if ($group && $file['group'] == $group) { - $output .= '' . "\n"; - } - } - } - - // Render Inline JS - foreach ($this->inline_js as $inline) { - if ($group && $inline['group'] == $group) { - $inline_js .= $inline['asset'] . "\n"; - } - } - - if ($inline_js) { - $output .= "\n\n"; - } - - return $output; - } - - /** - * Minify and concatenate CSS. - * - * @return string - */ - protected function pipelineCss($group = 'head') - { - /** @var Cache $cache */ - $cache = self::getGrav()['cache']; - $key = '?' . $cache->getKey(); - - // temporary list of assets to pipeline - $temp_css = []; - - // clear no-pipeline assets lists - $this->css_no_pipeline = []; - - $file = md5(json_encode($this->css) . $this->css_minify . $this->css_rewrite . $group) . '.css'; - - $relative_path = "{$this->base_url}{$this->assets_url}/{$file}"; - $absolute_path = $this->assets_dir . $file; - - // If pipeline exist return it - if (file_exists($absolute_path)) { - return $relative_path . $key; - } - - // Remove any non-pipeline files - foreach ($this->css as $id => $asset) { - if ($asset['group'] == $group) { - if (!$asset['pipeline']) { - $this->css_no_pipeline[$id] = $asset; - } else { - $temp_css[$id] = $asset; - } - } - } - - //if nothing found get out of here! - if (count($temp_css) == 0) { - return false; - } - - $css_minify = $this->css_minify; - - // If this is a Windows server, and minify_windows is false (default value) skip the - // minification process because it will cause Apache to die/crash due to insufficient - // ThreadStackSize in httpd.conf - See: https://bugs.php.net/bug.php?id=47689 - if (strtoupper(substr(php_uname('s'), 0, 3)) === 'WIN' && !$this->css_minify_windows) { - $css_minify = false; - } - - // Concatenate files - $buffer = $this->gatherLinks($temp_css, CSS_ASSET); - if ($css_minify) { - $min = new \CSSmin(); - $buffer = $min->run($buffer); - } - - // Write file - if (strlen(trim($buffer)) > 0) { - file_put_contents($absolute_path, $buffer); - return $relative_path . $key; - } else { - return false; - } - } - - /** - * Minify and concatenate JS files. - * - * @return string - */ - protected function pipelineJs($group = 'head') - { - /** @var Cache $cache */ - $cache = self::getGrav()['cache']; - $key = '?' . $cache->getKey(); - - // temporary list of assets to pipeline - $temp_js = []; - - // clear no-pipeline assets lists - $this->js_no_pipeline = []; - - $file = md5(json_encode($this->js) . $this->js_minify . $group) . '.js'; - - $relative_path = "{$this->base_url}{$this->assets_url}/{$file}"; - $absolute_path = $this->assets_dir . $file; - - // If pipeline exist return it - if (file_exists($absolute_path)) { - return $relative_path . $key; - } - - // Remove any non-pipeline files - foreach ($this->js as $id => $asset) { - if ($asset['group'] == $group) { - if (!$asset['pipeline']) { - $this->js_no_pipeline[] = $asset; - } else { - $temp_js[$id] = $asset; - } - } - } - - //if nothing found get out of here! - if (count($temp_js) == 0) { - return false; - } - - // Concatenate files - $buffer = $this->gatherLinks($temp_js, JS_ASSET); - if ($this->js_minify) { - $buffer = \JSMin::minify($buffer); - } - - // Write file - if (strlen(trim($buffer)) > 0) { - file_put_contents($absolute_path, $buffer); - return $relative_path . $key; - } else { - return false; - } - } - - /** - * Return the array of all the registered CSS assets - * - * @return array - */ - public function getCss() - { - return $this->css; - } - - /** - * Return the array of all the registered JS assets - * - * @return array - */ - public function getJs() - { - return $this->js; - } - - /** - * Return the array of all the registered collections - * - * @return array - */ - public function getCollections() - { - return $this->collections; - } - - /** - * Determines if an asset exists as a collection, CSS or JS reference - * - * @param $asset - * - * @return bool - */ - public function exists($asset) - { - if (isset($this->collections[$asset]) || - isset($this->css[$asset]) || - isset($this->js[$asset])) { - return true; - } else { - return false; - } - } - - /** - * Add/replace collection. - * - * @param string $collectionName - * @param array $assets - * @param bool $overwrite - * - * @return $this - */ - public function registerCollection($collectionName, Array $assets, $overwrite = false) - { - if ($overwrite || !isset($this->collections[$collectionName])) { - $this->collections[$collectionName] = $assets; - } - - return $this; - } - - /** - * Reset all assets. - * - * @return $this - */ - public function reset() - { - return $this->resetCss()->resetJs(); - } - - /** - * Reset JavaScript assets. - * - * @return $this - */ - public function resetJs() - { - $this->js = array(); - - return $this; - } - - /** - * Reset CSS assets. - * - * @return $this - */ - public function resetCss() - { - $this->css = array(); - - return $this; - } - - /** - * Add all CSS assets within $directory (relative to public dir). - * - * @param string $directory Relative to $this->public_dir - * - * @return $this - */ - public function addDirCss($directory) - { - return $this->addDir($directory, self::CSS_REGEX); - } - - /** - * Add all assets matching $pattern within $directory. - * - * @param string $directory Relative to $this->public_dir - * @param string $pattern (regex) - * - * @return $this - * @throws Exception - */ - public function addDir($directory, $pattern = self::DEFAULT_REGEX) - { - // Check if public_dir exists - if (!is_dir($this->assets_dir)) { - throw new Exception('Assets: Public dir not found'); - } - - // Get files - $files = $this->rglob($this->assets_dir . DIRECTORY_SEPARATOR . $directory, $pattern, $this->assets_dir); - - // No luck? Nothing to do - if (!$files) { - return $this; - } - - // Add CSS files - if ($pattern === self::CSS_REGEX) { - $this->css = array_unique(array_merge($this->css, $files)); - return $this; - } - - // Add JavaScript files - if ($pattern === self::JS_REGEX) { - $this->js = array_unique(array_merge($this->js, $files)); - return $this; - } - - // Unknown pattern. We must poll to know the extension :( - foreach ($files as $asset) { - $info = pathinfo($asset); - if (isset($info['extension'])) { - $ext = strtolower($info['extension']); - if ($ext === 'css' && !in_array($asset, $this->css)) { - $this->css[] = $asset; - } elseif ($ext === 'js' && !in_array($asset, $this->js)) { - $this->js[] = $asset; - } - } - } - - return $this; - } - - /** - * Determine whether a link is local or remote. - * - * Understands both "http://" and "https://" as well as protocol agnostic links "//" - * - * @param string $link - * - * @return bool - */ - protected function isRemoteLink($link) - { - return ('http://' === substr($link, 0, 7) || 'https://' === substr($link, 0, 8) - || '//' === substr($link, 0, 2)); - } - - /** - * Build local links including grav asset shortcodes - * - * @param string $asset the asset string reference - * - * @return string the final link url to the asset - */ - protected function buildLocalLink($asset) - { - try { - $asset = self::getGrav()['locator']->findResource($asset, false); - } catch (\Exception $e) { - } - - return $asset ? $this->base_url . ltrim($asset, '/') : false; - } - - /** - * Build an HTML attribute string from an array. - * - * @param array $attributes - * - * @return string - */ - protected function attributes(array $attributes) - { - $html = ''; - - foreach ($attributes as $key => $value) { - // For numeric keys we will assume that the key and the value are the same - // as this will convert HTML attributes such as "required" to a correct - // form like required="required" instead of using incorrect numerics. - if (is_numeric($key)) { - $key = $value; - } - if (is_array($value)) { - $value = implode(' ', $value); - } - - $element = $key . '="' . htmlentities($value, ENT_QUOTES, 'UTF-8', false) . '"'; - $html .= ' ' . $element; - } - - return $html; - } - - /** - * Download and concatenate the content of several links. - * - * @param array $links - * @param bool $css - * - * @return string - */ - protected function gatherLinks(array $links, $css = true) - { - - - $buffer = ''; - $local = true; - - foreach ($links as $asset) { - $link = $asset['asset']; - $relative_path = $link; - - if ($this->isRemoteLink($link)) { - $local = false; - if ('//' === substr($link, 0, 2)) { - $link = 'http:' . $link; - } - } else { - // Fix to remove relative dir if grav is in one - if (($this->base_url != '/') && (strpos($this->base_url, $link) == 0)) { - $base_url = '#' . preg_quote($this->base_url, '#') . '#'; - $relative_path = ltrim(preg_replace($base_url, '/', $link, 1), '/'); - } - - $relative_dir = dirname($relative_path); - $link = ROOT_DIR . $relative_path; - } - - $file = ($this->fetch_command instanceof Closure) ? @$this->fetch_command->__invoke($link) : @file_get_contents($link); - - // No file found, skip it... - if ($file === false) { - continue; - } - - // Double check last character being - if (!$css) { - $file = rtrim($file, ' ;') . ';'; - } - - // If this is CSS + the file is local + rewrite enabled - if ($css && $local && $this->css_rewrite) { - $file = $this->cssRewrite($file, $relative_dir); - } - - $buffer .= $file; - } - - // Pull out @imports and move to top - if ($css) { - $buffer = $this->moveImports($buffer); - } - - return $buffer; - } - - /** - * Finds relative CSS urls() and rewrites the URL with an absolute one - * - * @param $file the css source file - * @param $relative_path relative path to the css file - * - * @return mixed - */ - protected function cssRewrite($file, $relative_path) - { - // Strip any sourcemap comments - $file = preg_replace(self::CSS_SOURCEMAP_REGEX, '', $file); - - // Find any css url() elements, grab the URLs and calculate an absolute path - // Then replace the old url with the new one - $file = preg_replace_callback( - self::CSS_URL_REGEX, - function ($matches) use ($relative_path) { - - $old_url = $matches[1]; - - // ensure this is not a data url - if (strpos($old_url, 'data:') === 0) { - return $matches[0]; - } - - $new_url = $this->base_url . ltrim(Utils::normalizePath($relative_path . '/' . $old_url), '/'); - - return str_replace($old_url, $new_url, $matches[0]); - }, - $file - ); - - return $file; - } - - /** - * Moves @import statements to the top of the file per the CSS specification - * - * @param string $file the file containing the combined CSS files - * - * @return string the modified file with any @imports at the top of the file - */ - protected function moveImports($file) - { - $this->imports = array(); - - $file = preg_replace_callback( - self::CSS_IMPORT_REGEX, - function ($matches) { - $this->imports[] = $matches[0]; - return ''; - }, - $file - ); - - return implode("\n", $this->imports) . "\n\n" . $file; - } - - /** - * Recursively get files matching $pattern within $directory. - * - * @param string $directory - * @param string $pattern (regex) - * @param string $ltrim Will be trimmed from the left of the file path - * - * @return array - */ - protected function rglob($directory, $pattern, $ltrim = null) - { - $iterator = new RegexIterator( - new RecursiveIteratorIterator( - new RecursiveDirectoryIterator( - $directory, - FilesystemIterator::SKIP_DOTS - ) - ), - $pattern - ); - $offset = strlen($ltrim); - $files = array(); - - foreach ($iterator as $file) { - $files[] = substr($file->getPathname(), $offset); - } - - return $files; - } - - /** - * Add all JavaScript assets within $directory. - * - * @param string $directory Relative to $this->public_dir - * - * @return $this - */ - public function addDirJs($directory) - { - return $this->addDir($directory, self::JS_REGEX); - } - - public function __toString() - { - return ''; - } - - /** - * @param $a - * @param $b - * - * @return mixed - */ - protected function priorityCompare($a, $b) - { - return $a ['priority'] - $b ['priority']; - } - -} diff --git a/src/system/src/Grav/Common/Backup/ZipBackup.php b/src/system/src/Grav/Common/Backup/ZipBackup.php deleted file mode 100644 index c73358e..0000000 --- a/src/system/src/Grav/Common/Backup/ZipBackup.php +++ /dev/null @@ -1,130 +0,0 @@ -findResource('backup://', true); - - if (!$destination) - throw new \RuntimeException('The backup folder is missing.'); - - Folder::mkdir($destination); - } - - $name = self::getGrav()['config']->get('site.title', basename(GRAV_ROOT)); - - $inflector = new Inflector(); - - if (is_dir($destination)) { - $date = date('YmdHis', time()); - $filename = trim($inflector->hyphenize($name), '-') . '-' . $date . '.zip'; - $destination = rtrim($destination, DS) . DS . $filename; - } - - $messager && $messager([ - 'type' => 'message', - 'level' => 'info', - 'message' => 'Creating new Backup "' . $destination . '"' - ]); - $messager && $messager([ - 'type' => 'message', - 'level' => 'info', - 'message' => '' - ]); - - $zip = new \ZipArchive(); - $zip->open($destination, \ZipArchive::CREATE); - - static::folderToZip(GRAV_ROOT, $zip, strlen(rtrim(GRAV_ROOT, DS) . DS), $messager); - - $messager && $messager([ - 'type' => 'progress', - 'percentage' => false, - 'complete' => true - ]); - - $messager && $messager([ - 'type' => 'message', - 'level' => 'info', - 'message' => '' - ]); - $messager && $messager([ - 'type' => 'message', - 'level' => 'info', - 'message' => 'Saving and compressing archive...' - ]); - - $zip->close(); - - return $destination; - } - - /** - * @param $folder - * @param $zipFile - * @param $exclusiveLength - * @param $messager - */ - private static function folderToZip($folder, \ZipArchive &$zipFile, $exclusiveLength, callable $messager = null) - { - $handle = opendir($folder); - while (false !== $f = readdir($handle)) { - if ($f != '.' && $f != '..') { - $filePath = "$folder/$f"; - // Remove prefix from file path before add to zip. - $localPath = substr($filePath, $exclusiveLength); - - if (in_array($f, static::$ignoreFolders)) { - continue; - } elseif (in_array($localPath, static::$ignorePaths)) { - $zipFile->addEmptyDir($f); - continue; - } - - if (is_file($filePath)) { - $zipFile->addFile($filePath, $localPath); - - $messager && $messager([ - 'type' => 'progress', - 'percentage' => false, - 'complete' => false - ]); - } elseif (is_dir($filePath)) { - // Add sub-directory. - $zipFile->addEmptyDir($localPath); - static::folderToZip($filePath, $zipFile, $exclusiveLength, $messager); - } - } - } - closedir($handle); - } -} diff --git a/src/system/src/Grav/Common/Browser.php b/src/system/src/Grav/Common/Browser.php deleted file mode 100644 index 4feea46..0000000 --- a/src/system/src/Grav/Common/Browser.php +++ /dev/null @@ -1,58 +0,0 @@ -useragent = parse_user_agent(); - } catch (\InvalidArgumentException $e) { - $this->useragent = parse_user_agent("Mozilla/5.0 (compatible; Unknown;)"); - } - } - - public function getBrowser() - { - return strtolower($this->useragent['browser']); - } - - public function getPlatform() - { - return strtolower($this->useragent['platform']); - } - - public function getLongVersion() - { - return $this->useragent['version']; - } - - public function getVersion() - { - $version = explode('.', $this->getLongVersion()); - return intval($version[0]); - } - - /** - * Determine if the request comes from a human, or from a bot/crawler - */ - public function isHuman() - { - $browser = $this->getBrowser(); - if (empty($browser)) { - return false; - } - - if (preg_match('~(bot|crawl)~i', $browser)) { - return false; - } - - return true; - } -} diff --git a/src/system/src/Grav/Common/Cache.php b/src/system/src/Grav/Common/Cache.php deleted file mode 100644 index 0445c50..0000000 --- a/src/system/src/Grav/Common/Cache.php +++ /dev/null @@ -1,314 +0,0 @@ -init($grav); - } - - /** - * Initialization that sets a base key and the driver based on configuration settings - * - * @param Grav $grav - * @return void - */ - public function init(Grav $grav) - { - /** @var Config $config */ - $this->config = $grav['config']; - $this->now = time(); - - $this->cache_dir = $grav['locator']->findResource('cache://doctrine', true, true); - - /** @var Uri $uri */ - $uri = $grav['uri']; - - $prefix = $this->config->get('system.cache.prefix'); - - $this->enabled = (bool) $this->config->get('system.cache.enabled'); - - // Cache key allows us to invalidate all cache on configuration changes. - $this->key = ($prefix ? $prefix : 'g') . '-' . substr(md5($uri->rootUrl(true) . $this->config->key() . GRAV_VERSION), 2, 8); - - $this->driver = $this->getCacheDriver(); - - // Set the cache namespace to our unique key - $this->driver->setNamespace($this->key); - } - - /** - * Automatically picks the cache mechanism to use. If you pick one manually it will use that - * If there is no config option for $driver in the config, or it's set to 'auto', it will - * pick the best option based on which cache extensions are installed. - * - * @return DoctrineCacheDriver The cache driver to use - */ - public function getCacheDriver() - { - $setting = $this->config->get('system.cache.driver'); - $driver_name = 'file'; - - if (!$setting || $setting == 'auto') { - if (extension_loaded('apc')) { - $driver_name = 'apc'; - } elseif (extension_loaded('wincache')) { - $driver_name = 'wincache'; - } elseif (extension_loaded('xcache')) { - $driver_name = 'xcache'; - } - } else { - $driver_name = $setting; - } - - switch ($driver_name) { - case 'apc': - $driver = new \Doctrine\Common\Cache\ApcCache(); - break; - - case 'wincache': - $driver = new \Doctrine\Common\Cache\WinCacheCache(); - break; - - case 'xcache': - $driver = new \Doctrine\Common\Cache\XcacheCache(); - break; - - case 'memcache': - $memcache = new \Memcache(); - $memcache->connect($this->config->get('system.cache.memcache.server','localhost'), - $this->config->get('system.cache.memcache.port', 11211)); - $driver = new \Doctrine\Common\Cache\MemcacheCache(); - $driver->setMemcache($memcache); - break; - - case 'redis': - $redis = new \Redis(); - $redis->connect($this->config->get('system.cache.redis.server','localhost'), - $this->config->get('system.cache.redis.port', 6379)); - - $driver = new \Doctrine\Common\Cache\RedisCache(); - $driver->setRedis($redis); - break; - - default: - $driver = new \Doctrine\Common\Cache\FilesystemCache($this->cache_dir); - break; - } - - return $driver; - } - - /** - * Gets a cached entry if it exists based on an id. If it does not exist, it returns false - * - * @param string $id the id of the cached entry - * @return object returns the cached entry, can be any type, or false if doesn't exist - */ - public function fetch($id) - { - if ($this->enabled) { - return $this->driver->fetch($id); - } else { - return false; - } - } - - /** - * Stores a new cached entry. - * - * @param string $id the id of the cached entry - * @param array|object $data the data for the cached entry to store - * @param int $lifetime the lifetime to store the entry in seconds - */ - public function save($id, $data, $lifetime = null) - { - if ($this->enabled) { - if ($lifetime === null) { - $lifetime = $this->getLifetime(); - } - $this->driver->save($id, $data, $lifetime); - } - } - - /** - * Getter method to get the cache key - */ - public function getKey() - { - return $this->key; - } - - /** - * Helper method to clear all Grav caches - * - * @param string $remove standard|all|assets-only|images-only|cache-only - * - * @return array - */ - public static function clearCache($remove = 'standard') - { - - $output = []; - $user_config = USER_DIR . 'config/system.yaml'; - - switch($remove) { - case 'all': - $remove_paths = self::$all_remove; - break; - case 'assets-only': - $remove_paths = self::$assets_remove; - break; - case 'images-only': - $remove_paths = self::$images_remove; - break; - case 'cache-only': - $remove_paths = self::$cache_remove; - break; - default: - $remove_paths = self::$standard_remove; - } - - - foreach ($remove_paths as $path) { - - $anything = false; - $files = glob(ROOT_DIR . $path . '*'); - - if (is_array($files)) { - foreach ($files as $file) { - if (is_file($file)) { - if (@unlink($file)) { - $anything = true; - } - } elseif (is_dir($file)) { - if (@Folder::delete($file)) { - $anything = true; - } - } - } - } - - if ($anything) { - $output[] = 'Cleared: ' . $path . '*'; - } - } - - $output[] = ''; - - if (($remove == 'all' || $remove == 'standard') && file_exists($user_config)) { - touch($user_config); - - $output[] = 'Touched: ' . $user_config; - $output[] = ''; - } - - return $output; - } - - - /** - * Set the cache lifetime programmatically - * - * @param int $future timestamp - */ - public function setLifetime($future) - { - if (!$future) { - return; - } - - $interval = $future - $this->now; - if ($interval > 0 && $interval < $this->getLifetime()) { - $this->lifetime = $interval; - } - } - - - /** - * Retrieve the cache lifetime (in seconds) - * - * @return mixed - */ - public function getLifetime() - { - if ($this->lifetime === null) { - $this->lifetime = $this->config->get('system.cache.lifetime') ?: 604800; // 1 week default - } - - return $this->lifetime; - } -} diff --git a/src/system/src/Grav/Common/Composer.php b/src/system/src/Grav/Common/Composer.php deleted file mode 100644 index 5efde89..0000000 --- a/src/system/src/Grav/Common/Composer.php +++ /dev/null @@ -1,55 +0,0 @@ -grav = $grav ?: Grav::instance(); - } - - public function init() - { - /** @var UniformResourceLocator $locator */ - $locator = $this->grav['locator']; - - $blueprints = $locator->findResources('blueprints://config'); - $plugins = $locator->findResources('plugins://'); - - $blueprintFiles = $this->getBlueprintFiles($blueprints, $plugins); - - $this->loadCompiledBlueprints($plugins + $blueprints, $blueprintFiles); - } - - protected function loadCompiledBlueprints($blueprints, $blueprintFiles) - { - $checksum = md5(serialize($blueprints)); - $filename = CACHE_DIR . 'compiled/blueprints/' . $checksum .'.php'; - $checksum .= ':'.md5(serialize($blueprintFiles)); - $class = get_class($this); - $file = PhpFile::instance($filename); - - if ($file->exists()) { - $cache = $file->exists() ? $file->content() : null; - } else { - $cache = null; - } - - - // Load real file if cache isn't up to date (or is invalid). - if ( - !is_array($cache) - || empty($cache['checksum']) - || empty($cache['$class']) - || $cache['checksum'] != $checksum - || $cache['@class'] != $class - ) { - // Attempt to lock the file for writing. - $file->lock(false); - - // Load blueprints. - $this->blueprints = new Blueprints(); - foreach ($blueprintFiles as $key => $files) { - $this->loadBlueprints($key); - } - - $cache = [ - '@class' => $class, - 'checksum' => $checksum, - 'files' => $blueprintFiles, - 'data' => $this->blueprints->toArray() - ]; - - // If compiled file wasn't already locked by another process, save it. - if ($file->locked() !== false) { - $file->save($cache); - $file->unlock(); - } - } else { - $this->blueprints = new Blueprints($cache['data']); - } - } - - /** - * Load global blueprints. - * - * @param string $key - * @param array $files - */ - public function loadBlueprints($key, array $files = null) - { - if (is_null($files)) { - $files = $this->files[$key]; - } - foreach ($files as $name => $item) { - $file = CompiledYamlFile::instance($item['file']); - $this->blueprints->embed($name, $file->content(), '/'); - } - } - - /** - * Get all blueprint files (including plugins). - * - * @param array $blueprints - * @param array $plugins - * @return array - */ - protected function getBlueprintFiles(array $blueprints, array $plugins) - { - $list = []; - foreach (array_reverse($plugins) as $folder) { - $list += $this->detectPlugins($folder, true); - } - foreach (array_reverse($blueprints) as $folder) { - $list += $this->detectConfig($folder, true); - } - return $list; - } - - /** - * Detects all plugins with a configuration file and returns last modification time. - * - * @param string $lookup Location to look up from. - * @param bool $blueprints - * @return array - * @internal - */ - protected function detectPlugins($lookup = SYSTEM_DIR, $blueprints = false) - { - $find = $blueprints ? 'blueprints.yaml' : '.yaml'; - $location = $blueprints ? 'blueprintFiles' : 'configFiles'; - $path = trim(Folder::getRelativePath($lookup), '/'); - if (isset($this->{$location}[$path])) { - return [$path => $this->{$location}[$path]]; - } - - $list = []; - - if (is_dir($lookup)) { - $iterator = new \DirectoryIterator($lookup); - - /** @var \DirectoryIterator $directory */ - foreach ($iterator as $directory) { - if (!$directory->isDir() || $directory->isDot()) { - continue; - } - - $name = $directory->getBasename(); - $filename = "{$path}/{$name}/" . ($find && $find[0] != '.' ? $find : $name . $find); - - if (is_file($filename)) { - $list["plugins/{$name}"] = ['file' => $filename, 'modified' => filemtime($filename)]; - } - } - } - - $this->{$location}[$path] = $list; - - return [$path => $list]; - } - - /** - * Detects all plugins with a configuration file and returns last modification time. - * - * @param string $lookup Location to look up from. - * @param bool $blueprints - * @return array - * @internal - */ - protected function detectConfig($lookup = SYSTEM_DIR, $blueprints = false) - { - $location = $blueprints ? 'blueprintFiles' : 'configFiles'; - $path = trim(Folder::getRelativePath($lookup), '/'); - if (isset($this->{$location}[$path])) { - return [$path => $this->{$location}[$path]]; - } - - if (is_dir($lookup)) { - // Find all system and user configuration files. - $options = [ - 'compare' => 'Filename', - 'pattern' => '|\.yaml$|', - 'filters' => [ - 'key' => '|\.yaml$|', - 'value' => function (\RecursiveDirectoryIterator $file) use ($path) { - return ['file' => "{$path}/{$file->getSubPathname()}", 'modified' => $file->getMTime()]; - }], - 'key' => 'SubPathname' - ]; - - $list = Folder::all($lookup, $options); - } else { - $list = []; - } - - $this->{$location}[$path] = $list; - - return [$path => $list]; - } -} diff --git a/src/system/src/Grav/Common/Config/Config.php b/src/system/src/Grav/Common/Config/Config.php deleted file mode 100644 index cc8acc0..0000000 --- a/src/system/src/Grav/Common/Config/Config.php +++ /dev/null @@ -1,479 +0,0 @@ - [ - 'type' => 'ReadOnlyStream', - 'prefixes' => [ - '' => ['system'], - ] - ], - 'user' => [ - 'type' => 'ReadOnlyStream', - 'prefixes' => [ - '' => ['user'], - ] - ], - 'blueprints' => [ - 'type' => 'ReadOnlyStream', - 'prefixes' => [ - '' => ['user://blueprints', 'system/blueprints'], - ] - ], - 'config' => [ - 'type' => 'ReadOnlyStream', - 'prefixes' => [ - '' => ['user://config', 'system/config'], - ] - ], - 'plugins' => [ - 'type' => 'ReadOnlyStream', - 'prefixes' => [ - '' => ['user://plugins'], - ] - ], - 'plugin' => [ - 'type' => 'ReadOnlyStream', - 'prefixes' => [ - '' => ['user://plugins'], - ] - ], - 'themes' => [ - 'type' => 'ReadOnlyStream', - 'prefixes' => [ - '' => ['user://themes'], - ] - ], - 'languages' => [ - 'type' => 'ReadOnlyStream', - 'prefixes' => [ - '' => ['user://languages', 'system/languages'], - ] - ], - 'cache' => [ - 'type' => 'Stream', - 'prefixes' => [ - '' => ['cache'], - 'images' => ['images'] - ] - ], - 'log' => [ - 'type' => 'Stream', - 'prefixes' => [ - '' => ['logs'] - ] - ], - 'backup' => [ - 'type' => 'Stream', - 'prefixes' => [ - '' => ['backup'] - ] - ] - ]; - - protected $setup = []; - - protected $blueprintFiles = []; - protected $configFiles = []; - protected $languageFiles = []; - protected $checksum; - protected $timestamp; - - protected $configLookup; - protected $blueprintLookup; - protected $pluginLookup; - protected $languagesLookup; - - protected $finder; - protected $environment; - protected $messages = []; - - protected $languages; - - public function __construct(array $setup = array(), Grav $grav = null, $environment = null) - { - $this->grav = $grav ?: Grav::instance(); - $this->finder = new ConfigFinder; - $this->environment = $environment ?: 'localhost'; - $this->messages[] = 'Environment Name: ' . $this->environment; - - // Make sure that - if (!isset($setup['streams']['schemes'])) { - $setup['streams']['schemes'] = []; - } - $setup['streams']['schemes'] += $this->streams; - - $setup = $this->autoDetectEnvironmentConfig($setup); - - $this->setup = $setup; - parent::__construct($setup); - - $this->check(); - } - - public function key() - { - return $this->checksum(); - } - - public function reload() - { - $this->items = $this->setup; - $this->check(); - $this->init(); - $this->debug(); - - return $this; - } - - protected function check() - { - $streams = isset($this->items['streams']['schemes']) ? $this->items['streams']['schemes'] : null; - if (!is_array($streams)) { - throw new \InvalidArgumentException('Configuration is missing streams.schemes!'); - } - $diff = array_keys(array_diff_key($this->streams, $streams)); - if ($diff) { - throw new \InvalidArgumentException( - sprintf('Configuration is missing keys %s from streams.schemes!', implode(', ', $diff)) - ); - } - } - - public function debug() - { - foreach ($this->messages as $message) { - $this->grav['debugger']->addMessage($message); - } - $this->messages = []; - } - - public function init() - { - /** @var UniformResourceLocator $locator */ - $locator = $this->grav['locator']; - - $this->configLookup = $locator->findResources('config://'); - $this->blueprintLookup = $locator->findResources('blueprints://config'); - $this->pluginLookup = $locator->findResources('plugins://'); - - - $this->loadCompiledBlueprints($this->blueprintLookup, $this->pluginLookup, 'master'); - $this->loadCompiledConfig($this->configLookup, $this->pluginLookup, 'master'); - - // process languages if supported - if ($this->get('system.languages.translations', true)) { - $this->languagesLookup = $locator->findResources('languages://'); - $this->loadCompiledLanguages($this->languagesLookup, $this->pluginLookup, 'master'); - } - - $this->initializeLocator($locator); - } - - public function checksum() - { - if (empty($this->checksum)) { - $checkBlueprints = $this->get('system.cache.check.blueprints', false); - $checkLanguages = $this->get('system.cache.check.languages', false); - $checkConfig = $this->get('system.cache.check.config', true); - $checkSystem = $this->get('system.cache.check.system', true); - - if (!$checkBlueprints && !$checkLanguages && !$checkConfig && !$checkSystem) { - $this->messages[] = 'Skip configuration timestamp check.'; - return false; - } - - // Generate checksum according to the configuration settings. - if (!$checkConfig) { - // Just check changes in system.yaml files and ignore all the other files. - $cc = $checkSystem ? $this->finder->locateConfigFile($this->configLookup, 'system') : []; - } else { - // Check changes in all configuration files. - $cc = $this->finder->locateConfigFiles($this->configLookup, $this->pluginLookup); - } - - if ($checkBlueprints) { - $cb = $this->finder->locateBlueprintFiles($this->blueprintLookup, $this->pluginLookup); - } else { - $cb = []; - } - - if ($checkLanguages) { - $cl = $this->finder->locateLanguageFiles($this->languagesLookup, $this->pluginLookup); - } else { - $cl = []; - } - - $this->checksum = md5(json_encode([$cc, $cb, $cl])); - } - - return $this->checksum; - } - - protected function autoDetectEnvironmentConfig($items) - { - $environment = $this->environment; - $env_stream = 'user://'.$environment.'/config'; - - if (file_exists(USER_DIR.$environment.'/config')) { - array_unshift($items['streams']['schemes']['config']['prefixes'][''], $env_stream); - } - - return $items; - } - - protected function loadCompiledBlueprints($blueprints, $plugins, $filename = null) - { - $checksum = md5(json_encode($blueprints)); - $filename = $filename - ? CACHE_DIR . 'compiled/blueprints/' . $filename . '-' . $this->environment . '.php' - : CACHE_DIR . 'compiled/blueprints/' . $checksum . '-' . $this->environment . '.php'; - $file = PhpFile::instance($filename); - $cache = $file->exists() ? $file->content() : null; - $blueprintFiles = $this->finder->locateBlueprintFiles($blueprints, $plugins); - $checksum .= ':'.md5(json_encode($blueprintFiles)); - $class = get_class($this); - - // Load real file if cache isn't up to date (or is invalid). - if ( - !is_array($cache) - || !isset($cache['checksum']) - || !isset($cache['@class']) - || $cache['checksum'] != $checksum - || $cache['@class'] != $class - ) { - // Attempt to lock the file for writing. - $file->lock(false); - - // Load blueprints. - $this->blueprints = new Blueprints; - foreach ($blueprintFiles as $files) { - $this->loadBlueprintFiles($files); - } - - $cache = [ - '@class' => $class, - 'checksum' => $checksum, - 'files' => $blueprintFiles, - 'data' => $this->blueprints->toArray() - ]; - // If compiled file wasn't already locked by another process, save it. - if ($file->locked() !== false) { - $this->messages[] = 'Saving compiled blueprints.'; - $file->save($cache); - $file->unlock(); - } - } else { - $this->blueprints = new Blueprints($cache['data']); - } - } - - protected function loadCompiledConfig($configs, $plugins, $filename = null) - { - $filename = $filename - ? CACHE_DIR . 'compiled/config/' . $filename . '-' . $this->environment . '.php' - : CACHE_DIR . 'compiled/config/' . $checksum . '-' . $this->environment . '.php'; - $file = PhpFile::instance($filename); - $cache = $file->exists() ? $file->content() : null; - $class = get_class($this); - $checksum = $this->checksum(); - - if ( - !is_array($cache) - || !isset($cache['checksum']) - || !isset($cache['@class']) - || $cache['@class'] != $class - ) { - $this->messages[] = 'No cached configuration, compiling new configuration..'; - } else if ($cache['checksum'] !== $checksum) { - $this->messages[] = 'Configuration checksum mismatch, reloading configuration..'; - } else { - $this->messages[] = 'Configuration checksum matches, using cached version.'; - - $this->items = $cache['data']; - return; - } - - $configFiles = $this->finder->locateConfigFiles($configs, $plugins); - - // Attempt to lock the file for writing. - $file->lock(false); - - // Load configuration. - foreach ($configFiles as $files) { - $this->loadConfigFiles($files); - } - $cache = [ - '@class' => $class, - 'timestamp' => time(), - 'checksum' => $checksum, - 'data' => $this->toArray() - ]; - - // If compiled file wasn't already locked by another process, save it. - if ($file->locked() !== false) { - $this->messages[] = 'Saving compiled configuration.'; - $file->save($cache); - $file->unlock(); - } - - $this->items = $cache['data']; - } - - /** - * @param $languages - * @param $plugins - * @param null $filename - */ - protected function loadCompiledLanguages($languages, $plugins, $filename = null) - { - $checksum = md5(json_encode($languages)); - $filename = $filename - ? CACHE_DIR . 'compiled/languages/' . $filename . '-' . $this->environment . '.php' - : CACHE_DIR . 'compiled/languages/' . $checksum . '-' . $this->environment . '.php'; - $file = PhpFile::instance($filename); - $cache = $file->exists() ? $file->content() : null; - $languageFiles = $this->finder->locateLanguageFiles($languages, $plugins); - $checksum .= ':' . md5(json_encode($languageFiles)); - $class = get_class($this); - - // Load real file if cache isn't up to date (or is invalid). - if ( - !is_array($cache) - || !isset($cache['checksum']) - || !isset($cache['@class']) - || $cache['checksum'] != $checksum - || $cache['@class'] != $class - ) { - // Attempt to lock the file for writing. - $file->lock(false); - - // Load languages. - $this->languages = new Languages; - $pluginPaths = str_ireplace(GRAV_ROOT . '/', '', array_reverse($plugins)); - foreach ($pluginPaths as $path) { - if (isset($languageFiles[$path])) { - foreach ((array) $languageFiles[$path] as $plugin => $item) { - $lang_file = CompiledYamlFile::instance($item['file']); - $content = $lang_file->content(); - $this->languages->mergeRecursive($content); - } - unset($languageFiles[$path]); - } - } - - foreach ($languageFiles as $location) { - foreach ($location as $lang => $item) { - $lang_file = CompiledYamlFile::instance($item['file']); - $content = $lang_file->content(); - $this->languages->join($lang, $content, '/'); - } - } - - $cache = [ - '@class' => $class, - 'checksum' => $checksum, - 'files' => $languageFiles, - 'data' => $this->languages->toArray() - ]; - // If compiled file wasn't already locked by another process, save it. - if ($file->locked() !== false) { - $this->messages[] = 'Saving compiled languages.'; - $file->save($cache); - $file->unlock(); - } - } else { - $this->languages = new Languages($cache['data']); - } - } - - /** - * Load blueprints. - * - * @param array $files - */ - public function loadBlueprintFiles(array $files) - { - foreach ($files as $name => $item) { - $file = CompiledYamlFile::instance($item['file']); - $this->blueprints->embed($name, $file->content(), '/'); - } - } - - /** - * Load configuration. - * - * @param array $files - */ - public function loadConfigFiles(array $files) - { - foreach ($files as $name => $item) { - $file = CompiledYamlFile::instance($item['file']); - $this->join($name, $file->content(), '/'); - } - } - - /** - * Initialize resource locator by using the configuration. - * - * @param UniformResourceLocator $locator - */ - public function initializeLocator(UniformResourceLocator $locator) - { - $locator->reset(); - - $schemes = (array) $this->get('streams.schemes', []); - - foreach ($schemes as $scheme => $config) { - if (isset($config['paths'])) { - $locator->addPath($scheme, '', $config['paths']); - } - if (isset($config['prefixes'])) { - foreach ($config['prefixes'] as $prefix => $paths) { - $locator->addPath($scheme, $prefix, $paths); - } - } - } - } - - /** - * Get available streams and their types from the configuration. - * - * @return array - */ - public function getStreams() - { - $schemes = []; - foreach ((array) $this->get('streams.schemes') as $scheme => $config) { - $type = !empty($config['type']) ? $config['type'] : 'ReadOnlyStream'; - if ($type[0] != '\\') { - $type = '\\RocketTheme\\Toolbox\\StreamWrapper\\' . $type; - } - - $schemes[$scheme] = $type; - } - - return $schemes; - } - - public function getLanguages() - { - return $this->languages; - } -} diff --git a/src/system/src/Grav/Common/Config/ConfigFinder.php b/src/system/src/Grav/Common/Config/ConfigFinder.php deleted file mode 100644 index 4606941..0000000 --- a/src/system/src/Grav/Common/Config/ConfigFinder.php +++ /dev/null @@ -1,186 +0,0 @@ -detectInFolder($folder, 'blueprints'); - } - foreach (array_reverse($blueprints) as $folder) { - $list += $this->detectRecursive($folder); - } - return $list; - } - - /** - * Get all locations for configuration files (including plugins). - * - * @param array $configs - * @param array $plugins - * @return array - */ - public function locateConfigFiles(array $configs, array $plugins) - { - $list = []; - foreach (array_reverse($plugins) as $folder) { - $list += $this->detectInFolder($folder); - } - foreach (array_reverse($configs) as $folder) { - $list += $this->detectRecursive($folder); - } - return $list; - } - - public function locateLanguageFiles(array $languages, array $plugins) - { - $list = []; - foreach (array_reverse($plugins) as $folder) { - $list += $this->detectLanguagesInFolder($folder, 'languages'); - } - foreach (array_reverse($languages) as $folder) { - $list += $this->detectRecursive($folder); - } - return $list; - } - - /** - * Get all locations for a single configuration file. - * - * @param array $folders Locations to look up from. - * @param string $name Filename to be located. - * @return array - */ - public function locateConfigFile(array $folders, $name) - { - $filename = "{$name}.yaml"; - - $list = []; - foreach ($folders as $folder) { - $path = trim(Folder::getRelativePath($folder), '/'); - - if (is_file("{$folder}/{$filename}")) { - $modified = filemtime("{$folder}/{$filename}"); - } else { - $modified = 0; - } - $list[$path] = [$name => ['file' => "{$path}/{$filename}", 'modified' => $modified]]; - } - - return $list; - } - - /** - * Detects all plugins with a configuration file and returns them with last modification time. - * - * @param string $folder Location to look up from. - * @param string $lookup Filename to be located. - * @return array - * @internal - */ - protected function detectInFolder($folder, $lookup = null) - { - $path = trim(Folder::getRelativePath($folder), '/'); - - $list = []; - - if (is_dir($folder)) { - $iterator = new \FilesystemIterator($folder); - - /** @var \DirectoryIterator $directory */ - foreach ($iterator as $directory) { - if (!$directory->isDir()) { - continue; - } - - $name = $directory->getBasename(); - $find = ($lookup ?: $name) . '.yaml'; - $filename = "{$path}/{$name}/$find"; - - if (file_exists($filename)) { - $list["plugins/{$name}"] = ['file' => $filename, 'modified' => filemtime($filename)]; - } - } - } - - return [$path => $list]; - } - - protected function detectLanguagesInFolder($folder, $lookup = null) - { - $path = trim(Folder::getRelativePath($folder), '/'); - - $list = []; - - if (is_dir($folder)) { - $iterator = new \FilesystemIterator($folder); - - /** @var \DirectoryIterator $directory */ - foreach ($iterator as $directory) { - if (!$directory->isDir()) { - continue; - } - - $name = $directory->getBasename(); - $find = ($lookup ?: $name) . '.yaml'; - $filename = "{$path}/{$name}/$find"; - - if (file_exists($filename)) { - $list[$name] = ['file' => $filename, 'modified' => filemtime($filename)]; - } - } - } - - return [$path => $list]; - } - - /** - * Detects all plugins with a configuration file and returns them with last modification time. - * - * @param string $folder Location to look up from. - * @return array - * @internal - */ - protected function detectRecursive($folder) - { - $path = trim(Folder::getRelativePath($folder), '/'); - - if (is_dir($folder)) { - // Find all system and user configuration files. - $options = [ - 'compare' => 'Filename', - 'pattern' => '|\.yaml$|', - 'filters' => [ - 'key' => '|\.yaml$|', - 'value' => function (\RecursiveDirectoryIterator $file) use ($path) { - return ['file' => "{$path}/{$file->getSubPathname()}", 'modified' => $file->getMTime()]; - } - ], - 'key' => 'SubPathname' - ]; - - $list = Folder::all($folder, $options); - } else { - $list = []; - } - - return [$path => $list]; - } -} diff --git a/src/system/src/Grav/Common/Config/Languages.php b/src/system/src/Grav/Common/Config/Languages.php deleted file mode 100644 index c014129..0000000 --- a/src/system/src/Grav/Common/Config/Languages.php +++ /dev/null @@ -1,27 +0,0 @@ -items['plugins'])) { - $this->items = array_merge_recursive($this->items, $this->items['plugins']); - unset($this->items['plugins']); - } - } - - public function mergeRecursive(array $data) - { - $this->items = array_merge_recursive($this->items, $data); - } -} diff --git a/src/system/src/Grav/Common/Data/Blueprint.php b/src/system/src/Grav/Common/Data/Blueprint.php deleted file mode 100644 index 15cdce6..0000000 --- a/src/system/src/Grav/Common/Data/Blueprint.php +++ /dev/null @@ -1,456 +0,0 @@ - 1]; - - /** - * @param string $name - * @param array $data - * @param Blueprints $context - */ - public function __construct($name, array $data = array(), Blueprints $context = null) - { - $this->name = $name; - $this->items = $data; - $this->context = $context; - } - - /** - * Set filter for inherited properties. - * - * @param array $filter List of field names to be inherited. - */ - public function setFilter(array $filter) - { - $this->filter = array_flip($filter); - } - - /** - * Return all form fields. - * - * @return array - */ - public function fields() - { - if (!isset($this->fields)) { - $this->fields = []; - $this->embed('', $this->items); - } - - return $this->fields; - } - - /** - * Validate data against blueprints. - * - * @param array $data - * @throws \RuntimeException - */ - public function validate(array $data) - { - // Initialize data - $this->fields(); - - try { - $this->validateArray($data, $this->nested); - } catch (\RuntimeException $e) { - throw new \RuntimeException(sprintf('Validation failed: %s', $e->getMessage())); - } - } - - /** - * Merge two arrays by using blueprints. - * - * @param array $data1 - * @param array $data2 - * @return array - */ - public function mergeData(array $data1, array $data2) - { - // Initialize data - $this->fields(); - return $this->mergeArrays($data1, $data2, $this->nested); - } - - /** - * Filter data by using blueprints. - * - * @param array $data - * @return array - */ - public function filter(array $data) - { - // Initialize data - $this->fields(); - return $this->filterArray($data, $this->nested); - } - - /** - * Return data fields that do not exist in blueprints. - * - * @param array $data - * @param string $prefix - * @return array - */ - public function extra(array $data, $prefix = '') - { - // Initialize data - $this->fields(); - $rules = $this->nested; - - // Drill down to prefix level - if (!empty($prefix)) { - $parts = explode('.', trim($prefix, '.')); - foreach ($parts as $part) { - $rules = isset($rules[$part]) ? $rules[$part] : []; - } - } - - return $this->extraArray($data, $rules, $prefix); - } - - /** - * Extend blueprint with another blueprint. - * - * @param Blueprint $extends - * @param bool $append - */ - public function extend(Blueprint $extends, $append = false) - { - $blueprints = $append ? $this->items : $extends->toArray(); - $appended = $append ? $extends->toArray() : $this->items; - - $bref_stack = array(&$blueprints); - $head_stack = array($appended); - - do { - end($bref_stack); - - $bref = &$bref_stack[key($bref_stack)]; - $head = array_pop($head_stack); - - unset($bref_stack[key($bref_stack)]); - - foreach (array_keys($head) as $key) { - if (isset($key, $bref[$key]) && is_array($bref[$key]) && is_array($head[$key])) { - $bref_stack[] = &$bref[$key]; - $head_stack[] = $head[$key]; - } else { - $bref = array_merge($bref, array($key => $head[$key])); - } - } - } while (count($head_stack)); - - $this->items = $blueprints; - } - - /** - * Convert object into an array. - * - * @return array - */ - public function getState() - { - return ['name' => $this->name, 'items' => $this->items, 'rules' => $this->rules, 'nested' => $this->nested]; - } - - /** - * Embed an array to the blueprint. - * - * @param $name - * @param array $value - * @param string $separator - */ - public function embed($name, array $value, $separator = '.') - { - - if (!isset($value['form']['fields']) || !is_array($value['form']['fields'])) { - return; - } - // Initialize data - $this->fields(); - $prefix = $name ? strtr($name, $separator, '.') . '.' : ''; - $params = array_intersect_key($this->filter, $value); - $this->parseFormFields($value['form']['fields'], $params, $prefix, $this->fields); - } - - /** - * @param array $data - * @param array $rules - * @throws \RuntimeException - * @internal - */ - protected function validateArray(array $data, array $rules) - { - $this->checkRequired($data, $rules); - - foreach ($data as $key => $field) { - $val = isset($rules[$key]) ? $rules[$key] : null; - $rule = is_string($val) ? $this->rules[$val] : null; - - if ($rule) { - // Item has been defined in blueprints. - Validation::validate($field, $rule); - } elseif (is_array($field) && is_array($val)) { - // Array has been defined in blueprints. - $this->validateArray($field, $val); - } elseif (isset($this->items['form']['validation']) && $this->items['form']['validation'] == 'strict') { - // Undefined/extra item. - throw new \RuntimeException(sprintf('%s is not defined in blueprints', $key)); - } - } - } - - /** - * @param array $data - * @param array $rules - * @return array - * @internal - */ - protected function filterArray(array $data, array $rules) - { - $results = array(); - foreach ($data as $key => $field) { - $val = isset($rules[$key]) ? $rules[$key] : null; - $rule = is_string($val) ? $this->rules[$val] : null; - - if ($rule) { - // Item has been defined in blueprints. - if (is_array($field) && count($field) == 1 && reset($field) == '') { - continue; - } - $field = Validation::filter($field, $rule); - } elseif (is_array($field) && is_array($val)) { - // Array has been defined in blueprints. - $field = $this->filterArray($field, $val); - } elseif (isset($this->items['form']['validation']) && $this->items['form']['validation'] == 'strict') { - $field = null; - } - - if (isset($field) && (!is_array($field) || !empty($field))) { - $results[$key] = $field; - } - } - - return $results; - } - - /** - * @param array $data1 - * @param array $data2 - * @param array $rules - * @return array - * @internal - */ - protected function mergeArrays(array $data1, array $data2, array $rules) - { - foreach ($data2 as $key => $field) { - $val = isset($rules[$key]) ? $rules[$key] : null; - $rule = is_string($val) ? $this->rules[$val] : null; - - if (!$rule && array_key_exists($key, $data1) && is_array($field) && is_array($val)) { - // Array has been defined in blueprints. - $data1[$key] = $this->mergeArrays($data1[$key], $field, $val); - } else { - // Otherwise just take value from the data2. - $data1[$key] = $field; - } - } - - return $data1; - } - - /** - * @param array $data - * @param array $rules - * @param string $prefix - * @return array - * @internal - */ - protected function extraArray(array $data, array $rules, $prefix) - { - $array = array(); - foreach ($data as $key => $field) { - $val = isset($rules[$key]) ? $rules[$key] : null; - $rule = is_string($val) ? $this->rules[$val] : null; - - if ($rule) { - // Item has been defined in blueprints. - } elseif (is_array($field) && is_array($val)) { - // Array has been defined in blueprints. - $array += $this->ExtraArray($field, $val, $prefix . $key . '.'); - } else { - // Undefined/extra item. - $array[$prefix.$key] = $field; - } - } - return $array; - } - - /** - * Gets all field definitions from the blueprints. - * - * @param array $fields - * @param array $params - * @param string $prefix - * @param array $current - * @internal - */ - protected function parseFormFields(array &$fields, $params, $prefix, array &$current) - { - // Go though all the fields in current level. - foreach ($fields as $key => &$field) { - $current[$key] = &$field; - // Set name from the array key. - $field['name'] = $prefix . $key; - $field += $params; - - if (isset($field['fields']) && (!isset($field['type']) || $field['type'] !== 'list')) { - // Recursively get all the nested fields. - $newParams = array_intersect_key($this->filter, $field); - $this->parseFormFields($field['fields'], $newParams, $prefix, $current[$key]['fields']); - } else if ($field['type'] !== 'ignore') { - // Add rule. - $this->rules[$prefix . $key] = &$field; - $this->addProperty($prefix . $key); - - foreach ($field as $name => $value) { - // Support nested blueprints. - if ($this->context && $name == '@import') { - $values = (array) $value; - if (!isset($field['fields'])) { - $field['fields'] = array(); - } - foreach ($values as $bname) { - $b = $this->context->get($bname); - $field['fields'] = array_merge($field['fields'], $b->fields()); - } - } - - // Support for callable data values. - elseif (substr($name, 0, 6) == '@data-') { - $property = substr($name, 6); - if (is_array($value)) { - $func = array_shift($value); - } else { - $func = $value; - $value = array(); - } - list($o, $f) = preg_split('/::/', $func); - if (!$f && function_exists($o)) { - $data = call_user_func_array($o, $value); - } elseif ($f && method_exists($o, $f)) { - $data = call_user_func_array(array($o, $f), $value); - } - - // If function returns a value, - if (isset($data)) { - if (isset($field[$property]) && is_array($field[$property]) && is_array($data)) { - // Combine field and @data-field together. - $field[$property] += $data; - } else { - // Or create/replace field with @data-field. - $field[$property] = $data; - } - } - } - - elseif (substr($name, 0, 8) == '@config-') { - $property = substr($name, 8); - $default = isset($field[$property]) ? $field[$property] : null; - $config = self::getGrav()['config']->get($value, $default); - - if (!is_null($config)) { - $field[$property] = $config; - } - } - } - - // Initialize predefined validation rule. - if (isset($field['validate']['rule']) && $field['type'] !== 'ignore') { - $field['validate'] += $this->getRule($field['validate']['rule']); - } - } - } - } - - /** - * Add property to the definition. - * - * @param string $path Comma separated path to the property. - * @internal - */ - protected function addProperty($path) - { - $parts = explode('.', $path); - $item = array_pop($parts); - - $nested = &$this->nested; - foreach ($parts as $part) { - if (!isset($nested[$part])) { - $nested[$part] = array(); - } - $nested = &$nested[$part]; - } - - if (!isset($nested[$item])) { - $nested[$item] = $path; - } - } - - /** - * @param $rule - * @return array - * @internal - */ - protected function getRule($rule) - { - if (isset($this->items['rules'][$rule]) && is_array($this->items['rules'][$rule])) { - return $this->items['rules'][$rule]; - } - return array(); - } - - /** - * @param array $data - * @param array $fields - * @throws \RuntimeException - * @internal - */ - protected function checkRequired(array $data, array $fields) - { - foreach ($fields as $name => $field) { - if (!is_string($field)) { - continue; - } - $field = $this->rules[$field]; - if (isset($field['validate']['required']) - && $field['validate']['required'] === true - && empty($data[$name])) { - throw new \RuntimeException("Missing required field: {$field['name']}"); - } - } - } -} diff --git a/src/system/src/Grav/Common/Data/Blueprints.php b/src/system/src/Grav/Common/Data/Blueprints.php deleted file mode 100644 index 4c144a3..0000000 --- a/src/system/src/Grav/Common/Data/Blueprints.php +++ /dev/null @@ -1,145 +0,0 @@ -search = $search; - } - - /** - * Get blueprint. - * - * @param string $type Blueprint type. - * @return Blueprint - * @throws \RuntimeException - */ - public function get($type) - { - if (!isset($this->instances[$type])) { - $parents = []; - if (is_string($this->search)) { - $filename = $this->search . $type . YAML_EXT; - - // Check if search is a stream and resolve the path. - if (strpos($filename, '://')) { - $grav = static::getGrav(); - /** @var UniformResourceLocator $locator */ - $locator = $grav['locator']; - $parents = $locator->findResources($filename); - $filename = array_shift($parents); - } - } else { - $filename = isset($this->search[$type]) ? $this->search[$type] : ''; - } - - if ($filename && is_file($filename)) { - $file = CompiledYamlFile::instance($filename); - $blueprints = $file->content(); - } else { - $blueprints = []; - } - - $blueprint = new Blueprint($type, $blueprints, $this); - - if (isset($blueprints['@extends'])) { - // Extend blueprint by other blueprints. - $extends = (array) $blueprints['@extends']; - - if (is_string(key($extends))) { - $extends = [ $extends ]; - } - - foreach ($extends as $extendConfig) { - $extendType = !is_string($extendConfig) ? empty($extendConfig['type']) ? false : $extendConfig['type'] : $extendConfig; - - if (!$extendType) { - continue; - } elseif ($extendType === '@parent') { - $parentFile = array_shift($parents); - if (!$parentFile || !is_file($parentFile)) { - continue; - } - $blueprints = CompiledYamlFile::instance($parentFile)->content(); - $parent = new Blueprint($type.'-parent', $blueprints, $this); - $blueprint->extend($parent); - continue; - } - - if (is_string($extendConfig) || empty($extendConfig['context'])) { - $context = $this; - } else { - // Load blueprints from external context. - $array = explode('://', $extendConfig['context'], 2); - $scheme = array_shift($array); - $path = array_shift($array); - if ($path) { - $scheme .= '://'; - $extendType = $path ? "{$path}/{$extendType}" : $extendType; - } - $context = new self($scheme); - } - $blueprint->extend($context->get($extendType)); - } - } - - $this->instances[$type] = $blueprint; - } - - return $this->instances[$type]; - } - - /** - * Get all available blueprint types. - * - * @return array List of type=>name - */ - public function types() - { - if ($this->types === null) { - $this->types = array(); - - // Check if search is a stream. - if (strpos($this->search, '://')) { - // Stream: use UniformResourceIterator. - $grav = static::getGrav(); - /** @var UniformResourceLocator $locator */ - $locator = $grav['locator']; - $iterator = $locator->getIterator($this->search, null); - } else { - // Not a stream: use DirectoryIterator. - $iterator = new \DirectoryIterator($this->search); - } - - /** @var \DirectoryIterator $file */ - foreach ($iterator as $file) { - if (!$file->isFile() || '.' . $file->getExtension() != YAML_EXT) { - continue; - } - $name = $file->getBasename(YAML_EXT); - $this->types[$name] = ucfirst(strtr($name, '_', ' ')); - } - } - return $this->types; - } -} diff --git a/src/system/src/Grav/Common/Data/Data.php b/src/system/src/Grav/Common/Data/Data.php deleted file mode 100644 index 6a35fbc..0000000 --- a/src/system/src/Grav/Common/Data/Data.php +++ /dev/null @@ -1,240 +0,0 @@ -items = $items; - - $this->blueprints = $blueprints; - } - - /** - * Get value by using dot notation for nested arrays/objects. - * - * @example $value = $data->value('this.is.my.nested.variable'); - * - * @param string $name Dot separated path to the requested value. - * @param mixed $default Default value (or null). - * @param string $separator Separator, defaults to '.' - * @return mixed Value. - */ - public function value($name, $default = null, $separator = '.') - { - return $this->get($name, $default, $separator); - } - - /** - * Set default value by using dot notation for nested arrays/objects. - * - * @example $data->def('this.is.my.nested.variable', 'default'); - * - * @param string $name Dot separated path to the requested value. - * @param mixed $default Default value (or null). - * @param string $separator Separator, defaults to '.' - */ - public function def($name, $default = null, $separator = '.') - { - $this->set($name, $this->get($name, $default, $separator), $separator); - } - - /** - * Join two values together by using blueprints if available. - * - * @param string $name Dot separated path to the requested value. - * @param mixed $value Value to be joined. - * @param string $separator Separator, defaults to '.' - */ - public function join($name, $value, $separator = '.') - { - $old = $this->get($name, null, $separator); - if ($old === null) { - // Variable does not exist yet: just use the incoming value. - } elseif ($this->blueprints) { - // Blueprints: join values by using blueprints. - $value = $this->blueprints->mergeData($old, $value, $name, $separator); - } else { - // No blueprints: replace existing top level variables with the new ones. - $value = array_merge($old, $value); - } - - $this->set($name, $value, $separator); - } - - /** - * Join two values together by using blueprints if available. - * - * @param string $name Dot separated path to the requested value. - * @param mixed $value Value to be joined. - * @param string $separator Separator, defaults to '.' - */ - public function joinDefaults($name, $value, $separator = '.') - { - $old = $this->get($name, null, $separator); - if ($old === null) { - // Variable does not exist yet: just use the incoming value. - } elseif ($this->blueprints) { - // Blueprints: join values by using blueprints. - $value = $this->blueprints->mergeData($value, $old, $name, $separator); - } else { - // No blueprints: replace existing top level variables with the new ones. - $value = array_merge($value, $old); - } - - $this->set($name, $value, $separator); - } - - - /** - * Merge two sets of data together. - * - * @param array $data - * @return void - */ - public function merge(array $data) - { - if ($this->blueprints) { - $this->items = $this->blueprints->mergeData($this->items, $data); - } else { - $this->items = array_merge($this->items, $data); - } - } - - /** - * Add default data to the set. - * - * @param array $data - * @return void - */ - public function setDefaults(array $data) - { - if ($this->blueprints) { - $this->items = $this->blueprints->mergeData($data, $this->items); - } else { - $this->items = array_merge($data, $this->items); - } - } - - /** - * Return blueprints. - * - * @return Blueprint - */ - public function blueprints() - { - return $this->blueprints; - } - - /** - * Validate by blueprints. - * - * @throws \Exception - */ - public function validate() - { - if ($this->blueprints) { - $this->blueprints->validate($this->items); - } - } - - /** - * Filter all items by using blueprints. - */ - public function filter() - { - if ($this->blueprints) { - $this->items = $this->blueprints->filter($this->items); - } - } - - /** - * Get extra items which haven't been defined in blueprints. - * - * @return array - */ - public function extra() - { - return $this->blueprints ? $this->blueprints->extra($this->items) : array(); - } - - /** - * Save data if storage has been defined. - */ - public function save() - { - $file = $this->file(); - if ($file) { - $file->save($this->items); - } - } - - /** - * Returns whether the data already exists in the storage. - * - * NOTE: This method does not check if the data is current. - * - * @return bool - */ - public function exists() - { - return $this->file()->exists(); - } - - /** - * Return unmodified data as raw string. - * - * NOTE: This function only returns data which has been saved to the storage. - * - * @return string - */ - public function raw() - { - return $this->file()->raw(); - } - - /** - * Set or get the data storage. - * - * @param FileInterface $storage Optionally enter a new storage. - * @return FileInterface - */ - public function file(FileInterface $storage = null) - { - if ($storage) { - $this->storage = $storage; - } - return $this->storage; - } -} diff --git a/src/system/src/Grav/Common/Data/DataInterface.php b/src/system/src/Grav/Common/Data/DataInterface.php deleted file mode 100644 index 85d2fb6..0000000 --- a/src/system/src/Grav/Common/Data/DataInterface.php +++ /dev/null @@ -1,68 +0,0 @@ -value('this.is.my.nested.variable'); - * - * @param string $name Dot separated path to the requested value. - * @param mixed $default Default value (or null). - * @param string $separator Separator, defaults to '.' - * @return mixed Value. - */ - public function value($name, $default = null, $separator = '.'); - - /** - * Merge external data. - * - * @param array $data - * @return mixed - */ - public function merge(array $data); - - /** - * Return blueprints. - */ - public function blueprints(); - - /** - * Validate by blueprints. - * - * @throws \Exception - */ - public function validate(); - - /** - * Filter all items by using blueprints. - */ - public function filter(); - - /** - * Get extra items which haven't been defined in blueprints. - */ - public function extra(); - - /** - * Save data into the file. - */ - public function save(); - - /** - * Set or get the data storage. - * - * @param FileInterface $storage Optionally enter a new storage. - * @return FileInterface - */ - public function file(FileInterface $storage = null); -} diff --git a/src/system/src/Grav/Common/Data/DataMutatorTrait.php b/src/system/src/Grav/Common/Data/DataMutatorTrait.php deleted file mode 100644 index 707b507..0000000 --- a/src/system/src/Grav/Common/Data/DataMutatorTrait.php +++ /dev/null @@ -1,68 +0,0 @@ -get('this.is.my.nested.variable'); - * - * @param string $name Dot separated path to the requested value. - * @param mixed $default Default value (or null). - * @param string $separator Separator, defaults to '.' - * @return mixed Value. - */ - public function get($name, $default = null, $separator = '.') - { - $path = explode($separator, $name); - $current = $this->items; - foreach ($path as $field) { - if (is_object($current) && isset($current->{$field})) { - $current = $current->{$field}; - } elseif (is_array($current) && isset($current[$field])) { - $current = $current[$field]; - } else { - return $default; - } - } - - return $current; - } - - /** - * Set value by using dot notation for nested arrays/objects. - * - * @example $value = $data->set('this.is.my.nested.variable', true); - * - * @param string $name Dot separated path to the requested value. - * @param mixed $value New value. - * @param string $separator Separator, defaults to '.' - */ - public function set($name, $value, $separator = '.') - { - $path = explode($separator, $name); - $current = &$this->items; - foreach ($path as $field) { - if (is_object($current)) { - // Handle objects. - if (!isset($current->{$field})) { - $current->{$field} = array(); - } - $current = &$current->{$field}; - } else { - // Handle arrays and scalars. - if (!is_array($current)) { - $current = array($field => array()); - } elseif (!isset($current[$field])) { - $current[$field] = array(); - } - $current = &$current[$field]; - } - } - - $current = $value; - } - -} diff --git a/src/system/src/Grav/Common/Data/Validation.php b/src/system/src/Grav/Common/Data/Validation.php deleted file mode 100644 index 3382a72..0000000 --- a/src/system/src/Grav/Common/Data/Validation.php +++ /dev/null @@ -1,672 +0,0 @@ -translate($name) . '""'; - - if (method_exists(__CLASS__, $method)) { - $success = self::$method($value, $validate, $field); - } else { - $success = self::typeText($value, $validate, $field); - } - if (!$success) { - throw new \RuntimeException($message); - } - - // Check individual rules - foreach ($validate as $rule => $params) { - $method = 'validate'.strtr($rule, '-', '_'); - if (method_exists(__CLASS__, $method)) { - $success = self::$method($value, $params); - - if (!$success) { - throw new \RuntimeException($message); - } - } - } - } - - /** - * Filter value against a blueprint field definition. - * - * @param mixed $value - * @param array $field - * @return mixed Filtered value. - */ - public static function filter($value, array $field) - { - $validate = isset($field['validate']) ? (array) $field['validate'] : array(); - - // If value isn't required, we will return null if empty value is given. - if (empty($validate['required']) && ($value === null || $value === '')) { - return null; - } - - // if this is a YAML field, simply parse it and return the value - if (isset($field['yaml']) && $field['yaml'] === true) { - try { - $yaml = new Parser(); - return $yaml->parse($value); - } catch (ParseException $e) { - throw new \RuntimeException($e->getMessage()); - } - } - - // Validate type with fallback type text. - $type = (string) isset($field['validate']['type']) ? $field['validate']['type'] : $field['type']; - $method = 'filter'.strtr($type, '-', '_'); - if (method_exists(__CLASS__, $method)) { - $value = self::$method($value, $validate, $field); - } else { - $value = self::filterText($value, $validate, $field); - } - - return $value; - } - - /** - * HTML5 input: text - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeText($value, array $params, array $field) - { - if (!is_string($value)) { - return false; - } - - if (isset($params['min']) && strlen($value) < $params['min']) { - return false; - } - - if (isset($params['max']) && strlen($value) > $params['max']) { - return false; - } - - $min = isset($params['min']) ? $params['min'] : 0; - if (isset($params['step']) && (strlen($value) - $min) % $params['step'] == 0) { - return false; - } - - if ((!isset($params['multiline']) || !$params['multiline']) && preg_match('/\R/um', $value)) { - return false; - } - - return true; - } - - protected static function filterText($value, array $params, array $field) - { - return (string) $value; - } - - protected static function filterCommaList($value, array $params, array $field) - { - return is_array($value) ? $value : preg_split('/\s*,\s*/', $value, -1, PREG_SPLIT_NO_EMPTY); - } - - protected static function typeCommaList($value, array $params, array $field) - { - return is_array($value) ? true : self::typeText($value, $params, $field); - } - - /** - * HTML5 input: textarea - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeTextarea($value, array $params, array $field) - { - if (!isset($params['multiline'])) { - $params['multiline'] = true; - } - - return self::typeText($value, $params, $field); - } - - /** - * HTML5 input: password - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typePassword($value, array $params, array $field) - { - return self::typeText($value, $params, $field); - } - - /** - * HTML5 input: hidden - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeHidden($value, array $params, array $field) - { - return self::typeText($value, $params, $field); - } - - /** - * Custom input: checkbox list - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeCheckboxes($value, array $params, array $field) - { - return self::typeArray((array) $value, $params, $field); - } - - protected static function filterCheckboxes($value, array $params, array $field) - { - return self::filterArray($value, $params, $field); - } - - /** - * HTML5 input: checkbox - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeCheckbox($value, array $params, array $field) - { - $value = (string) $value; - - if (!isset($field['value'])) { - $field['value'] = 1; - } - if ($value && $value != $field['value']) { - return false; - } - - return true; - } - - /** - * HTML5 input: radio - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeRadio($value, array $params, array $field) - { - return self::typeArray((array) $value, $params, $field); - } - - /** - * Custom input: toggle - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeToggle($value, array $params, array $field) - { - return self::typeArray((array) $value, $params, $field); - } - - /** - * HTML5 input: select - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeSelect($value, array $params, array $field) - { - return self::typeArray((array) $value, $params, $field); - } - - /** - * HTML5 input: number - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - - public static function typeNumber($value, array $params, array $field) - { - if (!is_numeric($value)) { - return false; - } - - if (isset($params['min']) && $value < $params['min']) { - return false; - } - - if (isset($params['max']) && $value > $params['max']) { - return false; - } - - $min = isset($params['min']) ? $params['min'] : 0; - if (isset($params['step']) && fmod($value - $min, $params['step']) == 0) { - return false; - } - - return true; - } - - protected static function filterNumber($value, array $params, array $field) - { - return (int) $value; - } - - protected static function filterDateTime($value, array $params, array $field) - { - $format = self::getGrav()['config']->get('system.pages.dateformat.default'); - if ($format) { - $converted = new \DateTime($value); - return $converted->format($format); - } - return $value; - } - - - /** - * HTML5 input: range - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeRange($value, array $params, array $field) - { - return self::typeNumber($value, $params, $field); - } - - protected static function filterRange($value, array $params, array $field) - { - return self::filterNumber($value, $params, $field); - } - - /** - * HTML5 input: color - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeColor($value, array $params, array $field) - { - return preg_match('/^\#[0-9a-fA-F]{3}[0-9a-fA-F]{3}?$/u', $value); - } - - /** - * HTML5 input: email - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeEmail($value, array $params, array $field) - { - return self::typeText($value, $params, $field) && filter_var($value, FILTER_VALIDATE_EMAIL); - } - - /** - * HTML5 input: url - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - - public static function typeUrl($value, array $params, array $field) - { - return self::typeText($value, $params, $field) && filter_var($value, FILTER_VALIDATE_URL); - } - - /** - * HTML5 input: datetime - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeDatetime($value, array $params, array $field) - { - if ($value instanceof \DateTime) { - return true; - } elseif (!is_string($value)) { - return false; - } elseif (!isset($params['format'])) { - return false !== strtotime($value); - } - - $dateFromFormat = \DateTime::createFromFormat($params['format'], $value); - - return $dateFromFormat && $value === date($params['format'], $dateFromFormat->getTimestamp()); - } - - /** - * HTML5 input: datetime-local - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeDatetimeLocal($value, array $params, array $field) - { - return self::typeDatetime($value, $params, $field); - } - - /** - * HTML5 input: date - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeDate($value, array $params, array $field) - { - $params = array($params); - if (!isset($params['format'])) { - $params['format'] = 'Y-m-d'; - } - return self::typeDatetime($value, $params, $field); - } - - /** - * HTML5 input: time - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeTime($value, array $params, array $field) - { - $params = array($params); - if (!isset($params['format'])) { - $params['format'] = 'H:i'; - } - return self::typeDatetime($value, $params, $field); - } - - /** - * HTML5 input: month - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeMonth($value, array $params, array $field) - { - $params = array($params); - if (!isset($params['format'])) { - $params['format'] = 'Y-m'; - } - return self::typeDatetime($value, $params, $field); - } - - /** - * HTML5 input: week - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeWeek($value, array $params, array $field) - { - if (!isset($params['format']) && !preg_match('/^\d{4}-W\d{2}$/u', $value)) { - return false; - } - return self::typeDatetime($value, $params, $field); - } - - /** - * Custom input: array - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeArray($value, array $params, array $field) - { - if (!is_array($value)) { - return false; - } - - if (isset($field['multiple'])) { - if (isset($params['min']) && count($value) < $params['min']) { - return false; - } - - if (isset($params['max']) && count($value) > $params['max']) { - return false; - } - - $min = isset($params['min']) ? $params['min'] : 0; - if (isset($params['step']) && (count($value) - $min) % $params['step'] == 0) { - return false; - } - } - - $options = isset($field['options']) ? array_keys($field['options']) : array(); - $values = isset($field['use']) && $field['use'] == 'keys' ? array_keys($value) : $value; - if ($options && array_diff($values, $options)) { - return false; - } - - return true; - } - - protected static function filterArray($value, $params, $field) - { - $values = (array) $value; - $options = isset($field['options']) ? array_keys($field['options']) : array(); - $multi = isset($field['multiple']) ? $field['multiple'] : false; - - if ($options) { - $useKey = isset($field['use']) && $field['use'] == 'keys'; - foreach ($values as $key => $value) { - $values[$key] = $useKey ? (bool) $value : $value; - } - } - - if ($multi) { - foreach ($values as $key => $value) { - if (is_array($value)) { - $value = implode(',', $value); - } - - $values[$key] = array_map('trim', explode(',', $value)); - } - } - - return $values; - } - - public static function typeList($value, array $params, array $field) - { - if (!is_array($value)) { - return false; - } - - if (isset($field['fields'])) { - foreach ($value as $key => $item) { - foreach ($field['fields'] as $subKey => $subField) { - $subKey = trim($subKey, '.'); - $subValue = isset($item[$subKey]) ? $item[$subKey] : null; - self::validate($subValue, $subField); - } - } - } - - return true; - } - - protected static function filterList($value, array $params, array $field) - { - return (array) $value; - } - - /** - * Custom input: ignore (will not validate) - * - * @param mixed $value Value to be validated. - * @param array $params Validation parameters. - * @param array $field Blueprint for the field. - * @return bool True if validation succeeded. - */ - public static function typeIgnore($value, array $params, array $field) - { - return true; - } - - public static function filterIgnore($value, array $params, array $field) - { - return $value; - } - - // HTML5 attributes (min, max and range are handled inside the types) - - public static function validateRequired($value, $params) - { - if (is_string($value)) { - $value = trim($value); - } - - return (bool) $params !== true || !empty($value); - } - - public static function validatePattern($value, $params) - { - return (bool) preg_match("`^{$params}$`u", $value); - } - - - // Internal types - - public static function validateAlpha($value, $params) - { - return ctype_alpha($value); - } - - public static function validateAlnum($value, $params) - { - return ctype_alnum($value); - } - - public static function typeBool($value, $params) - { - return is_bool($value) || $value == 1 || $value == 0; - } - - public static function validateBool($value, $params) - { - return is_bool($value) || $value == 1 || $value == 0; - } - - protected static function filterBool($value, $params) - { - return (bool) $value; - } - - public static function validateDigit($value, $params) - { - return ctype_digit($value); - } - - public static function validateFloat($value, $params) - { - return is_float(filter_var($value, FILTER_VALIDATE_FLOAT)); - } - - protected static function filterFloat($value, $params) - { - return (float) $value; - } - - public static function validateHex($value, $params) - { - return ctype_xdigit($value); - } - - public static function validateInt($value, $params) - { - return is_numeric($value) && (int) $value == $value; - } - - protected static function filterInt($value, $params) - { - return (int) $value; - } - - public static function validateArray($value, $params) - { - return is_array($value) || ($value instanceof \ArrayAccess - && $value instanceof \Traversable - && $value instanceof \Countable); - } - - public static function validateJson($value, $params) - { - return (bool) (json_decode($value)); - } -} diff --git a/src/system/src/Grav/Common/Debugger.php b/src/system/src/Grav/Common/Debugger.php deleted file mode 100644 index a996a7d..0000000 --- a/src/system/src/Grav/Common/Debugger.php +++ /dev/null @@ -1,121 +0,0 @@ -debugbar = new StandardDebugBar(); - $this->debugbar['time']->addMeasure('Loading', $this->debugbar['time']->getRequestStartTime(), microtime(true)); - } - - public function init() - { - $this->grav = Grav::instance(); - - if ($this->enabled()) { - $this->debugbar->addCollector(new \DebugBar\DataCollector\ConfigCollector((array)$this->grav['config']->get('system'))); - } - return $this; - } - - public function enabled($state = null) - { - if (isset($state)) { - $this->enabled = $state; - } else { - if (!isset($this->enabled)) { - $this->enabled = $this->grav['config']->get('system.debugger.enabled'); - } - } - return $this->enabled; - } - - public function addAssets() - { - if ($this->enabled()) { - $assets = $this->grav['assets']; - - // Add jquery library - $assets->add('jquery', 101); - - $this->renderer = $this->debugbar->getJavascriptRenderer(); - $this->renderer->setIncludeVendors(false); - - // Get the required CSS files - list($css_files, $js_files) = $this->renderer->getAssets(null, JavascriptRenderer::RELATIVE_URL); - foreach ($css_files as $css) { - $assets->addCss($css); - } - - $assets->addCss('/system/assets/debugger.css'); - - foreach ($js_files as $js) { - $assets->addJs($js); - } - } - return $this; - } - - public function addCollector($collector) - { - $this->debugbar->addCollector($collector); - return $this; - } - - public function getCollector($collector) - { - return $this->debugbar->getCollector($collector); - } - - public function render() - { - if ($this->enabled()) { - echo $this->renderer->render(); - } - return $this; - } - - public function sendDataInHeaders() - { - $this->debugbar->sendDataInHeaders(); - return $this; - } - - public function startTimer($name, $description = null) - { - if ($name[0] == '_' || $this->grav['config']->get('system.debugger.enabled')) { - $this->debugbar['time']->startMeasure($name, $description); - } - return $this; - } - - public function stopTimer($name) - { - if ($name[0] == '_' || $this->grav['config']->get('system.debugger.enabled')) { - $this->debugbar['time']->stopMeasure($name); - } - return $this; - } - - - public function addMessage($message, $label = 'info', $isString = true) - { - if ($this->enabled()) { - $this->debugbar['messages']->addMessage($message, $label, $isString); - } - return $this; - } -} diff --git a/src/system/src/Grav/Common/Errors/Errors.php b/src/system/src/Grav/Common/Errors/Errors.php deleted file mode 100644 index e135e6f..0000000 --- a/src/system/src/Grav/Common/Errors/Errors.php +++ /dev/null @@ -1,52 +0,0 @@ -handlerStack[$key] = $handler; - } else { - $this->handlerStack[] = $handler; - } - - return $this; - } - - public function resetHandlers() - { - $grav = Grav::instance(); - $config = $grav['config']->get('system.errors'); - if (isset($config['display']) && !$config['display']) { - unset($this->handlerStack['pretty']); - $this->handlerStack = array('simple' => new SimplePageHandler()) + $this->handlerStack; - } - if (isset($config['log']) && !$config['log']) { - unset($this->handlerStack['log']); - } - } - -} diff --git a/src/system/src/Grav/Common/Errors/Resources/error.css b/src/system/src/Grav/Common/Errors/Resources/error.css deleted file mode 100644 index 11ce3fd..0000000 --- a/src/system/src/Grav/Common/Errors/Resources/error.css +++ /dev/null @@ -1,52 +0,0 @@ -html, body { - height: 100% -} -body { - margin:0 3rem; - padding:0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 1.5rem; - line-height: 1.4; - display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */ - display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */ - display: -ms-flexbox; /* TWEENER - IE 10 */ - display: -webkit-flex; /* NEW - Chrome */ - display: flex; - -webkit-align-items: center; - align-items: center; - -webkit-justify-content: center; - justify-content: center; -} -.container { - margin: 0rem; - max-width: 600px; - padding-bottom:5rem; -} - -header { - color: #000; - font-size: 4rem; - letter-spacing: 2px; - line-height: 1.1; - margin-bottom: 2rem; -} -p { - font-family: Optima, Segoe, "Segoe UI", Candara, Calibri, Arial, sans-serif; - color: #666; -} - -h5 { - font-weight: normal; - color: #999; - font-size: 1rem; -} - -h6 { - font-weight: normal; - color: #999; -} - -code { - font-weight: bold; - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; -} diff --git a/src/system/src/Grav/Common/Errors/Resources/layout.html.php b/src/system/src/Grav/Common/Errors/Resources/layout.html.php deleted file mode 100644 index 6699959..0000000 --- a/src/system/src/Grav/Common/Errors/Resources/layout.html.php +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - Whoops there was an error! - - - -
-
-
- Server Error -
- - - -

Sorry, something went terribly wrong!

- -

-

- -
For further details please review your logs/ folder, or enable displaying of errors in your system configuration.
-
-
- - diff --git a/src/system/src/Grav/Common/Errors/SimplePageHandler.php b/src/system/src/Grav/Common/Errors/SimplePageHandler.php deleted file mode 100644 index 16d0a88..0000000 --- a/src/system/src/Grav/Common/Errors/SimplePageHandler.php +++ /dev/null @@ -1,96 +0,0 @@ -searchPaths[] = __DIR__ . "/Resources"; - } - - /** - * @return int|null - */ - public function handle() - { - $inspector = $this->getInspector(); - - $helper = new TemplateHelper(); - $templateFile = $this->getResource("layout.html.php"); - $cssFile = $this->getResource("error.css"); - - $code = $inspector->getException()->getCode(); - $message = $inspector->getException()->getMessage(); - - if ($inspector->getException() instanceof \ErrorException) { - $code = Misc::translateErrorCode($code); - } - - $vars = array( - "stylesheet" => file_get_contents($cssFile), - "code" => $code, - "message" => $message, - ); - - $helper->setVariables($vars); - $helper->render($templateFile); - - return Handler::QUIT; - } - - /** - * @param $resource - * - * @return string - */ - protected function getResource($resource) - { - // If the resource was found before, we can speed things up - // by caching its absolute, resolved path: - if (isset($this->resourceCache[$resource])) { - return $this->resourceCache[$resource]; - } - - // Search through available search paths, until we find the - // resource we're after: - foreach ($this->searchPaths as $path) { - $fullPath = $path . "/$resource"; - - if (is_file($fullPath)) { - // Cache the result: - $this->resourceCache[$resource] = $fullPath; - return $fullPath; - } - } - - // If we got this far, nothing was found. - throw new \RuntimeException( - "Could not find resource '$resource' in any resource paths." - . "(searched: " . join(", ", $this->searchPaths). ")" - ); - } - - public function addResourcePath($path) - { - if (!is_dir($path)) { - throw new \InvalidArgumentException( - "'$path' is not a valid directory" - ); - } - - array_unshift($this->searchPaths, $path); - } - - public function getResourcePaths() - { - return $this->searchPaths; - } -} diff --git a/src/system/src/Grav/Common/File/CompiledFile.php b/src/system/src/Grav/Common/File/CompiledFile.php deleted file mode 100644 index 7120c9c..0000000 --- a/src/system/src/Grav/Common/File/CompiledFile.php +++ /dev/null @@ -1,73 +0,0 @@ -settings(['native' => true, 'compat' => true]); - - // If nothing has been loaded, attempt to get pre-compiled version of the file first. - if ($var === null && $this->raw === null && $this->content === null) { - $key = md5($this->filename); - $file = PhpFile::instance(CACHE_DIR . "compiled/files/{$key}{$this->extension}.php"); - $modified = $this->modified(); - - if (!$modified) { - return $this->decode($this->raw()); - } - - $class = get_class($this); - - $cache = $file->exists() ? $file->content() : null; - - // Load real file if cache isn't up to date (or is invalid). - if ( - !isset($cache['@class']) - || $cache['@class'] != $class - || $cache['modified'] != $modified - || $cache['filename'] != $this->filename - ) { - // Attempt to lock the file for writing. - $file->lock(false); - - // Decode RAW file into compiled array. - $data = (array) $this->decode($this->raw()); - $cache = [ - '@class' => $class, - 'filename' => $this->filename, - 'modified' => $modified, - 'data' => $data - ]; - - // If compiled file wasn't already locked by another process, save it. - if ($file->locked() !== false) { - $file->save($cache); - $file->unlock(); - } - } - - $this->content = $cache['data']; - } - - return parent::content($var); - } -} diff --git a/src/system/src/Grav/Common/File/CompiledMarkdownFile.php b/src/system/src/Grav/Common/File/CompiledMarkdownFile.php deleted file mode 100644 index 669a4eb..0000000 --- a/src/system/src/Grav/Common/File/CompiledMarkdownFile.php +++ /dev/null @@ -1,9 +0,0 @@ -getMTime(); - if ($dir_modified > $last_modified) { - $last_modified = $dir_modified; - } - } - - return $last_modified; - } - - /** - * Recursively find the last modified time under given path by file. - * - * @param string $path - * @param string $extensions which files to search for specifically - * - * @return int - */ - public static function lastModifiedFile($path, $extensions = 'md|yaml') - { - $last_modified = 0; - - $dirItr = new \RecursiveDirectoryIterator($path, \RecursiveDirectoryIterator::SKIP_DOTS); - $itrItr = new \RecursiveIteratorIterator($dirItr, \RecursiveIteratorIterator::SELF_FIRST); - $itr = new \RegexIterator($itrItr, '/^.+\.'.$extensions.'$/i'); - - /** @var \RecursiveDirectoryIterator $file */ - foreach ($itr as $filepath => $file) { - $file_modified = $file->getMTime(); - if ($file_modified > $last_modified) { - $last_modified = $file_modified; - } - } - - return $last_modified; - } - - /** - * Get relative path between target and base path. If path isn't relative, return full path. - * - * @param string $path - * @param string $base - * @return string - */ - public static function getRelativePath($path, $base = GRAV_ROOT) - { - if ($base) { - $base = preg_replace('![\\\/]+!', '/', $base); - $path = preg_replace('![\\\/]+!', '/', $path); - if (strpos($path, $base) === 0) { - $path = ltrim(substr($path, strlen($base)), '/'); - } - } - - return $path; - } - - /** - * Shift first directory out of the path. - * - * @param string $path - * @return string - */ - public static function shift(&$path) - { - $parts = explode('/', trim($path, '/'), 2); - $result = array_shift($parts); - $path = array_shift($parts); - - return $result ?: null; - } - - - - /** - * Return recursive list of all files and directories under given path. - * - * @param string $path - * @param array $params - * @return array - * @throws \RuntimeException - */ - public static function all($path, array $params = array()) - { - if ($path === false) { - throw new \RuntimeException("Path to {$path} doesn't exist."); - } - - $compare = isset($params['compare']) ? 'get' . $params['compare'] : null; - $pattern = isset($params['pattern']) ? $params['pattern'] : null; - $filters = isset($params['filters']) ? $params['filters'] : null; - $recursive = isset($params['recursive']) ? $params['recursive'] : true; - $key = isset($params['key']) ? 'get' . $params['key'] : null; - $value = isset($params['value']) ? 'get' . $params['value'] : ($recursive ? 'getSubPathname' : 'getFilename'); - - if ($recursive) { - $directory = new \RecursiveDirectoryIterator($path, - \RecursiveDirectoryIterator::SKIP_DOTS + \FilesystemIterator::UNIX_PATHS + \FilesystemIterator::CURRENT_AS_SELF); - $iterator = new \RecursiveIteratorIterator($directory, \RecursiveIteratorIterator::SELF_FIRST); - } else { - $iterator = new \FilesystemIterator($path); - } - - $results = array(); - - /** @var \RecursiveDirectoryIterator $file */ - foreach ($iterator as $file) { - if ($compare && $pattern && !preg_match($pattern, $file->{$compare}())) { - continue; - } - $fileKey = $key ? $file->{$key}() : null; - $filePath = $file->{$value}(); - if ($filters) { - if (isset($filters['key'])) { - $fileKey = preg_replace($filters['key'], '', $fileKey); - } - if (isset($filters['value'])) { - $filter = $filters['value']; - if (is_callable($filter)) { - $filePath = call_user_func($filter, $file); - } else { - $filePath = preg_replace($filter, '', $filePath); - } - } - } - - if ($fileKey !== null) { - $results[$fileKey] = $filePath; - } else { - $results[] = $filePath; - } - } - - return $results; - } - - /** - * Recursively copy directory in filesystem. - * - * @param string $source - * @param string $target - * @throws \RuntimeException - */ - public static function copy($source, $target) - { - $source = rtrim($source, '\\/'); - $target = rtrim($target, '\\/'); - - if (!is_dir($source)) { - throw new \RuntimeException('Cannot copy non-existing folder.'); - } - - // Make sure that path to the target exists before copying. - self::mkdir($target); - - $success = true; - - // Go through all sub-directories and copy everything. - $files = self::all($source); - foreach ($files as $file) { - $src = $source .'/'. $file; - $dst = $target .'/'. $file; - - if (is_dir($src)) { - // Create current directory. - $success &= @mkdir($dst); - } else { - // Or copy current file. - $success &= @copy($src, $dst); - } - } - - if (!$success) { - $error = error_get_last(); - throw new \RuntimeException($error['message']); - } - - // Make sure that the change will be detected when caching. - @touch(dirname($target)); - } - - /** - * Move directory in filesystem. - * - * @param string $source - * @param string $target - * @throws \RuntimeException - */ - public static function move($source, $target) - { - if (!is_dir($source)) { - throw new \RuntimeException('Cannot move non-existing folder.'); - } - - // Make sure that path to the target exists before moving. - self::mkdir(dirname($target)); - - // Just rename the directory. - $success = @rename($source, $target); - - if (!$success) { - $error = error_get_last(); - throw new \RuntimeException($error['message']); - } - - // Make sure that the change will be detected when caching. - @touch(dirname($source)); - @touch(dirname($target)); - } - - /** - * Recursively delete directory from filesystem. - * - * @param string $target - * @throws \RuntimeException - * @return bool - */ - public static function delete($target) - { - if (!is_dir($target)) { - return; - } - - $success = self::doDelete($target); - - if (!$success) { - $error = error_get_last(); - throw new \RuntimeException($error['message']); - } - - // Make sure that the change will be detected when caching. - @touch(dirname($target)); - return $success; - } - - /** - * @param string $folder - * @throws \RuntimeException - * @internal - */ - public static function mkdir($folder) - { - if (is_dir($folder)) { - return; - } - - $success = @mkdir($folder, 0777, true); - - if (!$success) { - $error = error_get_last(); - throw new \RuntimeException($error['message']); - } - } - - /** - * Recursive copy of one directory to another - * - * @param $src - * @param $dest - * - * @return bool - */ - public static function rcopy($src, $dest) - { - - // If the src is not a directory do a simple file copy - if (!is_dir($src)) { - copy($src, $dest); - return true; - } - - // If the destination directory does not exist create it - if (!is_dir($dest)) { - if (!mkdir($dest)) { - // If the destination directory could not be created stop processing - return false; - } - } - - // Open the source directory to read in files - $i = new \DirectoryIterator($src); - /** @var \DirectoryIterator $f */ - foreach ($i as $f) { - if ($f->isFile()) { - copy($f->getRealPath(), "$dest/" . $f->getFilename()); - } else { - if (!$f->isDot() && $f->isDir()) { - static::rcopy($f->getRealPath(), "$dest/$f"); - } - } - } - return true; - } - - /** - * @param string $folder - * @return bool - * @internal - */ - protected static function doDelete($folder) - { - // Special case for symbolic links. - if (is_link($folder)) { - return @unlink($folder); - } - - $files = new \RecursiveIteratorIterator( - new \RecursiveDirectoryIterator($folder, \RecursiveDirectoryIterator::SKIP_DOTS), - \RecursiveIteratorIterator::CHILD_FIRST - ); - - /** @var \DirectoryIterator $fileinfo */ - foreach ($files as $fileinfo) { - if ($fileinfo->isDir()) { - if (false === rmdir($fileinfo->getRealPath())) { - return false; - } - } else { - if (false === unlink($fileinfo->getRealPath())) { - return false; - } - } - } - - return rmdir($folder); - } -} diff --git a/src/system/src/Grav/Common/Filesystem/RecursiveFolderFilterIterator.php b/src/system/src/Grav/Common/Filesystem/RecursiveFolderFilterIterator.php deleted file mode 100644 index aa9fd4a..0000000 --- a/src/system/src/Grav/Common/Filesystem/RecursiveFolderFilterIterator.php +++ /dev/null @@ -1,31 +0,0 @@ -get('system.pages.ignore_folders'); - } - } - - public function accept() - { - - /** @var $current \SplFileInfo */ - $current = $this->current(); - - if ($current->isDir() && !in_array($current->getFilename(), $this::$folder_ignores)) { - return true; - } - return false; - } -} diff --git a/src/system/src/Grav/Common/GPM/AbstractCollection.php b/src/system/src/Grav/Common/GPM/AbstractCollection.php deleted file mode 100644 index 7c1974d..0000000 --- a/src/system/src/Grav/Common/GPM/AbstractCollection.php +++ /dev/null @@ -1,32 +0,0 @@ -items as $name => $package) { - $items[$name] = $package->toArray(); - } - - return json_encode($items); - } - - public function toArray() - { - $items = []; - - foreach ($this->items as $name => $package) { - $items[$name] = $package->toArray(); - } - - return $items; - } -} diff --git a/src/system/src/Grav/Common/GPM/Common/AbstractPackageCollection.php b/src/system/src/Grav/Common/GPM/Common/AbstractPackageCollection.php deleted file mode 100644 index 46c9e89..0000000 --- a/src/system/src/Grav/Common/GPM/Common/AbstractPackageCollection.php +++ /dev/null @@ -1,34 +0,0 @@ -items as $name => $package) { - $items[$name] = $package->toArray(); - } - - return json_encode($items); - } - - public function toArray() - { - $items = []; - - foreach ($this->items as $name => $package) { - $items[$name] = $package->toArray(); - } - - return $items; - } -} diff --git a/src/system/src/Grav/Common/GPM/Common/CachedCollection.php b/src/system/src/Grav/Common/GPM/Common/CachedCollection.php deleted file mode 100644 index fd6ae94..0000000 --- a/src/system/src/Grav/Common/GPM/Common/CachedCollection.php +++ /dev/null @@ -1,21 +0,0 @@ - $item) { - $this->append([$name => $item]); - } - } -} diff --git a/src/system/src/Grav/Common/GPM/Common/Package.php b/src/system/src/Grav/Common/GPM/Common/Package.php deleted file mode 100644 index ff9a087..0000000 --- a/src/system/src/Grav/Common/GPM/Common/Package.php +++ /dev/null @@ -1,42 +0,0 @@ -data = $package; - - if ($type) { - $this->data->set('package_type', $type); - } - } - - public function getData() { - return $this->data; - } - - public function __get($key) { - return $this->data->get($key); - } - - public function __isset($key) { - return isset($this->data->$key); - } - - public function __toString() { - return $this->toJson(); - } - - public function toJson() { - return $this->data->toJson(); - } - - public function toArray() { - return $this->data->toArray(); - } - -} diff --git a/src/system/src/Grav/Common/GPM/GPM.php b/src/system/src/Grav/Common/GPM/GPM.php deleted file mode 100644 index fa1c808..0000000 --- a/src/system/src/Grav/Common/GPM/GPM.php +++ /dev/null @@ -1,398 +0,0 @@ - 'user/plugins/%name%', 'themes' => 'user/themes/%name%', 'skeletons' => 'user/']; - - /** - * Creates a new GPM instance with Local and Remote packages available - * @param boolean $refresh Applies to Remote Packages only and forces a refetch of data - * @param callable $callback Either a function or callback in array notation - */ - public function __construct($refresh = false, $callback = null) - { - $this->installed = new Local\Packages(); - try { - $this->repository = new Remote\Packages($refresh, $callback); - $this->grav = new Remote\Grav($refresh, $callback); - } catch (\Exception $e) { - } - } - - /** - * Returns the Locally installed packages - * @return Iterator The installed packages - */ - public function getInstalled() - { - return $this->installed; - } - - /** - * Returns the amount of locally installed packages - * @return integer Amount of installed packages - */ - public function countInstalled() - { - $installed = $this->getInstalled(); - - return count($installed['plugins']) + count($installed['themes']); - } - - /** - * Return the instance of a specific Plugin - * @param string $slug The slug of the Plugin - * @return Local\Package The instance of the Plugin - */ - public function getInstalledPlugin($slug) - { - return $this->installed['plugins'][$slug]; - } - - /** - * Returns the Locally installed plugins - * @return Iterator The installed plugins - */ - public function getInstalledPlugins() - { - return $this->installed['plugins']; - } - - /** - * Checks if a Plugin is installed - * @param string $slug The slug of the Plugin - * @return boolean True if the Plugin has been installed. False otherwise - */ - public function isPluginInstalled($slug) - { - return isset($this->installed['plugins'][$slug]); - } - - /** - * Return the instance of a specific Theme - * @param string $slug The slug of the Theme - * @return Local\Package The instance of the Theme - */ - public function getInstalledTheme($slug) - { - return $this->installed['themes'][$slug]; - } - - /** - * Returns the Locally installed themes - * @return Iterator The installed themes - */ - public function getInstalledThemes() - { - return $this->installed['themes']; - } - - /** - * Checks if a Theme is installed - * @param string $slug The slug of the Theme - * @return boolean True if the Theme has been installed. False otherwise - */ - public function isThemeInstalled($slug) - { - return isset($this->installed['themes'][$slug]); - } - - /** - * Returns the amount of updates available - * @return integer Amount of available updates - */ - public function countUpdates() - { - $count = 0; - - $count += count($this->getUpdatablePlugins()); - $count += count($this->getUpdatableThemes()); - - return $count; - } - - /** - * Returns an array of Plugins and Themes that can be updated. - * Plugins and Themes are extended with the `available` property that relies to the remote version - * @return array Array of updatable Plugins and Themes. - * Format: ['total' => int, 'plugins' => array, 'themes' => array] - */ - public function getUpdatable() - { - $plugins = $this->getUpdatablePlugins(); - $themes = $this->getUpdatableThemes(); - - $items = [ - 'total' => count($plugins)+count($themes), - 'plugins' => $plugins, - 'themes' => $themes - ]; - - return $items; - } - - /** - * Returns an array of Plugins that can be updated. - * The Plugins are extended with the `available` property that relies to the remote version - * @return Iterator Array of updatable Plugins - */ - public function getUpdatablePlugins() - { - $items = []; - $repository = $this->repository['plugins']; - - // local cache to speed things up - if (isset($this->cache[__METHOD__])) { - return $this->cache[__METHOD__]; - } - - foreach ($this->installed['plugins'] as $slug => $plugin) { - if (!isset($repository[$slug]) || $plugin->symlink) { - continue; - } - - $local_version = $plugin->version ? $plugin->version : 'Unknown'; - $remote_version = $repository[$slug]->version; - - if (version_compare($local_version, $remote_version) < 0) { - $repository[$slug]->available = $remote_version; - $repository[$slug]->version = $local_version; - $items[$slug] = $repository[$slug]; - } - } - - $this->cache[__METHOD__] = $items; - - return $items; - } - - /** - * Check if a Plugin or Theme is updatable - * @param string $slug The slug of the package - * @return boolean True if updatable. False otherwise or if not found - */ - public function isUpdatable($slug) - { - return $this->isPluginUpdatable($slug) || $this->isThemeUpdatable($slug); - } - - /** - * Checks if a Plugin is updatable - * @param string $plugin The slug of the Plugin - * @return boolean True if the Plugin is updatable. False otherwise - */ - public function isPluginUpdatable($plugin) - { - return array_key_exists($plugin, (array) $this->getUpdatablePlugins()); - } - - /** - * Returns an array of Themes that can be updated. - * The Themes are extended with the `available` property that relies to the remote version - * @return Iterator Array of updatable Themes - */ - public function getUpdatableThemes() - { - $items = []; - $repository = $this->repository['themes']; - - // local cache to speed things up - if (isset($this->cache[__METHOD__])) { - return $this->cache[__METHOD__]; - } - - foreach ($this->installed['themes'] as $slug => $plugin) { - if (!isset($repository[$slug]) || $plugin->symlink) { - continue; - } - - $local_version = $plugin->version ? $plugin->version : 'Unknown'; - $remote_version = $repository[$slug]->version; - - if (version_compare($local_version, $remote_version) < 0) { - $repository[$slug]->available = $remote_version; - $repository[$slug]->version = $local_version; - $items[$slug] = $repository[$slug]; - } - } - - $this->cache[__METHOD__] = $items; - - return $items; - } - - /** - * Checks if a Theme is Updatable - * @param string $theme The slug of the Theme - * @return boolean True if the Theme is updatable. False otherwise - */ - public function isThemeUpdatable($theme) - { - return array_key_exists($theme, (array) $this->getUpdatableThemes()); - } - - /** - * Returns a Plugin from the repository - * @param string $slug The slug of the Plugin - * @return mixed Package if found, NULL if not - */ - public function getRepositoryPlugin($slug) - { - return @$this->repository['plugins'][$slug]; - } - - /** - * Returns the list of Plugins available in the repository - * @return Iterator The Plugins remotely available - */ - public function getRepositoryPlugins() - { - return $this->repository['plugins']; - } - - /** - * Returns a Theme from the repository - * @param string $slug The slug of the Theme - * @return mixed Package if found, NULL if not - */ - public function getRepositoryTheme($slug) - { - return @$this->repository['themes'][$slug]; - } - - /** - * Returns the list of Themes available in the repository - * @return Iterator The Themes remotely available - */ - public function getRepositoryThemes() - { - return $this->repository['themes']; - } - - /** - * Returns the list of Plugins and Themes available in the repository - * @return array Array of available Plugins and Themes - * Format: ['plugins' => array, 'themes' => array] - */ - public function getRepository() - { - return $this->repository; - } - - /** - * Searches for a Package in the repository - * @param string $search Can be either the slug or the name - * @return Remote\Package Package if found, FALSE if not - */ - public function findPackage($search) - { - $search = strtolower($search); - if ($found = $this->getRepositoryTheme($search)) { - return $found; - } - - if ($found = $this->getRepositoryPlugin($search)) { - return $found; - } - - foreach ($this->getRepositoryThemes() as $slug => $theme) { - if ($search == $slug || $search == $theme->name) { - return $theme; - } - } - - foreach ($this->getRepositoryPlugins() as $slug => $plugin) { - if ($search == $slug || $search == $plugin->name) { - return $plugin; - } - } - - return false; - } - - /** - * Returns the list of Plugins and Themes available in the repository - * @return array Array of available Plugins and Themes - * Format: ['plugins' => array, 'themes' => array] - */ - /** - * Searches for a list of Packages in the repository - * @param array $searches An array of either slugs or names - * @return array Array of found Packages - * Format: ['total' => int, 'not_found' => array, ] - */ - public function findPackages($searches = []) - { - $packages = ['total' => 0, 'not_found' => []]; - $inflector = new Inflector(); - - foreach ($searches as $search) { - $repository = ''; - // if this is an object, get the search data from the key - if (is_object($search)) { - $search = (array) $search; - $key = key($search); - $repository = $search[$key]; - $search = $key; - } - - if ($found = $this->findPackage($search)) { - // set override repository if provided - if ($repository) { - $found->override_repository = $repository; - } - if (!isset($packages[$found->package_type])) { - $packages[$found->package_type] = []; - } - - $packages[$found->package_type][$found->slug] = $found; - $packages['total']++; - } else { - // make a best guess at the type based on the repo URL - if (Utils::contains($repository, '-theme')) { - $type = 'themes'; - } else { - $type = 'plugins'; - } - - $not_found = new \stdClass(); - $not_found->name = $inflector->camelize($search); - $not_found->slug = $search; - $not_found->package_type = $type; - $not_found->install_path = str_replace('%name%', $search, $this->install_paths[$type]); - $not_found->override_repository = $repository; - $packages['not_found'][$search] = $not_found; - } - } - - return $packages; - } -} diff --git a/src/system/src/Grav/Common/GPM/Installer.php b/src/system/src/Grav/Common/GPM/Installer.php deleted file mode 100644 index ee9db48..0000000 --- a/src/system/src/Grav/Common/GPM/Installer.php +++ /dev/null @@ -1,343 +0,0 @@ - true, - 'ignore_symlinks' => true, - 'sophisticated' => false, - 'theme' => false, - 'install_path' => '', - 'exclude_checks' => [self::EXISTS, self::NOT_FOUND, self::IS_LINK] - ]; - - /** - * Installs a given package to a given destination. - * - * @param string $package The local path to the ZIP package - * @param string $destination The local path to the Grav Instance - * @param array $options Options to use for installing. ie, ['install_path' => 'user/themes/antimatter'] - * - * @return boolean True if everything went fine, False otherwise. - */ - public static function install($package, $destination, $options = []) - { - $destination = rtrim($destination, DS); - $options = array_merge(self::$options, $options); - $install_path = rtrim($destination . DS . ltrim($options['install_path'], DS), DS); - - if (!self::isGravInstance($destination) || !self::isValidDestination($install_path, $options['exclude_checks'])) { - return false; - } - - if (self::lastErrorCode() == self::IS_LINK && $options['ignore_symlinks'] || - self::lastErrorCode() == self::EXISTS && !$options['overwrite']) { - return false; - } - - // Pre install checks - static::flightProcessing('pre_install', $install_path); - - $zip = new \ZipArchive(); - $archive = $zip->open($package); - $tmp = CACHE_DIR . 'tmp/Grav-' . uniqid(); - - if ($archive !== true) { - self::$error = self::ZIP_OPEN_ERROR; - - return false; - } - - Folder::mkdir($tmp); - - $unzip = $zip->extractTo($tmp); - - if (!$unzip) { - self::$error = self::ZIP_EXTRACT_ERROR; - - $zip->close(); - Folder::delete($tmp); - - return false; - } - - - if (!$options['sophisticated']) { - if ($options['theme']) { - self::copyInstall($zip, $install_path, $tmp); - } else { - self::moveInstall($zip, $install_path, $tmp); - } - } else { - self::sophisticatedInstall($zip, $install_path, $tmp); - } - - Folder::delete($tmp); - $zip->close(); - - // Post install checks - static::flightProcessing('post_install', $install_path); - - self::$error = self::OK; - - return true; - - } - - protected static function flightProcessing($state, $install_path) - { - $blueprints_path = $install_path . DS . 'blueprints.yaml'; - - if (file_exists($blueprints_path)) { - $package_yaml = Yaml::parse(file_get_contents($blueprints_path)); - if (isset($package_yaml['install'][$state]['create'])) { - foreach ((array) $package_yaml['install']['pre_install']['create'] as $file) { - Folder::mkdir($install_path . '/' . ltrim($file, '/')); - } - } - if (isset($package_yaml['install'][$state]['remove'])) { - foreach ((array) $package_yaml['install']['pre_install']['remove'] as $file) { - Folder::delete($install_path . '/' . ltrim($file, '/')); - } - } - } - } - - public static function moveInstall(\ZipArchive $zip, $install_path, $tmp) - { - $container = $zip->getNameIndex(0); - if (file_exists($install_path)) { - Folder::delete($install_path); - } - - Folder::move($tmp . DS . $container, $install_path); - - return true; - } - - public static function copyInstall(\ZipArchive $zip, $install_path, $tmp) - { - $firstDir = $zip->getNameIndex(0); - if (empty($firstDir)) { - throw new \RuntimeException("Directory $firstDir is missing"); - } else { - $tmp = realpath($tmp . DS . $firstDir); - Folder::rcopy($tmp, $install_path); - } - - return true; - } - - public static function sophisticatedInstall(\ZipArchive $zip, $install_path, $tmp) - { - for ($i = 0, $l = $zip->numFiles; $i < $l; $i++) { - $filename = $zip->getNameIndex($i); - $fileinfo = pathinfo($filename); - $depth = count(explode(DS, rtrim($filename, '/'))); - - if ($depth > 2) { - continue; - } - - $path = $install_path . DS . $fileinfo['basename']; - - if (is_link($path)) { - continue; - } else { - if (is_dir($path)) { - Folder::delete($path); - Folder::move($tmp . DS . $filename, $path); - - if ($fileinfo['basename'] == 'bin') { - foreach (glob($path . DS . '*') as $file) { - @chmod($file, 0755); - } - } - } else { - @unlink($path); - @copy($tmp . DS . $filename, $path); - } - } - } - - return true; - } - - /** - * Uninstalls one or more given package - * - * @param string $path The slug of the package(s) - * @param array $options Options to use for uninstalling - * - * @return boolean True if everything went fine, False otherwise. - */ - public static function uninstall($path, $options = []) - { - $options = array_merge(self::$options, $options); - if (!self::isValidDestination($path, $options['exclude_checks']) - ) { - return false; - } - - return Folder::delete($path); - } - - /** - * Runs a set of checks on the destination and sets the Error if any - * - * @param string $destination The directory to run validations at - * @param array $exclude An array of constants to exclude from the validation - * - * @return boolean True if validation passed. False otherwise - */ - public static function isValidDestination($destination, $exclude = []) - { - self::$error = 0; - self::$target = $destination; - - if (is_link($destination)) { - self::$error = self::IS_LINK; - } elseif (file_exists($destination)) { - self::$error = self::EXISTS; - } elseif (!file_exists($destination)) { - self::$error = self::NOT_FOUND; - } elseif (!is_dir($destination)) { - self::$error = self::NOT_DIRECTORY; - } - - if (count($exclude) && in_array(self::$error, $exclude)) { - return true; - } - - return !(self::$error); - } - - /** - * Validates if the given path is a Grav Instance - * - * @param string $target The local path to the Grav Instance - * - * @return boolean True if is a Grav Instance. False otherwise - */ - public static function isGravInstance($target) - { - self::$error = 0; - self::$target = $target; - - if ( - !file_exists($target . DS . 'index.php') || - !file_exists($target . DS . 'bin') || - !file_exists($target . DS . 'user') || - !file_exists($target . DS . 'system' . DS . 'config' . DS . 'system.yaml') - ) { - self::$error = self::NOT_GRAV_ROOT; - } - - return !self::$error; - } - - /** - * Returns the last error occurred in a string message format - * @return string The message of the last error - */ - public static function lastErrorMsg() - { - $msg = 'Unknown Error'; - - switch (self::$error) { - case 0: - $msg = 'No Error'; - break; - - case self::EXISTS: - $msg = 'The target path "' . self::$target . '" already exists'; - break; - - case self::IS_LINK: - $msg = 'The target path "' . self::$target . '" is a symbolic link'; - break; - - case self::NOT_FOUND: - $msg = 'The target path "' . self::$target . '" does not appear to exist'; - break; - - case self::NOT_DIRECTORY: - $msg = 'The target path "' . self::$target . '" does not appear to be a folder'; - break; - - case self::NOT_GRAV_ROOT: - $msg = 'The target path "' . self::$target . '" does not appear to be a Grav instance'; - break; - - case self::ZIP_OPEN_ERROR: - $msg = 'Unable to open the package file'; - break; - - case self::ZIP_EXTRACT_ERROR: - $msg = 'An error occurred while extracting the package'; - break; - - default: - return 'Unknown error'; - break; - } - - return $msg; - } - - /** - * Returns the last error code of the occurred error - * @return integer The code of the last error - */ - public static function lastErrorCode() - { - return self::$error; - } - - /** - * Allows to manually set an error - * @param $error the Error code - */ - - public static function setError($error) - { - self::$error = $error; - } -} diff --git a/src/system/src/Grav/Common/GPM/Local/AbstractPackageCollection.php b/src/system/src/Grav/Common/GPM/Local/AbstractPackageCollection.php deleted file mode 100644 index b61f92c..0000000 --- a/src/system/src/Grav/Common/GPM/Local/AbstractPackageCollection.php +++ /dev/null @@ -1,17 +0,0 @@ - $data) { - $data->set('slug', $name); - $this->items[$name] = new Package($data, $this->type); - } - } -} diff --git a/src/system/src/Grav/Common/GPM/Local/Package.php b/src/system/src/Grav/Common/GPM/Local/Package.php deleted file mode 100644 index 6505a59..0000000 --- a/src/system/src/Grav/Common/GPM/Local/Package.php +++ /dev/null @@ -1,32 +0,0 @@ -blueprints()->toArray()); - parent::__construct($data, $package_type); - - $this->settings = $package->toArray(); - - $html_description = \Parsedown::instance()->line($this->description); - $this->data->set('slug', $package->slug); - $this->data->set('description_html', $html_description); - $this->data->set('description_plain', strip_tags($html_description)); - $this->data->set('symlink', is_link(USER_DIR . $package_type . DS . $this->name)); - } - - /** - * @return mixed - */ - public function isEnabled() - { - return $this->settings['enabled']; - } -} diff --git a/src/system/src/Grav/Common/GPM/Local/Packages.php b/src/system/src/Grav/Common/GPM/Local/Packages.php deleted file mode 100644 index a8ed6a4..0000000 --- a/src/system/src/Grav/Common/GPM/Local/Packages.php +++ /dev/null @@ -1,17 +0,0 @@ - new Plugins(), - 'themes' => new Themes() - ]; - - parent::__construct($items); - } -} diff --git a/src/system/src/Grav/Common/GPM/Local/Plugins.php b/src/system/src/Grav/Common/GPM/Local/Plugins.php deleted file mode 100644 index b1c3c64..0000000 --- a/src/system/src/Grav/Common/GPM/Local/Plugins.php +++ /dev/null @@ -1,22 +0,0 @@ -all()); - } -} diff --git a/src/system/src/Grav/Common/GPM/Local/Themes.php b/src/system/src/Grav/Common/GPM/Local/Themes.php deleted file mode 100644 index 64d23b9..0000000 --- a/src/system/src/Grav/Common/GPM/Local/Themes.php +++ /dev/null @@ -1,22 +0,0 @@ -all()); - } -} diff --git a/src/system/src/Grav/Common/GPM/PackageInterface.php b/src/system/src/Grav/Common/GPM/PackageInterface.php deleted file mode 100644 index ad856c0..0000000 --- a/src/system/src/Grav/Common/GPM/PackageInterface.php +++ /dev/null @@ -1,58 +0,0 @@ -findResource('cache://gpm', true, true); - $this->cache = new FilesystemCache($cache_dir); - - $this->repository = $repository; - $this->raw = $this->cache->fetch(md5($this->repository)); - - $this->fetch($refresh, $callback); - foreach (json_decode($this->raw, true) as $slug => $data) { - $this->items[$slug] = new Package($data, $this->type); - } - } - - public function fetch($refresh = false, $callback = null) - { - if (!$this->raw || $refresh) { - $response = Response::get($this->repository, [], $callback); - $this->raw = $response; - $this->cache->save(md5($this->repository), $this->raw, $this->lifetime); - } - - return $this->raw; - } -} diff --git a/src/system/src/Grav/Common/GPM/Remote/Grav.php b/src/system/src/Grav/Common/GPM/Remote/Grav.php deleted file mode 100644 index f8148a5..0000000 --- a/src/system/src/Grav/Common/GPM/Remote/Grav.php +++ /dev/null @@ -1,95 +0,0 @@ -findResource('cache://gpm', true, true); - $this->cache = new FilesystemCache($cache_dir); - $this->raw = $this->cache->fetch(md5($this->repository)); - - $this->fetch($refresh, $callback); - - $this->data = json_decode($this->raw, true); - $this->version = isset($this->data['version']) ? $this->data['version'] : '-'; - $this->date = isset($this->data['date']) ? $this->data['date'] : '-'; - - if (isset($this->data['assets'])) foreach ($this->data['assets'] as $slug => $data) { - $this->items[$slug] = new Package($data); - } - } - - /** - * Returns the list of assets associated to the latest version of Grav - * @return array list of assets - */ - public function getAssets() - { - return $this->data['assets']; - } - - /** - * Returns the changelog list for each version of Grav - * @param string $diff the version number to start the diff from - * - * @return array changelog list for each version - */ - public function getChangelog($diff = null) - { - if (!$diff) { - return $this->data['changelog']; - } - - $diffLog = []; - foreach ($this->data['changelog'] as $version => $changelog) { - preg_match("/[\d\.]+/", $version, $cleanVersion); - - if (!$cleanVersion || version_compare($diff, $cleanVersion[0], ">=")) { continue; } - - $diffLog[$version] = $changelog; - } - - return $diffLog; - } - - /** - * Returns the latest version of Grav available remotely - * @return string - */ - public function getVersion() - { - return $this->version; - } - - /** - * Return the release date of the latest Grav - * @return string - */ - public function getDate() - { - return $this->date; - } - - public function isUpdatable() - { - return version_compare(GRAV_VERSION, $this->getVersion(), '<'); - } - - public function isSymlink() - { - return is_link(GRAV_ROOT . DS . 'index.php'); - } -} diff --git a/src/system/src/Grav/Common/GPM/Remote/Package.php b/src/system/src/Grav/Common/GPM/Remote/Package.php deleted file mode 100644 index 9b0367f..0000000 --- a/src/system/src/Grav/Common/GPM/Remote/Package.php +++ /dev/null @@ -1,12 +0,0 @@ - new Plugins($refresh, $callback), - 'themes' => new Themes($refresh, $callback) - ]; - - parent::__construct($items); - } -} diff --git a/src/system/src/Grav/Common/GPM/Remote/Plugins.php b/src/system/src/Grav/Common/GPM/Remote/Plugins.php deleted file mode 100644 index ec6d645..0000000 --- a/src/system/src/Grav/Common/GPM/Remote/Plugins.php +++ /dev/null @@ -1,24 +0,0 @@ -repository, $refresh, $callback); - } -} diff --git a/src/system/src/Grav/Common/GPM/Remote/Themes.php b/src/system/src/Grav/Common/GPM/Remote/Themes.php deleted file mode 100644 index 759b7e1..0000000 --- a/src/system/src/Grav/Common/GPM/Remote/Themes.php +++ /dev/null @@ -1,24 +0,0 @@ -repository, $refresh, $callback); - } -} diff --git a/src/system/src/Grav/Common/GPM/Response.php b/src/system/src/Grav/Common/GPM/Response.php deleted file mode 100644 index 4f61e2b..0000000 --- a/src/system/src/Grav/Common/GPM/Response.php +++ /dev/null @@ -1,221 +0,0 @@ - [ - CURLOPT_REFERER => 'Grav GPM', - CURLOPT_USERAGENT => 'Grav GPM', - CURLOPT_RETURNTRANSFER => true, - CURLOPT_FOLLOWLOCATION => true, - CURLOPT_TIMEOUT => 15, - CURLOPT_HEADER => false, - /** - * Example of callback parameters from within your own class - */ - //CURLOPT_NOPROGRESS => false, - //CURLOPT_PROGRESSFUNCTION => [$this, 'progress'] - ], - 'fopen' => [ - 'method' => 'GET', - 'user_agent' => 'Grav GPM', - 'max_redirects' => 5, - 'follow_location' => 1, - 'timeout' => 15, - /** - * Example of callback parameters from within your own class - */ - //'notification' => [$this, 'progress'] - ] - ]; - - /** - * Sets the preferred method to use for making HTTP calls. - * @param string $method Default is `auto` - */ - public static function setMethod($method = 'auto') - { - if (!in_array($method, ['auto', 'curl', 'fopen'])) { - $method = 'auto'; - } - - self::$method = $method; - - return new self(); - } - - /** - * Makes a request to the URL by using the preferred method - * @param string $uri URL to call - * @param array $options An array of parameters for both `curl` and `fopen` - * @return string The response of the request - */ - public static function get($uri = '', $options = [], $callback = null) - { - if (!self::isCurlAvailable() && !self::isFopenAvailable()) { - throw new \RuntimeException('Could not start an HTTP request. `allow_url_open` is disabled and `cURL` is not available'); - } - - $options = array_replace_recursive(self::$defaults, $options); - $method = 'get' . ucfirst(strtolower(self::$method)); - - self::$callback = $callback; - return static::$method($uri, $options, $callback); - } - - /** - * Progress normalized for cURL and Fopen - * @param args Variable length of arguments passed in by stream method - * @return array Normalized array with useful data. - * Format: ['code' => int|false, 'filesize' => bytes, 'transferred' => bytes, 'percent' => int] - */ - public static function progress() - { - static $filesize = null; - - $args = func_get_args(); - $isCurlResource = is_resource($args[0]) && get_resource_type($args[0]) == 'curl'; - - $notification_code = !$isCurlResource ? $args[0] : false; - $bytes_transferred = $isCurlResource ? $args[2] : $args[4]; - - if ($isCurlResource) { - $filesize = $args[1]; - } elseif ($notification_code == STREAM_NOTIFY_FILE_SIZE_IS) { - $filesize = $args[5]; - } - - if ($bytes_transferred > 0) { - if ($notification_code == STREAM_NOTIFY_PROGRESS|STREAM_NOTIFY_COMPLETED || $isCurlResource) { - - $progress = [ - 'code' => $notification_code, - 'filesize' => $filesize, - 'transferred' => $bytes_transferred, - 'percent' => $filesize <= 0 ? '-' : round(($bytes_transferred * 100) / $filesize, 1) - ]; - - if (self::$callback !== null) { - call_user_func_array(self::$callback, [$progress]); - } - } - } - } - - /** - * Checks if cURL is available - * @return boolean - */ - public static function isCurlAvailable() - { - return function_exists('curl_version'); - } - - /** - * Checks if the remote fopen request is enabled in PHP - * @return boolean - */ - public static function isFopenAvailable() - { - return preg_match('/1|yes|on|true/i', ini_get('allow_url_fopen')); - } - - /** - * Automatically picks the preferred method - * @return string The response of the request - */ - private static function getAuto() - { - if (self::isFopenAvailable()) { - return self::getFopen(func_get_args()); - } - - if (self::isCurlAvailable()) { - return self::getCurl(func_get_args()); - } - } - - /** - * Starts a HTTP request via cURL - * @return string The response of the request - */ - private static function getCurl() - { - $args = func_get_args(); - $args = count($args) > 1 ? $args : array_shift($args); - - $uri = $args[0]; - $options = $args[1]; - $callback = $args[2]; - - $ch = curl_init($uri); - curl_setopt_array($ch, $options['curl']); - - if ($callback) { - curl_setopt_array( - $ch, - [ - CURLOPT_NOPROGRESS => false, - CURLOPT_PROGRESSFUNCTION => ['self', 'progress'] - ] - ); - } - - $response = curl_exec($ch); - - if ($errno = curl_errno($ch)) { - $error_message = curl_strerror($errno); - throw new \RuntimeException("cURL error ({$errno}):\n {$error_message}"); - } - - curl_close($ch); - - return $response; - } - - /** - * Starts a HTTP request via fopen - * @return string The response of the request - */ - private static function getFopen() - { - if (count($args = func_get_args()) == 1) { - $args = $args[0]; - } - - $uri = $args[0]; - $options = $args[1]; - $callback = $args[2]; - - if ($callback) { - $options['fopen']['notification'] = ['self', 'progress']; - } - - $stream = stream_context_create(['http' => $options['fopen']], $options['fopen']); - $content = @file_get_contents($uri, false, $stream); - - if ($content === false) { - throw new \RuntimeException("Error while trying to download '$uri'"); - } - - return $content; - } -} diff --git a/src/system/src/Grav/Common/GPM/Upgrader.php b/src/system/src/Grav/Common/GPM/Upgrader.php deleted file mode 100644 index 590ad4d..0000000 --- a/src/system/src/Grav/Common/GPM/Upgrader.php +++ /dev/null @@ -1,93 +0,0 @@ -remote = new Remote\Grav($refresh, $callback); - } - - /** - * Returns the release date of the latest version of Grav - * @return string - */ - public function getReleaseDate() - { - return $this->remote->getDate(); - } - - /** - * Returns the version of the installed Grav - * @return string - */ - public function getLocalVersion() - { - return GRAV_VERSION; - } - - /** - * Returns the version of the remotely available Grav - * @return string - */ - public function getRemoteVersion() - { - return $this->remote->getVersion(); - } - - /** - * Returns an array of assets available to download remotely - * @return array - */ - public function getAssets() - { - return $this->remote->getAssets(); - } - - /** - * Returns the changelog list for each version of Grav - * @param string $diff the version number to start the diff from - * - * @return array return the changelog list for each version - */ - public function getChangelog($diff = null) - { - return $this->remote->getChangelog($diff); - } - - /** - * Checks if the currently installed Grav is upgradable to a newer version - * @return boolean True if it's upgradable, False otherwise. - */ - public function isUpgradable() - { - return version_compare($this->getLocalVersion(), $this->getRemoteVersion(), "<"); - } - - /** - * Checks if Grav is currently symbolically linked - * @return boolean True if Grav is symlinked, False otherwise. - */ - - public function isSymlink() - { - return $this->remote->isSymlink(); - } -} diff --git a/src/system/src/Grav/Common/Getters.php b/src/system/src/Grav/Common/Getters.php deleted file mode 100644 index 857dcca..0000000 --- a/src/system/src/Grav/Common/Getters.php +++ /dev/null @@ -1,150 +0,0 @@ -offsetSet($offset, $value); - } - - /** - * Magic getter method - * - * @param mixed $offset Medium name value - * @return mixed Medium value - */ - public function __get($offset) - { - return $this->offsetGet($offset); - } - - /** - * Magic method to determine if the attribute is set - * - * @param mixed $offset Medium name value - * @return boolean True if the value is set - */ - public function __isset($offset) - { - return $this->offsetExists($offset); - } - - /** - * Magic method to unset the attribute - * - * @param mixed $offset The name value to unset - */ - public function __unset($offset) - { - $this->offsetUnset($offset); - } - - /** - * @param mixed $offset - * @return bool - */ - public function offsetExists($offset) - { - if ($this->gettersVariable) { - $var = $this->gettersVariable; - return isset($this->{$var}[$offset]); - } else { - return isset($this->{$offset}); - } - } - - /** - * @param mixed $offset - * @return mixed - */ - public function offsetGet($offset) - { - if ($this->gettersVariable) { - $var = $this->gettersVariable; - return isset($this->{$var}[$offset]) ? $this->{$var}[$offset] : null; - } else { - return isset($this->{$offset}) ? $this->{$offset} : null; - } - } - - /** - * @param mixed $offset - * @param mixed $value - */ - public function offsetSet($offset, $value) - { - if ($this->gettersVariable) { - $var = $this->gettersVariable; - $this->{$var}[$offset] = $value; - } else { - $this->{$offset} = $value; - } - } - - /** - * @param mixed $offset - */ - public function offsetUnset($offset) - { - if ($this->gettersVariable) { - $var = $this->gettersVariable; - unset($this->{$var}[$offset]); - } else { - unset($this->{$offset}); - } - } - - /** - * @return int - */ - public function count() - { - if ($this->gettersVariable) { - $var = $this->gettersVariable; - count($this->{$var}); - } else { - count($this->toArray()); - } - } - - /** - * Returns an associative array of object properties. - * - * @return array - */ - public function toArray() - { - if ($this->gettersVariable) { - $var = $this->gettersVariable; - return $this->{$var}; - } else { - $properties = (array) $this; - $list = array(); - foreach ($properties as $property => $value) { - if ($property[0] != "\0") $list[$property] = $value; - } - return $list; - } - } -} diff --git a/src/system/src/Grav/Common/Grav.php b/src/system/src/Grav/Common/Grav.php deleted file mode 100644 index d60cfd0..0000000 --- a/src/system/src/Grav/Common/Grav.php +++ /dev/null @@ -1,510 +0,0 @@ - $value) { - $instance->offsetSet($key, $value); - } - } - - return self::$instance; - } - - protected static function load(array $values) - { - $container = new static($values); - - $container['grav'] = $container; - - - - $container['debugger'] = new Debugger(); - $container['debugger']->startTimer('_init', 'Initialize'); - - $container->register(new LoggerServiceProvider); - - $container->register(new ErrorServiceProvider); - - $container['uri'] = function ($c) { - return new Uri($c); - }; - - $container['task'] = function ($c) { - return !empty($_POST['task']) ? $_POST['task'] : $c['uri']->param('task'); - }; - - $container['events'] = function ($c) { - return new EventDispatcher; - }; - $container['cache'] = function ($c) { - return new Cache($c); - }; - $container['session'] = function ($c) { - return new Session($c); - }; - $container['plugins'] = function ($c) { - return new Plugins(); - }; - $container['themes'] = function ($c) { - return new Themes($c); - }; - $container['twig'] = function ($c) { - return new Twig($c); - }; - $container['taxonomy'] = function ($c) { - return new Taxonomy($c); - }; - $container['language'] = function ($c) { - return new Language($c); - }; - - $container['pages'] = function ($c) { - return new Page\Pages($c); - }; - - $container['assets'] = new Assets(); - - $container['page'] = function ($c) { - /** @var Pages $pages */ - $pages = $c['pages']; - /** @var Language $language */ - $language = $c['language']; - - /** @var Uri $uri */ - $uri = $c['uri']; - - $path = rtrim($uri->path(), '/'); - $path = $path ?: '/'; - - $page = $pages->dispatch($path); - - // Redirection tests - if ($page) { - // Language-specific redirection scenarios - if ($language->enabled()) { - if ($language->isLanguageInUrl() && !$language->isIncludeDefaultLanguage()) { - $c->redirect($page->route()); - } - if (!$language->isLanguageInUrl() && $language->isIncludeDefaultLanguage()) { - $c->redirectLangSafe($page->route()); - } - } - // Default route test and redirect - if ($c['config']->get('system.pages.redirect_default_route') && $page->route() != $path) { - $c->redirectLangSafe($page->route()); - } - } - - // if page is not found, try some fallback stuff - if (!$page || !$page->routable()) { - - // Try fallback URL stuff... - $c->fallbackUrl($page, $path); - - // If no page found, fire event - $event = $c->fireEvent('onPageNotFound'); - - if (isset($event->page)) { - $page = $event->page; - } else { - throw new \RuntimeException('Page Not Found', 404); - } - } - return $page; - }; - $container['output'] = function ($c) { - return $c['twig']->processSite($c['uri']->extension()); - }; - $container['browser'] = function ($c) { - return new Browser(); - }; - - $container['base_url_absolute'] = function ($c) { - return $c['config']->get('system.base_url_absolute') ?: $c['uri']->rootUrl(true); - }; - $container['base_url_relative'] = function ($c) { - return $c['config']->get('system.base_url_relative') ?: $c['uri']->rootUrl(false); - }; - $container['base_url'] = function ($c) { - return $c['config']->get('system.absolute_urls') ? $c['base_url_absolute'] : $c['base_url_relative']; - }; - - $container->register(new StreamsServiceProvider); - $container->register(new ConfigServiceProvider); - - $container['inflector'] = new Inflector(); - - $container['debugger']->stopTimer('_init'); - - return $container; - } - - public function process() - { - /** @var Debugger $debugger */ - $debugger = $this['debugger']; - - - - // Initialize configuration. - $debugger->startTimer('_config', 'Configuration'); - $this['config']->init(); - $this['errors']->resetHandlers(); - $this['uri']->init(); - $this['session']->init(); - - $debugger->init(); - $this['config']->debug(); - $debugger->stopTimer('_config'); - - // Use output buffering to prevent headers from being sent too early. - ob_start(); - if ($this['config']->get('system.cache.gzip')) { - ob_start('ob_gzhandler'); - } - - // Initialize the timezone - if ($this['config']->get('system.timezone')) { - date_default_timezone_set($this['config']->get('system.timezone')); - } - - // Initialize Locale if set and configured - if ($this['language']->enabled() && $this['config']->get('system.languages.override_locale')) { - setlocale(LC_ALL, $this['language']->getLanguage()); - } elseif ($this['config']->get('system.default_locale')) { - setlocale(LC_ALL, $this['config']->get('system.default_locale')); - } - - $debugger->startTimer('streams', 'Streams'); - $this['streams']; - $debugger->stopTimer('streams'); - - $debugger->startTimer('plugins', 'Plugins'); - $this['plugins']->init(); - $this->fireEvent('onPluginsInitialized'); - $debugger->stopTimer('plugins'); - - $debugger->startTimer('themes', 'Themes'); - $this['themes']->init(); - $this->fireEvent('onThemeInitialized'); - $debugger->stopTimer('themes'); - - $task = $this['task']; - if ($task) { - $this->fireEvent('onTask.' . $task); - } - - $this['assets']->init(); - $this->fireEvent('onAssetsInitialized'); - - $debugger->startTimer('twig', 'Twig'); - $this['twig']->init(); - $debugger->stopTimer('twig'); - - $debugger->startTimer('pages', 'Pages'); - $this['pages']->init(); - $this->fireEvent('onPagesInitialized'); - $debugger->stopTimer('pages'); - $this->fireEvent('onPageInitialized'); - - $debugger->addAssets(); - - // Process whole page as required - $debugger->startTimer('render', 'Render'); - $this->output = $this['output']; - $this->fireEvent('onOutputGenerated'); - $debugger->stopTimer('render'); - - // Set the header type - $this->header(); - echo $this->output; - $debugger->render(); - - $this->fireEvent('onOutputRendered'); - - register_shutdown_function([$this, 'shutdown']); - } - - /** - * Redirect browser to another location. - * - * @param string $route Internal route. - * @param int $code Redirection code (30x) - */ - public function redirect($route, $code = null) - { - /** @var Uri $uri */ - $uri = $this['uri']; - - //Check for code in route - $regex = '/.*(\[(30[1-7])\])$/'; - preg_match($regex, $route, $matches); - if ($matches) { - $route = str_replace($matches[1], '', $matches[0]); - $code = $matches[2]; - } - - if ($code == null) { - $code = $this['config']->get('system.pages.redirect_default_code', 301); - } - - if (isset($this['session'])) { - $this['session']->close(); - } - - if ($uri->isExternal($route)) { - $url = $route; - } else { - $url = rtrim($uri->rootUrl(), '/') .'/'. trim($route, '/'); - } - - header("Location: {$url}", true, $code); - exit(); - } - - /** - * Redirect browser to another location taking language into account (preferred) - * - * @param string $route Internal route. - * @param int $code Redirection code (30x) - */ - public function redirectLangSafe($route, $code = null) - { - /** @var Language $language */ - $language = $this['language']; - - if (!$this['uri']->isExternal($route) && $language->enabled() && $language->isIncludeDefaultLanguage()) { - return $this->redirect($language->getLanguage() . $route, $code); - } else { - return $this->redirect($route, $code); - } - } - - /** - * Returns mime type for the file format. - * - * @param string $format - * @return string - */ - public function mime($format) - { - switch ($format) { - case 'json': - return 'application/json'; - case 'html': - return 'text/html'; - case 'atom': - return 'application/atom+xml'; - case 'rss': - return 'application/rss+xml'; - case 'xml': - return 'application/xml'; - } - return 'text/html'; - } - - /** - * Set response header. - */ - public function header() - { - $extension = $this['uri']->extension(); - - /** @var Page $page */ - $page = $this['page']; - - header('Content-type: ' . $this->mime($extension)); - - // Calculate Expires Headers if set to > 0 - $expires = $page->expires(); - - if ($expires > 0) { - $expires_date = gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT'; - header('Cache-Control: max-age=' . $expires); - header('Expires: '. $expires_date); - } - - // Set the last modified time - if ($page->lastModified()) { - $last_modified_date = gmdate('D, d M Y H:i:s', $page->modified()) . ' GMT'; - header('Last-Modified: ' . $last_modified_date); - } - - // Calculate a Hash based on the raw file - if ($page->eTag()) { - header('ETag: ' . md5($page->raw() . $page->modified())); - } - - // Set debugger data in headers - if (!($extension === null || $extension == 'html')) { - $this['debugger']->enabled(false); - } - - // Set HTTP response code - if (isset($this['page']->header()->http_response_code)) { - http_response_code($this['page']->header()->http_response_code); - } - - // Vary: Accept-Encoding - if ($this['config']->get('system.pages.vary_accept_encoding', false)) { - header('Vary: Accept-Encoding'); - } - } - - /** - * Fires an event with optional parameters. - * - * @param string $eventName - * @param Event $event - * @return Event - */ - public function fireEvent($eventName, Event $event = null) - { - /** @var EventDispatcher $events */ - $events = $this['events']; - return $events->dispatch($eventName, $event); - } - - /** - * Set the final content length for the page and flush the buffer - * - */ - public function shutdown() - { - if ($this['config']->get('system.debugger.shutdown.close_connection')) { - //stop user abort - if (function_exists('ignore_user_abort')) { - @ignore_user_abort(true); - } - - // close the session - if (isset($this['session'])) { - $this['session']->close(); - } - - // flush buffer if gzip buffer was started - if ($this['config']->get('system.cache.gzip')) { - ob_end_flush(); // gzhandler buffer - } - - // get lengh and close the connection - header('Content-Length: ' . ob_get_length()); - header("Connection: close"); - - // flush the regular buffer - ob_end_flush(); - @ob_flush(); - flush(); - - // fix for fastcgi close connection issue - if (function_exists('fastcgi_finish_request')) { - @fastcgi_finish_request(); - } - - } - - $this->fireEvent('onShutdown'); - } - - /** - * This attempts to find media, other files, and download them - * @param $page - * @param $path - */ - protected function fallbackUrl($page, $path) - { - /** @var Uri $uri */ - $uri = $this['uri']; - - /** @var Config $config */ - $config = $this['config']; - - $uri_extension = $uri->extension(); - - // Only allow whitelisted types to fallback - if (!in_array($uri_extension, $config->get('system.pages.fallback_types'))) { - return; - } - - $path_parts = pathinfo($path); - $page = $this['pages']->dispatch($path_parts['dirname'], true); - if ($page) { - $media = $page->media()->all(); - - $parsed_url = parse_url(urldecode($uri->basename())); - - $media_file = $parsed_url['path']; - - // if this is a media object, try actions first - if (isset($media[$media_file])) { - $medium = $media[$media_file]; - foreach ($uri->query(null, true) as $action => $params) { - if (in_array($action, ImageMedium::$magic_actions)) { - call_user_func_array(array(&$medium, $action), explode(',', $params)); - } - } - Utils::download($medium->path(), false); - } - - // unsupported media type, try to download it... - if ($uri_extension) { - $extension = $uri_extension; - } else { - if (isset($path_parts['extension'])) { - $extension = $path_parts['extension']; - } else { - $extension = null; - } - } - - if ($extension) { - $download = true; - if (in_array(ltrim($extension, '.'), $config->get('system.media.unsupported_inline_types', []))) { - $download = false; - } - Utils::download($page->path() . DIRECTORY_SEPARATOR . $uri->basename(), $download); - } - } - } -} diff --git a/src/system/src/Grav/Common/GravTrait.php b/src/system/src/Grav/Common/GravTrait.php deleted file mode 100644 index 1710173..0000000 --- a/src/system/src/Grav/Common/GravTrait.php +++ /dev/null @@ -1,29 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -class Truncator { - - public static $default_options = array( - 'ellipsis' => '…', - 'break' => ' ', - 'length_in_chars' => false, - 'word_safe' => false, - ); - - // These tags are allowed to have an ellipsis inside - public static $ellipsable_tags = array( - 'p', 'ol', 'ul', 'li', - 'div', 'header', 'article', 'nav', - 'section', 'footer', 'aside', - 'dd', 'dt', 'dl', - ); - - public static $self_closing_tags = array( - 'br', 'hr', 'img', - ); - - /** - * Truncate given HTML string to specified length. - * If length_in_chars is false it's trimmed by number - * of words, otherwise by number of characters. - * - * @param string $html - * @param integer $length - * @param string|array $opts - * @return string - */ - public static function truncate($html, $length, $opts=array()) - { - if (is_string($opts)) $opts = array('ellipsis' => $opts); - $opts = array_merge(static::$default_options, $opts); - // wrap the html in case it consists of adjacent nodes like

foo

bar

- $html = mb_convert_encoding("
".$html."
", 'HTML-ENTITIES', 'UTF-8'); - - $root_node = null; - // Parse using HTML5Lib if it's available. - if (class_exists('HTML5Lib\\Parser')) { - try { - $doc = \HTML5Lib\Parser::parse($html); - $root_node = $doc->documentElement->lastChild->lastChild; - } - catch (\Exception $e) { - ; - } - } - if ($root_node === null) { - // HTML5Lib not available so we'll have to use DOMDocument - // We'll only be able to parse HTML5 if it's valid XML - $doc = new DOMDocument('4.01', 'utf-8'); - $doc->formatOutput = false; - $doc->preserveWhiteSpace = true; - // loadHTML will fail with HTML5 tags (article, nav, etc) - // so we need to suppress errors and if it fails to parse we - // retry with the XML parser instead - $prev_use_errors = libxml_use_internal_errors(true); - if ($doc->loadHTML($html)) { - $root_node = $doc->documentElement->lastChild->lastChild; - } - else if ($doc->loadXML($html)) { - $root_node = $doc->documentElement; - } - else { - libxml_use_internal_errors($prev_use_errors); - throw new \RuntimeException; - } - libxml_use_internal_errors($prev_use_errors); - } - list($text, $_, $opts) = static::truncateNode($doc, $root_node, $length, $opts); - - $text = mb_substr(mb_substr($text, 0, -6), 5); - - return $text; - } - - protected static function truncateNode($doc, $node, $length, $opts) - { - if ($length === 0 && !static::ellipsable($node)) { - return array('', 1, $opts); - } - list($inner, $remaining, $opts) = static::innerTruncate($doc, $node, $length, $opts); - if (0 === mb_strlen($inner)) { - return array(in_array(mb_strtolower($node->nodeName), static::$self_closing_tags) ? $doc->saveXML($node) : "", $length - $remaining, $opts); - } - while($node->firstChild) { - $node->removeChild($node->firstChild); - } - $newNode = $doc->createDocumentFragment(); - // handle the ampersand - $newNode->appendXml(static::xmlEscape($inner)); - $node->appendChild($newNode); - return array($doc->saveXML($node), $length - $remaining, $opts); - } - - protected static function innerTruncate($doc, $node, $length, $opts) - { - $inner = ''; - $remaining = $length; - foreach($node->childNodes as $childNode) { - if ($childNode->nodeType === XML_ELEMENT_NODE) { - list($txt, $nb, $opts) = static::truncateNode($doc, $childNode, $remaining, $opts); - } - else if ($childNode->nodeType === XML_TEXT_NODE) { - list($txt, $nb, $opts) = static::truncateText($doc, $childNode, $remaining, $opts); - } else { - $txt = ''; - $nb = 0; - } - - // unhandle the ampersand - $txt = static::xmlUnescape($txt); - - $remaining -= $nb; - $inner .= $txt; - if ($remaining < 0) { - if (static::ellipsable($node)) { - $inner = preg_replace('/(?:[\s\pP]+|(?:&(?:[a-z]+|#[0-9]+);?))*$/', '', $inner).$opts['ellipsis']; - $opts['ellipsis'] = ''; - $opts['was_truncated'] = true; - } - break; - } - } - return array($inner, $remaining, $opts); - } - - protected static function truncateText($doc, $node, $length, $opts) - { - $string = $node->textContent; - - if ($opts['length_in_chars']) { - $count = mb_strlen($string); - if ($count <= $length && $length > 0) { - return array($string, $count, $opts); - } - if ($opts['word_safe']) { - if (false !== ($breakpoint = mb_strpos($string, $opts['break'], $length))) { - if ($breakpoint < mb_strlen($string) - 1) { - $string = mb_substr($string, 0, $breakpoint) . $opts['break']; - } - } - return array($string, $count, $opts); - } - return array(mb_substr($node->textContent, 0, $length), $count, $opts); - } - else { - preg_match_all('/\s*\S+/', $string, $words); - $words = $words[0]; - $count = count($words); - if ($count <= $length && $length > 0) { - return array($xhtml, $count, $opts); - } - return array(implode('', array_slice($words, 0, $length)), $count, $opts); - } - } - - protected static function ellipsable($node) - { - return ($node instanceof DOMDocument) - || in_array(mb_strtolower($node->nodeName), static::$ellipsable_tags) - ; - } - - protected static function xmlEscape($string) - { - $string = str_replace('&', '&', $string); - $string = str_replace('plural)) { - $language = self::getGrav()['language']; - $this->plural = $language->translate('INFLECTOR_PLURALS', null, true); - $this->singular = $language->translate('INFLECTOR_SINGULAR', null, true); - $this->uncountable = $language->translate('INFLECTOR_UNCOUNTABLE', null, true); - $this->irregular = $language->translate('INFLECTOR_IRREGULAR', null, true); - $this->ordinals = $language->translate('INFLECTOR_ORDINALS', null, true); - } - } - - /** - * Pluralizes English nouns. - * - * @param string $word English noun to pluralize - * @return string Plural noun - */ - public function pluralize($word, $count = 2) - { - $this->init(); - - if ($count == 1) { - return $word; - } - - $lowercased_word = strtolower($word); - - foreach ($this->uncountable as $_uncountable) { - if (substr($lowercased_word, (-1*strlen($_uncountable))) == $_uncountable) { - return $word; - } - } - - foreach ($this->irregular as $_plural => $_singular) { - if (preg_match('/('.$_plural.')$/i', $word, $arr)) { - return preg_replace('/('.$_plural.')$/i', substr($arr[0], 0, 1).substr($_singular, 1), $word); - } - } - - foreach ($this->plural as $rule => $replacement) { - if (preg_match($rule, $word)) { - return preg_replace($rule, $replacement, $word); - } - } - return false; - - } - - /** - * Singularizes English nouns. - * - * @param string $word English noun to singularize - * @param int $count - * @return string Singular noun. - */ - public function singularize($word, $count = 1) - { - $this->init(); - - if ($count != 1) { - return $word; - } - - $lowercased_word = strtolower($word); - foreach ($this->uncountable as $_uncountable) { - if (substr($lowercased_word, (-1*strlen($_uncountable))) == $_uncountable) { - return $word; - } - } - - foreach ($this->irregular as $_plural => $_singular) { - if (preg_match('/('.$_singular.')$/i', $word, $arr)) { - return preg_replace('/('.$_singular.')$/i', substr($arr[0], 0, 1).substr($_plural, 1), $word); - } - } - - foreach ($this->singular as $rule => $replacement) { - if (preg_match($rule, $word)) { - return preg_replace($rule, $replacement, $word); - } - } - - return $word; - } - - /** - * Converts an underscored or CamelCase word into a English - * sentence. - * - * The titleize public function converts text like "WelcomePage", - * "welcome_page" or "welcome page" to this "Welcome - * Page". - * If second parameter is set to 'first' it will only - * capitalize the first character of the title. - * - * @param string $word Word to format as tile - * @param string $uppercase If set to 'first' it will only uppercase the - * first character. Otherwise it will uppercase all - * the words in the title. - * @return string Text formatted as title - */ - public function titleize($word, $uppercase = '') - { - $uppercase = $uppercase == 'first' ? 'ucfirst' : 'ucwords'; - return $uppercase($this->humanize($this->underscorize($word))); - } - - /** - * Returns given word as CamelCased - * - * Converts a word like "send_email" to "SendEmail". It - * will remove non alphanumeric character from the word, so - * "who's online" will be converted to "WhoSOnline" - * - * @see variablize - * @param string $word Word to convert to camel case - * @return string UpperCamelCasedWord - */ - public function camelize($word) - { - return str_replace(' ', '', ucwords(preg_replace('/[^A-Z^a-z^0-9]+/', ' ', $word))); - } - - /** - * Converts a word "into_it_s_underscored_version" - * - * Convert any "CamelCased" or "ordinary Word" into an - * "underscored_word". - * - * This can be really useful for creating friendly URLs. - * - * @param string $word Word to underscore - * @return string Underscored word - */ - public function underscorize($word) - { - $regex1 = preg_replace('/([A-Z]+)([A-Z][a-z])/', '\1_\2', $word); - $regex2 = preg_replace('/([a-zd])([A-Z])/', '\1_\2', $regex1); - $regex3 = preg_replace('/[^A-Z^a-z^0-9]+/', '_', $regex2); - return strtolower($regex3); - } - - /** - * Converts a word "into-it-s-hyphenated-version" - * - * Convert any "CamelCased" or "ordinary Word" into an - * "hyphenated-word". - * - * This can be really useful for creating friendly URLs. - * - * @param string $word Word to hyphenate - * @return string hyphenized word - */ - public function hyphenize($word) - { - $regex1 = preg_replace('/([A-Z]+)([A-Z][a-z])/', '\1-\2', $word); - $regex2 = preg_replace('/([a-zd])([A-Z])/', '\1-\2', $regex1); - $regex3 = preg_replace('/[^A-Z^a-z^0-9]+/', '-', $regex2); - return strtolower($regex3); - } - - /** - * Returns a human-readable string from $word - * - * Returns a human-readable string from $word, by replacing - * underscores with a space, and by upper-casing the initial - * character by default. - * - * If you need to uppercase all the words you just have to - * pass 'all' as a second parameter. - * - * @param string $word String to "humanize" - * @param string $uppercase If set to 'all' it will uppercase all the words - * instead of just the first one. - * @return string Human-readable word - */ - public function humanize($word, $uppercase = '') - { - $uppercase = $uppercase == 'all' ? 'ucwords' : 'ucfirst'; - return $uppercase(str_replace('_', ' ', preg_replace('/_id$/', '', $word))); - } - - /** - * Same as camelize but first char is underscored - * - * Converts a word like "send_email" to "sendEmail". It - * will remove non alphanumeric character from the word, so - * "who's online" will be converted to "whoSOnline" - * - * @see camelize - * @param string $word Word to lowerCamelCase - * @return string Returns a lowerCamelCasedWord - */ - public function variablize($word) - { - $word = $this->camelize($word); - return strtolower($word[0]).substr($word, 1); - } - - /** - * Converts a class name to its table name according to rails - * naming conventions. - * - * Converts "Person" to "people" - * - * @see classify - * @param string $class_name Class name for getting related table_name. - * @return string plural_table_name - */ - public function tableize($class_name) - { - return $this->pluralize($this->underscore($class_name)); - } - - /** - * Converts a table name to its class name according to rails - * naming conventions. - * - * Converts "people" to "Person" - * - * @see tableize - * @param string $table_name Table name for getting related ClassName. - * @return string SingularClassName - */ - public function classify($table_name) - { - return $this->camelize($this->singularize($table_name)); - } - - /** - * Converts number to its ordinal English form. - * - * This method converts 13 to 13th, 2 to 2nd ... - * - * @param integer $number Number to get its ordinal value - * @return string Ordinal representation of given string. - */ - public function ordinalize($number) - { - $this->init(); - - if (in_array(($number % 100), range(11, 13))) { - return $number.$this->ordinals['default']; - } else { - switch (($number % 10)) { - case 1: - return $number.$this->ordinals['first']; - break; - case 2: - return $number.$this->ordinals['second']; - break; - case 3: - return $number.$this->ordinals['third']; - break; - default: - return $number.$this->ordinals['default']; - break; - } - } - } - - public function monthize($days) - { - $now = new \DateTime(); - $end = new \DateTime(); - - $duration = new \DateInterval("P{$days}D"); - - $diff = $end->add($duration)->diff($now); - - // handle years - if ($diff->y > 0) { - $diff->m = $diff->m + 12*$diff->y; - } - - return $diff->m; - } -} diff --git a/src/system/src/Grav/Common/Iterator.php b/src/system/src/Grav/Common/Iterator.php deleted file mode 100644 index d23f429..0000000 --- a/src/system/src/Grav/Common/Iterator.php +++ /dev/null @@ -1,218 +0,0 @@ -items[$key])) ? $this->items[$key] : null; - } - - /** - * Clone the iterator. - */ - public function __clone() - { - foreach ($this as $key => $value) { - if (is_object($value)) { - $this->$key = clone $this->$key; - } - } - } - - /** - * Convents iterator to a comma separated list. - * - * @return string - */ - public function __toString() - { - return implode(',', $this->items); - } - - /** - * Remove item from the list. - * - * @param $key - */ - public function remove($key) - { - $this->offsetUnset($key); - } - - /** - * Return previous item. - * - * @return mixed - */ - public function prev() - { - return prev($this->items); - } - - /** - * Return nth item. - * - * @param int $key - * @return mixed|bool - */ - public function nth($key) - { - $items = array_keys($this->items); - return (isset($items[$key])) ? $this->offsetGet($items[$key]) : false; - } - - /** - * Get the first item - * - * @return mixed - */ - public function first() - { - $items = array_keys($this->items); - return $this->offsetGet(array_shift($items)); - } - - /** - * Get the last item - * - * @return mixed - */ - public function last() - { - $items = array_keys($this->items); - return $this->offsetGet(array_pop($items)); - } - - /** - * Reverse the Iterator - * - * @return $this - */ - public function reverse() - { - $this->items = array_reverse($this->items); - return $this; - } - - /** - * @param mixed $needle Searched value. - * @return string|bool Key if found, otherwise false. - */ - public function indexOf($needle) - { - foreach (array_values($this->items) as $key => $value) { - if ($value === $needle) { - return $key; - } - } - return false; - } - - /** - * Shuffle items. - * - * @return $this - */ - public function shuffle() - { - $keys = array_keys($this->items); - shuffle($keys); - - $new = array(); - foreach ($keys as $key) { - $new[$key] = $this->items[$key]; - } - - $this->items = $new; - - return $this; - } - - /** - * Slice the list. - * - * @param int $offset - * @param int $length - * @return $this - */ - public function slice($offset, $length = null) - { - $this->items = array_slice($this->items, $offset, $length); - - return $this; - } - - /** - * Pick one or more random entries. - * - * @param int $num Specifies how many entries should be picked. - * @return $this - */ - public function random($num = 1) - { - $this->items = array_intersect_key($this->items, array_flip((array) array_rand($this->items, $num))); - - return $this; - } - - /** - * Append new elements to the list. - * - * @param array|Iterator $items Items to be appended. Existing keys will be overridden with the new values. - * @return $this - */ - public function append($items) - { - if ($items instanceof static) { - $items = $items->toArray(); - } - $this->items = array_merge($this->items, (array) $items); - - return $this; - } - - /** - * Filter elements from the list - * @param callable|null $callback A function the receives ($value, $key) and must return a boolean to indicate filter status - * @return $this - */ - public function filter(callable $callback = null) - { - foreach ($this->items as $key => $value) { - if ( - ($callback && !call_user_func($callback, $value, $key)) || - (!$callback && !(bool) $value) - ) { - unset($this->items[$key]); - } - } - - return $this; - } -} diff --git a/src/system/src/Grav/Common/Language/Language.php b/src/system/src/Grav/Common/Language/Language.php deleted file mode 100644 index 5dfe343..0000000 --- a/src/system/src/Grav/Common/Language/Language.php +++ /dev/null @@ -1,467 +0,0 @@ -grav = $grav; - $this->config = $grav['config']; - $this->languages = $this->config->get('system.languages.supported', []); - $this->init(); - } - - /** - * Initialize the default and enabled languages - */ - public function init() - { - $this->default = reset($this->languages); - - if (empty($this->languages)) { - $this->enabled = false; - } - } - - /** - * Ensure that languages are enabled - * - * @return bool - */ - public function enabled() - { - return $this->enabled; - } - - /** - * Gets the array of supported languages - * - * @return array - */ - public function getLanguages() - { - return $this->languages; - } - - /** - * Sets the current supported languages manually - * - * @param $langs - */ - public function setLanguages($langs) - { - $this->languages = $langs; - $this->init(); - } - - /** - * Gets a pipe-separated string of available languages - * - * @return string - */ - public function getAvailable() - { - $languagesArray = $this->languages; //Make local copy - sort($languagesArray); - return implode('|', array_reverse($languagesArray)); - } - - /** - * Gets language, active if set, else default - * - * @return mixed - */ - public function getLanguage() - { - return $this->active ? $this->active : $this->default; - } - - /** - * Gets current default language - * - * @return mixed - */ - public function getDefault() - { - return $this->default; - } - - /** - * Sets default language manually - * - * @param $lang - * - * @return bool - */ - public function setDefault($lang) - { - if ($this->validate($lang)) { - $this->default = $lang; - - return $lang; - } - - return false; - } - - /** - * Gets current active language - * - * @return mixed - */ - public function getActive() - { - return $this->active; - } - - /** - * Sets active language manually - * - * @param $lang - * - * @return bool - */ - public function setActive($lang) - { - if ($this->validate($lang)) { - $this->active = $lang; - - return $lang; - } - - return false; - } - - /** - * Sets the active language based on the first part of the URL - * - * @param $uri - * - * @return mixed - */ - public function setActiveFromUri($uri) - { - $regex = '/(^\/(' . $this->getAvailable() . '))(?:\/.*|$)/i'; - - // if languages set - if ($this->enabled()) { - // try setting from prefix of URL (/en/blah/blah) - if (preg_match($regex, $uri, $matches)) { - $this->lang_in_url = true; - $this->active = $matches[2]; - $uri = preg_replace("/\\" . $matches[1] . "/", '', $matches[0], 1); - - // store in session if different - if ($this->config->get('system.session.enabled', false) - && $this->config->get('system.languages.session_store_active', true) - && $this->grav['session']->active_language != $this->active - ) { - $this->grav['session']->active_language = $this->active; - } - } else { - // try getting from session, else no active - if ($this->config->get('system.session.enabled', false) && - $this->config->get('system.languages.session_store_active', true)) { - $this->active = $this->grav['session']->active_language ?: null; - } - // if still null, try from http_accept_language header - if ($this->active === null && $this->config->get('system.languages.http_accept_language')) { - $preferred = $this->getBrowserLanguages(); - foreach ($preferred as $lang) { - if ($this->validate($lang)) { - $this->active = $lang; - break; - } - } - - } - } - } - - return $uri; - } - - /** - * Get's a URL prefix based on configuration - * - * @param null $lang - * @return string - */ - public function getLanguageURLPrefix($lang = null) - { - // if active lang is not passed in, use current active - if (!$lang) { - $lang = $this->getLanguage(); - } - - return $this->isIncludeDefaultLanguage($lang) ? '/' . $lang : ''; - } - - /** - * Test to see if language is default and language should be included in the URL - * - * @param null $lang - * @return bool - */ - public function isIncludeDefaultLanguage($lang = null) - { - // if active lang is not passed in, use current active - if (!$lang) { - $lang = $this->getLanguage(); - } - - if ($this->default == $lang && $this->config->get('system.languages.include_default_lang') === false) { - return false; - } else { - return true; - } - } - - /** - * Simple getter to tell if a language was found in the URL - * - * @return bool - */ - public function isLanguageInUrl() - { - return (bool) $this->lang_in_url; - } - - - /** - * Gets an array of valid extensions with active first, then fallback extensions - * - * @return array - */ - public function getFallbackPageExtensions($file_ext = null) - { - if (empty($this->page_extensions)) { - if (empty($file_ext)) { - $file_ext = CONTENT_EXT; - } - - if ($this->enabled()) { - $valid_lang_extensions = []; - foreach ($this->languages as $lang) { - $valid_lang_extensions[] = '.' . $lang . $file_ext; - } - - if ($this->active) { - $active_extension = '.' . $this->active . $file_ext; - $key = array_search($active_extension, $valid_lang_extensions); - unset($valid_lang_extensions[$key]); - array_unshift($valid_lang_extensions, $active_extension); - } - - $this->page_extensions = array_merge($valid_lang_extensions, (array)$file_ext); - } else { - $this->page_extensions = (array)$file_ext; - } - } - - return $this->page_extensions; - } - - /** - * Gets an array of languages with active first, then fallback languages - * - * @return array - */ - public function getFallbackLanguages() - { - if (empty($this->fallback_languages)) { - if ($this->enabled()) { - $fallback_languages = $this->languages; - - if ($this->active) { - $active_extension = $this->active; - $key = array_search($active_extension, $fallback_languages); - unset($fallback_languages[$key]); - array_unshift($fallback_languages, $active_extension); - } - $this->fallback_languages = $fallback_languages; - } - // always add english in case a translation doesn't exist - $this->fallback_languages[] = 'en'; - } - - return $this->fallback_languages; - } - - /** - * Ensures the language is valid and supported - * - * @param $lang - * - * @return bool - */ - public function validate($lang) - { - if (in_array($lang, $this->languages)) { - return true; - } - - return false; - } - - /** - * Translate a key and possibly arguments into a string using current lang and fallbacks - * - * @param $args first argument is the lookup key value - * other arguments can be passed and replaced in the translation with sprintf syntax - * @param Array $languages - * @param bool $array_support - * @param bool $html_out - * - * @return string - */ - public function translate($args, Array $languages = null, $array_support = false, $html_out = false) - { - if (is_array($args)) { - $lookup = array_shift($args); - } else { - $lookup = $args; - $args = []; - } - - - if ($this->config->get('system.languages.translations', true)) { - if ($this->enabled() && $lookup) { - if (empty($languages)) { - if ($this->config->get('system.languages.translations_fallback', true)) { - $languages = $this->getFallbackLanguages(); - } else { - $languages = (array)$this->getDefault(); - } - } - } else { - $languages = ['en']; - } - - foreach ((array)$languages as $lang) { - $translation = $this->getTranslation($lang, $lookup, $array_support); - - if ($translation) { - if (count($args) >= 1) { - return vsprintf($translation, $args); - } else { - return $translation; - } - } - } - } - - if ($html_out) { - return '' . $lookup . ''; - } else { - return $lookup; - } - } - - /** - * Translate Array - * - * @param $key - * @param $index - * @param null $languages - * @param bool $html_out - * - * @return string - */ - public function translateArray($key, $index, $languages = null, $html_out = false) - { - if ($this->config->get('system.languages.translations', true)) { - if ($this->enabled() && $key) { - if (empty($languages)) { - if ($this->config->get('system.languages.translations_fallback', true)) { - $languages = $this->getFallbackLanguages(); - } else { - $languages = (array)$this->getDefault(); - } - } - } else { - $languages = ['en']; - } - - foreach ((array)$languages as $lang) { - $translation_array = (array)$this->config->getLanguages()->get($lang . '.' . $key, null); - if ($translation_array && array_key_exists($index, $translation_array)) { - return $translation_array[$index]; - } - } - } - - if ($html_out) { - return '' . $key . '[' . $index . ']'; - } else { - return $key . '[' . $index . ']'; - } - } - - /** - * Lookup the translation text for a given lang and key - * - * @param $lang lang code - * @param $key key to lookup with - * @param bool $array_support - * - * @return string - */ - public function getTranslation($lang, $key, $array_support = false) - { - $translation = $this->config->getLanguages()->get($lang . '.' . $key, null); - if (!$array_support && is_array($translation)) { - return (string)array_shift($translation); - } - - return $translation; - } - - public function getBrowserLanguages($accept_langs = []) - { - if (empty($this->http_accept_language)) { - if (empty($accept_langs) && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { - $accept_langs = $_SERVER['HTTP_ACCEPT_LANGUAGE']; - } else { - return $accept_langs; - } - - foreach (explode(',', $accept_langs) as $k => $pref) { - // split $pref again by ';q=' - // and decorate the language entries by inverted position - if (false !== ($i = strpos($pref, ';q='))) { - $langs[substr($pref, 0, $i)] = array((float)substr($pref, $i + 3), -$k); - } else { - $langs[$pref] = array(1, -$k); - } - } - arsort($langs); - - // no need to undecorate, because we're only interested in the keys - $this->http_accept_language = array_keys($langs); - } - return $this->http_accept_language; - } - -} diff --git a/src/system/src/Grav/Common/Language/LanguageCodes.php b/src/system/src/Grav/Common/Language/LanguageCodes.php deleted file mode 100644 index 2683c8b..0000000 --- a/src/system/src/Grav/Common/Language/LanguageCodes.php +++ /dev/null @@ -1,774 +0,0 @@ - [ - "name" => "Abkhaz", - "nativeName" => "аҧсуа" - ], - "aa" => [ - "name" => "Afar", - "nativeName" => "Afaraf" - ], - "af" => [ - "name" => "Afrikaans", - "nativeName" => "Afrikaans" - ], - "ak" => [ - "name" => "Akan", - "nativeName" => "Akan" - ], - "sq" => [ - "name" => "Albanian", - "nativeName" => "Shqip" - ], - "am" => [ - "name" => "Amharic", - "nativeName" => "አማርኛ" - ], - "ar" => [ - "name" => "Arabic", - "nativeName" => "العربية" - ], - "an" => [ - "name" => "Aragonese", - "nativeName" => "Aragonés" - ], - "hy" => [ - "name" => "Armenian", - "nativeName" => "Հայերեն" - ], - "as" => [ - "name" => "Assamese", - "nativeName" => "অসমীয়া" - ], - "av" => [ - "name" => "Avaric", - "nativeName" => "авар мацӀ" - ], - "ae" => [ - "name" => "Avestan", - "nativeName" => "avesta" - ], - "ay" => [ - "name" => "Aymara", - "nativeName" => "aymar aru" - ], - "az" => [ - "name" => "Azerbaijani", - "nativeName" => "azərbaycan dili" - ], - "bm" => [ - "name" => "Bambara", - "nativeName" => "bamanankan" - ], - "ba" => [ - "name" => "Bashkir", - "nativeName" => "башҡорт теле" - ], - "eu" => [ - "name" => "Basque", - "nativeName" => "euskara" - ], - "be" => [ - "name" => "Belarusian", - "nativeName" => "Беларуская" - ], - "bn" => [ - "name" => "Bengali", - "nativeName" => "বাংলা" - ], - "bh" => [ - "name" => "Bihari", - "nativeName" => "भोजपुरी" - ], - "bi" => [ - "name" => "Bislama", - "nativeName" => "Bislama" - ], - "bs" => [ - "name" => "Bosnian", - "nativeName" => "bosanski jezik" - ], - "br" => [ - "name" => "Breton", - "nativeName" => "brezhoneg" - ], - "bg" => [ - "name" => "Bulgarian", - "nativeName" => "български език" - ], - "my" => [ - "name" => "Burmese", - "nativeName" => "ဗမာစာ" - ], - "ca" => [ - "name" => "Catalan", - "nativeName" => "Català" - ], - "ch" => [ - "name" => "Chamorro", - "nativeName" => "Chamoru" - ], - "ce" => [ - "name" => "Chechen", - "nativeName" => "нохчийн мотт" - ], - "ny" => [ - "name" => "Chichewa", - "nativeName" => "chiCheŵa" - ], - "zh" => [ - "name" => "Chinese", - "nativeName" => "中文" - ], - "cv" => [ - "name" => "Chuvash", - "nativeName" => "чӑваш чӗлхи" - ], - "kw" => [ - "name" => "Cornish", - "nativeName" => "Kernewek" - ], - "co" => [ - "name" => "Corsican", - "nativeName" => "corsu" - ], - "cr" => [ - "name" => "Cree", - "nativeName" => "ᓀᐦᐃᔭᐍᐏᐣ" - ], - "hr" => [ - "name" => "Croatian", - "nativeName" => "hrvatski" - ], - "cs" => [ - "name" => "Czech", - "nativeName" => "česky" - ], - "da" => [ - "name" => "Danish", - "nativeName" => "dansk" - ], - "dv" => [ - "name" => "Divehi", - "nativeName" => "ދިވެހި" - ], - "nl" => [ - "name" => "Dutch", - "nativeName" => "Nederlands" - ], - "en" => [ - "name" => "English", - "nativeName" => "English" - ], - "eo" => [ - "name" => "Esperanto", - "nativeName" => "Esperanto" - ], - "et" => [ - "name" => "Estonian", - "nativeName" => "eesti" - ], - "ee" => [ - "name" => "Ewe", - "nativeName" => "Eʋegbe" - ], - "fo" => [ - "name" => "Faroese", - "nativeName" => "føroyskt" - ], - "fj" => [ - "name" => "Fijian", - "nativeName" => "vosa Vakaviti" - ], - "fi" => [ - "name" => "Finnish", - "nativeName" => "suomi" - ], - "fr" => [ - "name" => "French", - "nativeName" => "français" - ], - "ff" => [ - "name" => "Fula", - "nativeName" => "Fulfulde" - ], - "gl" => [ - "name" => "Galician", - "nativeName" => "Galego" - ], - "ka" => [ - "name" => "Georgian", - "nativeName" => "ქართული" - ], - "de" => [ - "name" => "German", - "nativeName" => "Deutsch" - ], - "el" => [ - "name" => "Greek", - "nativeName" => "Ελληνικά" - ], - "gn" => [ - "name" => "Guaraní", - "nativeName" => "Avañeẽ" - ], - "gu" => [ - "name" => "Gujarati", - "nativeName" => "ગુજરાતી" - ], - "ht" => [ - "name" => "Haitian", - "nativeName" => "Kreyòl ayisyen" - ], - "ha" => [ - "name" => "Hausa", - "nativeName" => "هَوُسَ" - ], - "he" => [ - "name" => "Hebrew", - "nativeName" => "עברית" - ], - "hz" => [ - "name" => "Herero", - "nativeName" => "Otjiherero" - ], - "hi" => [ - "name" => "Hindi", - "nativeName" => "हिन्दी" - ], - "ho" => [ - "name" => "Hiri Motu", - "nativeName" => "Hiri Motu" - ], - "hu" => [ - "name" => "Hungarian", - "nativeName" => "Magyar" - ], - "ia" => [ - "name" => "Interlingua", - "nativeName" => "Interlingua" - ], - "id" => [ - "name" => "Indonesian", - "nativeName" => "Bahasa Indonesia" - ], - "ie" => [ - "name" => "Interlingue", - "nativeName" => "Interlingue" - ], - "ga" => [ - "name" => "Irish", - "nativeName" => "Gaeilge" - ], - "ig" => [ - "name" => "Igbo", - "nativeName" => "Asụsụ Igbo" - ], - "ik" => [ - "name" => "Inupiaq", - "nativeName" => "Iñupiaq" - ], - "io" => [ - "name" => "Ido", - "nativeName" => "Ido" - ], - "is" => [ - "name" => "Icelandic", - "nativeName" => "Íslenska" - ], - "it" => [ - "name" => "Italian", - "nativeName" => "Italiano" - ], - "iu" => [ - "name" => "Inuktitut", - "nativeName" => "ᐃᓄᒃᑎᑐᑦ" - ], - "ja" => [ - "name" => "Japanese", - "nativeName" => "日本語" - ], - "jv" => [ - "name" => "Javanese", - "nativeName" => "basa Jawa" - ], - "kl" => [ - "name" => "Kalaallisut", - "nativeName" => "kalaallisut" - ], - "kn" => [ - "name" => "Kannada", - "nativeName" => "ಕನ್ನಡ" - ], - "kr" => [ - "name" => "Kanuri", - "nativeName" => "Kanuri" - ], - "ks" => [ - "name" => "Kashmiri", - "nativeName" => "कश्मीरी" - ], - "kk" => [ - "name" => "Kazakh", - "nativeName" => "Қазақ тілі" - ], - "km" => [ - "name" => "Khmer", - "nativeName" => "ភាសាខ្មែរ" - ], - "ki" => [ - "name" => "Kikuyu", - "nativeName" => "Gĩkũyũ" - ], - "rw" => [ - "name" => "Kinyarwanda", - "nativeName" => "Ikinyarwanda" - ], - "ky" => [ - "name" => "Kirghiz", - "nativeName" => "кыргыз тили" - ], - "kv" => [ - "name" => "Komi", - "nativeName" => "коми кыв" - ], - "kg" => [ - "name" => "Kongo", - "nativeName" => "KiKongo" - ], - "ko" => [ - "name" => "Korean", - "nativeName" => "한국어" - ], - "ku" => [ - "name" => "Kurdish", - "nativeName" => "كوردی‎" - ], - "kj" => [ - "name" => "Kwanyama", - "nativeName" => "Kuanyama" - ], - "la" => [ - "name" => "Latin", - "nativeName" => "latine" - ], - "lb" => [ - "name" => "Luxembourgish", - "nativeName" => "Lëtzebuergesch" - ], - "lg" => [ - "name" => "Luganda", - "nativeName" => "Luganda" - ], - "li" => [ - "name" => "Limburgish", - "nativeName" => "Limburgs" - ], - "ln" => [ - "name" => "Lingala", - "nativeName" => "Lingála" - ], - "lo" => [ - "name" => "Lao", - "nativeName" => "ພາສາລາວ" - ], - "lt" => [ - "name" => "Lithuanian", - "nativeName" => "lietuvių kalba" - ], - "lu" => [ - "name" => "Luba-Katanga", - "nativeName" => "Luba-Katanga" - ], - "lv" => [ - "name" => "Latvian", - "nativeName" => "latviešu valoda" - ], - "gv" => [ - "name" => "Manx", - "nativeName" => "Gaelg" - ], - "mk" => [ - "name" => "Macedonian", - "nativeName" => "македонски јазик" - ], - "mg" => [ - "name" => "Malagasy", - "nativeName" => "Malagasy fiteny" - ], - "ms" => [ - "name" => "Malay", - "nativeName" => "بهاس ملايو‎" - ], - "ml" => [ - "name" => "Malayalam", - "nativeName" => "മലയാളം" - ], - "mt" => [ - "name" => "Maltese", - "nativeName" => "Malti" - ], - "mi" => [ - "name" => "Māori", - "nativeName" => "te reo Māori" - ], - "mr" => [ - "name" => "Marathi", - "nativeName" => "मराठी" - ], - "mh" => [ - "name" => "Marshallese", - "nativeName" => "Kajin M̧ajeļ" - ], - "mn" => [ - "name" => "Mongolian", - "nativeName" => "монгол" - ], - "na" => [ - "name" => "Nauru", - "nativeName" => "Ekakairũ Naoero" - ], - "nv" => [ - "name" => "Navajo", - "nativeName" => "Diné bizaad" - ], - "nb" => [ - "name" => "Norwegian Bokmål", - "nativeName" => "Norsk bokmål" - ], - "nd" => [ - "name" => "North Ndebele", - "nativeName" => "isiNdebele" - ], - "ne" => [ - "name" => "Nepali", - "nativeName" => "नेपाली" - ], - "ng" => [ - "name" => "Ndonga", - "nativeName" => "Owambo" - ], - "nn" => [ - "name" => "Norwegian Nynorsk", - "nativeName" => "Norsk nynorsk" - ], - "no" => [ - "name" => "Norwegian", - "nativeName" => "Norsk" - ], - "ii" => [ - "name" => "Nuosu", - "nativeName" => "ꆈꌠ꒿ Nuosuhxop" - ], - "nr" => [ - "name" => "South Ndebele", - "nativeName" => "isiNdebele" - ], - "oc" => [ - "name" => "Occitan", - "nativeName" => "Occitan" - ], - "oj" => [ - "name" => "Ojibwe, Ojibwa", - "nativeName" => "ᐊᓂᔑᓈᐯᒧᐎᓐ" - ], - "cu" => [ - "name" => "Church Slavic", - "nativeName" => "ѩзыкъ словѣньскъ" - ], - "om" => [ - "name" => "Oromo", - "nativeName" => "Afaan Oromoo" - ], - "or" => [ - "name" => "Oriya", - "nativeName" => "ଓଡ଼ିଆ" - ], - "os" => [ - "name" => "Ossetian", - "nativeName" => "ирон æвзаг" - ], - "pa" => [ - "name" => "Panjabi", - "nativeName" => "ਪੰਜਾਬੀ" - ], - "pi" => [ - "name" => "Pāli", - "nativeName" => "पाऴि" - ], - "fa" => [ - "name" => "Persian", - "nativeName" => "فارسی" - ], - "pl" => [ - "name" => "Polish", - "nativeName" => "polski" - ], - "ps" => [ - "name" => "Pashto", - "nativeName" => "پښتو" - ], - "pt" => [ - "name" => "Portuguese", - "nativeName" => "Português" - ], - "qu" => [ - "name" => "Quechua", - "nativeName" => "Runa Simi" - ], - "rm" => [ - "name" => "Romansh", - "nativeName" => "rumantsch grischun" - ], - "rn" => [ - "name" => "Kirundi", - "nativeName" => "kiRundi" - ], - "ro" => [ - "name" => "Romanian", - "nativeName" => "română" - ], - "ru" => [ - "name" => "Russian", - "nativeName" => "Русский" - ], - "sa" => [ - "name" => "Sanskrit", - "nativeName" => "संस्कृतम्" - ], - "sc" => [ - "name" => "Sardinian", - "nativeName" => "sardu" - ], - "sd" => [ - "name" => "Sindhi", - "nativeName" => "सिन्धी" - ], - "se" => [ - "name" => "Northern Sami", - "nativeName" => "Davvisámegiella" - ], - "sm" => [ - "name" => "Samoan", - "nativeName" => "gagana faa Samoa" - ], - "sg" => [ - "name" => "Sango", - "nativeName" => "yângâ tî sängö" - ], - "sr" => [ - "name" => "Serbian", - "nativeName" => "српски језик" - ], - "gd" => [ - "name" => "Scottish Gaelic", - "nativeName" => "Gàidhlig" - ], - "sn" => [ - "name" => "Shona", - "nativeName" => "chiShona" - ], - "si" => [ - "name" => "Sinhala", - "nativeName" => "සිංහල" - ], - "sk" => [ - "name" => "Slovak", - "nativeName" => "slovenčina" - ], - "sl" => [ - "name" => "Slovene", - "nativeName" => "slovenščina" - ], - "so" => [ - "name" => "Somali", - "nativeName" => "Soomaaliga" - ], - "st" => [ - "name" => "Southern Sotho", - "nativeName" => "Sesotho" - ], - "es" => [ - "name" => "Spanish", - "nativeName" => "Español" - ], - "su" => [ - "name" => "Sundanese", - "nativeName" => "Basa Sunda" - ], - "sw" => [ - "name" => "Swahili", - "nativeName" => "Kiswahili" - ], - "ss" => [ - "name" => "Swati", - "nativeName" => "SiSwati" - ], - "sv" => [ - "name" => "Swedish", - "nativeName" => "svenska" - ], - "ta" => [ - "name" => "Tamil", - "nativeName" => "தமிழ்" - ], - "te" => [ - "name" => "Telugu", - "nativeName" => "తెలుగు" - ], - "tg" => [ - "name" => "Tajik", - "nativeName" => "тоҷикӣ" - ], - "th" => [ - "name" => "Thai", - "nativeName" => "ไทย" - ], - "ti" => [ - "name" => "Tigrinya", - "nativeName" => "ትግርኛ" - ], - "bo" => [ - "name" => "Tibetan", - "nativeName" => "བོད་ཡིག" - ], - "tk" => [ - "name" => "Turkmen", - "nativeName" => "Türkmen" - ], - "tl" => [ - "name" => "Tagalog", - "nativeName" => "Wikang Tagalog" - ], - "tn" => [ - "name" => "Tswana", - "nativeName" => "Setswana" - ], - "to" => [ - "name" => "Tonga", - "nativeName" => "faka Tonga" - ], - "tr" => [ - "name" => "Turkish", - "nativeName" => "Türkçe" - ], - "ts" => [ - "name" => "Tsonga", - "nativeName" => "Xitsonga" - ], - "tt" => [ - "name" => "Tatar", - "nativeName" => "татарча" - ], - "tw" => [ - "name" => "Twi", - "nativeName" => "Twi" - ], - "ty" => [ - "name" => "Tahitian", - "nativeName" => "Reo Tahiti" - ], - "ug" => [ - "name" => "Uighur", - "nativeName" => "Uyƣurqə" - ], - "uk" => [ - "name" => "Ukrainian", - "nativeName" => "українська" - ], - "ur" => [ - "name" => "Urdu", - "nativeName" => "اردو" - ], - "uz" => [ - "name" => "Uzbek", - "nativeName" => "zbek" - ], - "ve" => [ - "name" => "Venda", - "nativeName" => "Tshivenḓa" - ], - "vi" => [ - "name" => "Vietnamese", - "nativeName" => "Tiếng Việt" - ], - "vo" => [ - "name" => "Volapük", - "nativeName" => "Volapük" - ], - "wa" => [ - "name" => "Walloon", - "nativeName" => "Walon" - ], - "cy" => [ - "name" => "Welsh", - "nativeName" => "Cymraeg" - ], - "wo" => [ - "name" => "Wolof", - "nativeName" => "Wollof" - ], - "fy" => [ - "name" => "Western Frisian", - "nativeName" => "Frysk" - ], - "xh" => [ - "name" => "Xhosa", - "nativeName" => "isiXhosa" - ], - "yi" => [ - "name" => "Yiddish", - "nativeName" => "ייִדיש" - ], - "yo" => [ - "name" => "Yoruba", - "nativeName" => "Yorùbá" - ], - "za" => [ - "name" => "Zhuang", - "nativeName" => "Saɯ cueŋƅ" - ] - ]; - - public static function getName($code) - { - return static::get($code, 'name'); - } - - public static function getNativeName($code) - { - if (strlen($code) == 2) { - return static::get($code, 'nativeName'); - } else { - return static::get(substr($code, 0, 2), 'nativeName') . ' (' . substr($code, -2) . ')'; - } - } - - public static function getNames(array $keys) - { - $results = []; - foreach ($keys as $key) { - if (isset(static::$codes[$key])) { - $results[$key] = static::$codes[$key]; - } - - } - return $results; - } - - protected static function get($code, $type) - { - if (isset(static::$codes[$code][$type])) { - return static::$codes[$code][$type]; - } else { - return false; - } - } -} diff --git a/src/system/src/Grav/Common/Markdown/Parsedown.php b/src/system/src/Grav/Common/Markdown/Parsedown.php deleted file mode 100644 index f453a54..0000000 --- a/src/system/src/Grav/Common/Markdown/Parsedown.php +++ /dev/null @@ -1,13 +0,0 @@ -init($page, $defaults); - } - -} diff --git a/src/system/src/Grav/Common/Markdown/ParsedownExtra.php b/src/system/src/Grav/Common/Markdown/ParsedownExtra.php deleted file mode 100644 index 526e5f9..0000000 --- a/src/system/src/Grav/Common/Markdown/ParsedownExtra.php +++ /dev/null @@ -1,13 +0,0 @@ -init($page, $defaults); - } -} diff --git a/src/system/src/Grav/Common/Markdown/ParsedownGravTrait.php b/src/system/src/Grav/Common/Markdown/ParsedownGravTrait.php deleted file mode 100644 index 25da6ff..0000000 --- a/src/system/src/Grav/Common/Markdown/ParsedownGravTrait.php +++ /dev/null @@ -1,220 +0,0 @@ -page = $page; - $this->pages = self::getGrav()['pages']; - $this->BlockTypes['{'] [] = "TwigTag"; - $this->base_url = rtrim(self::getGrav()['base_url'] . self::getGrav()['pages']->base(), '/'); - $this->pages_dir = self::getGrav()['locator']->findResource('page://'); - $this->special_chars = array('>' => 'gt', '<' => 'lt', '"' => 'quot'); - - if ($defaults === null) { - $defaults = self::getGrav()['config']->get('system.pages.markdown'); - } - - $this->setBreaksEnabled($defaults['auto_line_breaks']); - $this->setUrlsLinked($defaults['auto_url_links']); - $this->setMarkupEscaped($defaults['escape_markup']); - $this->setSpecialChars($defaults['special_chars']); - } - - /** - * Make the element function publicly accessible, Medium uses this to render from Twig - * - * @param array $Element - * @return string markup - */ - public function elementToHtml(array $Element) - { - return $this->element($Element); - } - - /** - * Setter for special chars - * - * @param $special_chars - * - * @return $this - */ - function setSpecialChars($special_chars) - { - $this->special_chars = $special_chars; - - return $this; - } - - /** - * Ensure Twig tags are treated as block level items with no

tags - */ - protected function blockTwigTag($Line) - { - if (preg_match('/[{%|{{|{#].*[#}|}}|%}]/', $Line['body'], $matches)) { - $Block = array( - 'markup' => $Line['body'], - ); - return $Block; - } - } - - protected function inlineSpecialCharacter($Excerpt) - { - if ($Excerpt['text'][0] === '&' && ! preg_match('/^&#?\w+;/', $Excerpt['text'])) { - return array( - 'markup' => '&', - 'extent' => 1, - ); - } - - if (isset($this->special_chars[$Excerpt['text'][0]])) { - return array( - 'markup' => '&'.$this->special_chars[$Excerpt['text'][0]].';', - 'extent' => 1, - ); - } - } - - protected function inlineImage($excerpt) - { - if (preg_match($this->twig_link_regex, $excerpt['text'], $matches)) { - $excerpt['text'] = str_replace($matches[1], '/', $excerpt['text']); - $excerpt = parent::inlineImage($excerpt); - $excerpt['element']['attributes']['src'] = $matches[1]; - $excerpt['extent'] = $excerpt['extent'] + strlen($matches[1]) - 1; - return $excerpt; - } else { - $excerpt['type'] = 'image'; - $excerpt = parent::inlineImage($excerpt); - } - - // Some stuff we will need - $actions = array(); - $media = null; - - // if this is an image - if (isset($excerpt['element']['attributes']['src'])) { - $alt = $excerpt['element']['attributes']['alt'] ?: ''; - $title = $excerpt['element']['attributes']['title'] ?: ''; - $class = isset($excerpt['element']['attributes']['class']) ? $excerpt['element']['attributes']['class'] : ''; - - //get the url and parse it - $url = parse_url(htmlspecialchars_decode($excerpt['element']['attributes']['src'])); - - // if there is no host set but there is a path, the file is local - if (!isset($url['host']) && isset($url['path'])) { - $path_parts = pathinfo($url['path']); - - // get the local path to page media if possible - if ($path_parts['dirname'] == $this->page->url(false, false, false)) { - $url['path'] = urldecode($path_parts['basename']); - // get the media objects for this page - $media = $this->page->media(); - } else { - // see if this is an external page to this one - $page_route = str_replace($this->base_url, '', $path_parts['dirname']); - - $ext_page = $this->pages->dispatch($page_route, true); - if ($ext_page) { - $media = $ext_page->media(); - $url['path'] = urldecode($path_parts['basename']); - } - } - - // if there is a media file that matches the path referenced.. - if ($media && isset($media->all()[$url['path']])) { - // get the medium object - $medium = $media->all()[$url['path']]; - - // if there is a query, then parse it and build action calls - if (isset($url['query'])) { - $actions = array_reduce(explode('&', $url['query']), function ($carry, $item) { - $parts = explode('=', $item, 2); - $value = isset($parts[1]) ? $parts[1] : null; - $carry[] = [ 'method' => $parts[0], 'params' => $value ]; - - return $carry; - }, []); - } - - // loop through actions for the image and call them - foreach ($actions as $action) { - $medium = call_user_func_array(array($medium, $action['method']), explode(',', urldecode($action['params']))); - } - - if (isset($url['fragment'])) { - $medium->urlHash($url['fragment']); - } - - $excerpt['element'] = $medium->parseDownElement($title, $alt, $class); - - } else { - // not a current page media file, see if it needs converting to relative - $excerpt['element']['attributes']['src'] = Uri::buildUrl($url); - } - } - } - - return $excerpt; - } - - protected function inlineLink($excerpt) - { - if (isset($excerpt['type'])) { - $type = $excerpt['type']; - } else { - $type = 'link'; - } - - // do some trickery to get around Parsedown requirement for valid URL if its Twig in there - if (preg_match($this->twig_link_regex, $excerpt['text'], $matches)) { - $excerpt['text'] = str_replace($matches[1], '/', $excerpt['text']); - $excerpt = parent::inlineLink($excerpt); - $excerpt['element']['attributes']['href'] = $matches[1]; - $excerpt['extent'] = $excerpt['extent'] + strlen($matches[1]) - 1; - return $excerpt; - } else { - $excerpt = parent::inlineLink($excerpt); - } - - // if this is a link - if (isset($excerpt['element']['attributes']['href'])) { - $url = parse_url(htmlspecialchars_decode($excerpt['element']['attributes']['href'])); - - // if there is no scheme, the file is local - if (!isset($url['scheme']) && (count($url) > 0)) { - // convert the URl is required - $excerpt['element']['attributes']['href'] = Uri::convertUrl($this->page, Uri::buildUrl($url), $type); - } - } - - return $excerpt; - } -} diff --git a/src/system/src/Grav/Common/Page/Collection.php b/src/system/src/Grav/Common/Page/Collection.php deleted file mode 100644 index b5836bd..0000000 --- a/src/system/src/Grav/Common/Page/Collection.php +++ /dev/null @@ -1,458 +0,0 @@ -params = $params; - $this->pages = $pages ? $pages : Grav::instance()->offsetGet('pages'); - } - - public function params() - { - return $this->params; - } - - /** - * Add a single page to a collection - * - * @param Page $page - * @return $this - */ - public function addPage(Page $page) - { - $this->items[$page->path()] = ['slug' => $page->slug()]; - return $this; - } - - /** - * - * Create a copy of this collection - * - * @return static - */ - public function copy() - { - return new static($this->items, $this->params, $this->pages); - } - - /** - * Set parameters to the Collection - * - * @param array $params - * @return $this - */ - public function setParams(array $params) - { - $this->params = array_merge($this->params, $params); - return $this; - } - - /** - * Returns current page. - * - * @return Page - */ - public function current() - { - $current = parent::key(); - return $this->pages->get($current); - } - - /** - * Returns current slug. - * - * @return mixed - */ - public function key() - { - $current = parent::current(); - return $current['slug']; - } - - /** - * Returns the value at specified offset. - * - * @param mixed $offset The offset to retrieve. - * @return mixed Can return all value types. - */ - public function offsetGet($offset) - { - return !empty($this->items[$offset]) ? $this->pages->get($offset) : null; - } - - /** - * Remove item from the list. - * - * @param Page|string|null $key - * @return $this|void - * @throws \InvalidArgumentException - */ - public function remove($key = null) - { - if ($key instanceof Page) { - $key = $key->path(); - } elseif (is_null($key)) { - $key = key($this->items); - } - if (!is_string($key)) { - throw new \InvalidArgumentException('Invalid argument $key.'); - } - - parent::remove($key); - return $this; - } - - /** - * Reorder collection. - * - * @param string $by - * @param string $dir - * @param array $manual - * @return $this - */ - public function order($by, $dir = 'asc', $manual = null) - { - $this->items = $this->pages->sortCollection($this, $by, $dir, $manual); - - return $this; - } - - /** - * Check to see if this item is the first in the collection. - * - * @param string $path - * @return boolean True if item is first. - */ - public function isFirst($path) - { - if ($this->items && $path == array_keys($this->items)[0]) { - return true; - } else { - return false; - } - } - - /** - * Check to see if this item is the last in the collection. - * - * @param string $path - * @return boolean True if item is last. - */ - public function isLast($path) - { - if ($this->items && $path == array_keys($this->items)[count($this->items)-1]) { - return true; - } else { - return false; - } - } - - /** - * Gets the previous sibling based on current position. - * - * @param string $path - * @return Page The previous item. - */ - public function prevSibling($path) - { - return $this->adjacentSibling($path, -1); - } - - /** - * Gets the next sibling based on current position. - * - * @param string $path - * @return Page The next item. - */ - public function nextSibling($path) - { - return $this->adjacentSibling($path, 1); - } - - /** - * Returns the adjacent sibling based on a direction. - * - * @param string $path - * @param integer $direction either -1 or +1 - * @return Page The sibling item. - */ - public function adjacentSibling($path, $direction = 1) - { - $values = array_keys($this->items); - $keys = array_flip($values); - - if (array_key_exists($path, $keys)) { - $index = $keys[$path] - $direction; - - return isset($values[$index]) ? $this->offsetGet($values[$index]) : $this; - } - return $this; - - } - - /** - * Returns the item in the current position. - * - * @param string $path the path the item - * @return Page Item in the array the the current position. - */ - public function currentPosition($path) - { - return array_search($path, array_keys($this->items)); - } - - /** - * Returns the items between a set of date ranges of either the page date field (default) or - * an arbitrary datetime page field where end date is optional - * Dates can be passed in as text that strtotime() can process - * http://php.net/manual/en/function.strtotime.php - * - * @param $startDate - * @param bool $endDate - * @param $field - * - * @return $this - * @throws \Exception - */ - public function dateRange($startDate, $endDate = false, $field = false) - { - $start = Utils::date2timestamp($startDate); - $end = $endDate ? Utils::date2timestamp($endDate) : strtotime("now +1000 years"); - - $date_range = []; - - foreach ($this->items as $path => $slug) { - $page = $this->pages->get($path); - if ($page !== null) { - $date = $field ? strtotime($page->value($field)) : $page->date(); - - if ($date > $start && $date < $end) { - $date_range[$path] = $slug; - } - } - } - $this->items = $date_range; - return $this; - } - - /** - * Creates new collection with only visible pages - * - * @return Collection The collection with only visible pages - */ - public function visible() - { - $visible = []; - - foreach ($this->items as $path => $slug) { - $page = $this->pages->get($path); - if ($page !== null && $page->visible()) { - $visible[$path] = $slug; - } - } - $this->items = $visible; - return $this; - } - - /** - * Creates new collection with only non-visible pages - * - * @return Collection The collection with only non-visible pages - */ - public function nonVisible() - { - $visible = []; - - foreach ($this->items as $path => $slug) { - $page = $this->pages->get($path); - if ($page !== null && !$page->visible()) { - $visible[$path] = $slug; - } - } - $this->items = $visible; - return $this; - } - - /** - * Creates new collection with only modular pages - * - * @return Collection The collection with only modular pages - */ - public function modular() - { - $modular = []; - - foreach ($this->items as $path => $slug) { - $page = $this->pages->get($path); - if ($page !== null && $page->modular()) { - $modular[$path] = $slug; - } - } - $this->items = $modular; - return $this; - } - - /** - * Creates new collection with only non-modular pages - * - * @return Collection The collection with only non-modular pages - */ - public function nonModular() - { - $modular = []; - - foreach ($this->items as $path => $slug) { - $page = $this->pages->get($path); - if ($page !== null && !$page->modular()) { - $modular[$path] = $slug; - } - } - $this->items = $modular; - return $this; - } - - /** - * Creates new collection with only published pages - * - * @return Collection The collection with only published pages - */ - public function published() - { - $published = []; - - foreach ($this->items as $path => $slug) { - $page = $this->pages->get($path); - if ($page !== null && $page->published()) { - $published[$path] = $slug; - } - } - $this->items = $published; - return $this; - } - - /** - * Creates new collection with only non-published pages - * - * @return Collection The collection with only non-published pages - */ - public function nonPublished() - { - $published = []; - - foreach ($this->items as $path => $slug) { - $page = $this->pages->get($path); - if ($page !== null && !$page->published()) { - $published[$path] = $slug; - } - } - $this->items = $published; - return $this; - } - - /** - * Creates new collection with only routable pages - * - * @return Collection The collection with only routable pages - */ - public function routable() - { - $routable = []; - - foreach ($this->items as $path => $slug) { - $page = $this->pages->get($path); - - if ($page !== null && $page->routable()) { - $routable[$path] = $slug; - } - } - - $this->items = $routable; - return $this; - } - - /** - * Creates new collection with only non-routable pages - * - * @return Collection The collection with only non-routable pages - */ - public function nonRoutable() - { - $routable = []; - - foreach ($this->items as $path => $slug) { - $page = $this->pages->get($path); - if ($page !== null && !$page->routable()) { - $routable[$path] = $slug; - } - } - $this->items = $routable; - return $this; - } - - /** - * Creates new collection with only pages of the specified type - * - * @return Collection The collection - */ - public function ofType($type) - { - $items = []; - - foreach ($this->items as $path => $slug) { - $page = $this->pages->get($path); - if ($page !== null && $page->template() == $type) { - $items[$path] = $slug; - } - } - - $this->items = $items; - return $this; - } - - /** - * Creates new collection with only pages of one of the specified types - * - * @return Collection The collection - */ - public function ofOneOfTheseTypes($types) - { - $items = []; - - foreach ($this->items as $path => $slug) { - $page = $this->pages->get($path); - if ($page !== null && in_array($page->template(), $types)) { - $items[$path] = $slug; - } - } - - $this->items = $items; - return $this; - } - - - -} diff --git a/src/system/src/Grav/Common/Page/Header.php b/src/system/src/Grav/Common/Page/Header.php deleted file mode 100644 index 4be8262..0000000 --- a/src/system/src/Grav/Common/Page/Header.php +++ /dev/null @@ -1,11 +0,0 @@ -path = $path; - - $iterator = new \FilesystemIterator($path, \FilesystemIterator::UNIX_PATHS | \FilesystemIterator::SKIP_DOTS); - - $media = []; - - /** @var \DirectoryIterator $info */ - foreach ($iterator as $path => $info) { - // Ignore folders and Markdown files. - if (!$info->isFile() || $info->getExtension() == 'md' || $info->getBasename() === '.DS_Store') { - continue; - } - - // Find out what type we're dealing with - list($basename, $ext, $type, $extra) = $this->getFileParts($info->getFilename()); - - $media["{$basename}.{$ext}"] = isset($media["{$basename}.{$ext}"]) ? $media["{$basename}.{$ext}"] : []; - - if ($type === 'alternative') { - $media["{$basename}.{$ext}"][$type] = isset($media["{$basename}.{$ext}"][$type]) ? $media["{$basename}.{$ext}"][$type] : []; - $media["{$basename}.{$ext}"][$type][$extra] = [ 'file' => $path, 'size' => $info->getSize() ]; - } else { - $media["{$basename}.{$ext}"][$type] = [ 'file' => $path, 'size' => $info->getSize() ]; - } - } - - foreach ($media as $name => $types) { - // First prepare the alternatives in case there is no base medium - if (!empty($types['alternative'])) { - foreach ($types['alternative'] as $ratio => &$alt) { - $alt['file'] = MediumFactory::fromFile($alt['file']); - - if (!$alt['file']) { - unset($types['alternative'][$ratio]); - } else { - $alt['file']->set('size', $alt['size']); - } - } - } - - // Create the base medium - if (!empty($types['base'])) { - $medium = MediumFactory::fromFile($types['base']['file']); - $medium && $medium->set('size', $types['base']['size']); - } else if (!empty($types['alternative'])) { - $altMedium = reset($types['alternative']); - $ratio = key($types['alternative']); - - $altMedium = $altMedium['file']; - - $medium = MediumFactory::scaledFromMedium($altMedium, $ratio, 1)['file']; - } - - if (!$medium) { - continue; - } - - if (!empty($types['meta'])) { - $medium->addMetaFile($types['meta']['file']); - } - - if (!empty($types['thumb'])) { - // We will not turn it into medium yet because user might never request the thumbnail - // not wasting any resources on that, maybe we should do this for medium in general? - $medium->set('thumbnails.page', $types['thumb']['file']); - } - - // Build missing alternatives - if (!empty($types['alternative'])) { - $alternatives = $types['alternative']; - - $max = max(array_keys($alternatives)); - - for ($i=2; $i < $max; $i++) { - if (isset($alternatives[$i])) { - continue; - } - - $types['alternative'][$i] = MediumFactory::scaledFromMedium($alternatives[$max]['file'], $max, $i); - } - - foreach ($types['alternative'] as $ratio => $altMedium) { - $medium->addAlternative($ratio, $altMedium['file']); - } - } - - $this->add($name, $medium); - } - } - - /** - * Get medium by filename. - * - * @param string $filename - * @return Medium|null - */ - public function get($filename) - { - return isset($this->instances[$filename]) ? $this->instances[$filename] : null; - } - - /** - * Get a list of all media. - * - * @return array|Medium[] - */ - public function all() - { - ksort($this->instances, SORT_NATURAL | SORT_FLAG_CASE); - return $this->instances; - } - - /** - * Get a list of all image media. - * - * @return array|Medium[] - */ - public function images() - { - ksort($this->images, SORT_NATURAL | SORT_FLAG_CASE); - return $this->images; - } - - /** - * Get a list of all video media. - * - * @return array|Medium[] - */ - public function videos() - { - ksort($this->videos, SORT_NATURAL | SORT_FLAG_CASE); - return $this->videos; - } - - /** - * Get a list of all audio media. - * - * @return array|Medium[] - */ - public function audios() - { - ksort($this->audios, SORT_NATURAL | SORT_FLAG_CASE); - return $this->audios; - } - - /** - * Get a list of all file media. - * - * @return array|Medium[] - */ - public function files() - { - ksort($this->files, SORT_NATURAL | SORT_FLAG_CASE); - return $this->files; - } - - /** - * @internal - */ - protected function add($name, $file) - { - $this->instances[$name] = $file; - switch ($file->type) { - case 'image': - $this->images[$name] = $file; - break; - case 'video': - $this->videos[$name] = $file; - break; - case 'audio': - $this->audios[$name] = $file; - break; - default: - $this->files[$name] = $file; - } - } - - /** - * Get filename, extension and meta part. - * - * @param string $filename - * @return array - */ - protected function getFileParts($filename) - { - $fileParts = explode('.', $filename); - - $name = array_shift($fileParts); - $type = 'base'; - $extra = null; - - if (preg_match('/(.*)@(\d+)x\.(.*)$/', $filename, $matches)) { - $name = $matches[1]; - $extension = $matches[3]; - $extra = (int) $matches[2]; - $type = 'alternative'; - - if ($extra === 1) { - $type = 'base'; - $extra = null; - } - } else { - $extension = null; - while (($part = array_shift($fileParts)) !== null) { - if ($part != 'meta' && $part != 'thumb') { - if (isset($extension)) { - $name .= '.' . $extension; - } - $extension = $part; - } else { - $type = $part; - $extra = '.' . $part . '.' . implode('.', $fileParts); - break; - } - } - } - - return array($name, $extension, $type, $extra); - } -} diff --git a/src/system/src/Grav/Common/Page/Medium/AudioMedium.php b/src/system/src/Grav/Common/Page/Medium/AudioMedium.php deleted file mode 100644 index 0eaafd6..0000000 --- a/src/system/src/Grav/Common/Page/Medium/AudioMedium.php +++ /dev/null @@ -1,45 +0,0 @@ -url($reset); - - return [ - 'name' => 'audio', - 'text' => 'Your browser does not support the audio tag.', - 'attributes' => $attributes - ]; - } - - /** - * Reset medium. - * - * @return $this - */ - public function reset() - { - parent::reset(); - - $this->attributes['controls'] = true; - return $this; - } -} diff --git a/src/system/src/Grav/Common/Page/Medium/ImageFile.php b/src/system/src/Grav/Common/Page/Medium/ImageFile.php deleted file mode 100644 index bb9ce59..0000000 --- a/src/system/src/Grav/Common/Page/Medium/ImageFile.php +++ /dev/null @@ -1,84 +0,0 @@ -guessType(); - } - - if (!count($this->operations) && $type == $this->guessType() && !$this->forceCache) { - return $this->getFilename($this->getFilePath()); - } - - // Computes the hash - $this->hash = $this->getHash($type, $quality); - - // Generates the cache file - $cacheFile = ''; - - if (!$this->prettyName || $this->prettyPrefix) { - $cacheFile .= $this->hash; - } - - if ($this->prettyPrefix) { - $cacheFile .= '-'; - } - - if ($this->prettyName) { - $cacheFile .= $this->prettyName; - } - - $cacheFile .= '.'.$type; - - // If the files does not exists, save it - $image = $this; - - // Target file should be younger than all the current image - // dependencies - $conditions = array( - 'younger-than' => $this->getDependencies() - ); - - // The generating function - $generate = function ($target) use ($image, $type, $quality) { - $result = $image->save($target, $type, $quality); - - if ($result != $target) { - throw new GenerationError($result); - } - - self::getGrav()->fireEvent('onImageMediumSaved', new Event(['image' => $target])); - }; - - // Asking the cache for the cacheFile - try { - $file = $this->cache->getOrCreateFile($cacheFile, $conditions, $generate, $actual); - } catch (GenerationError $e) { - $file = $e->getNewFile(); - } - - if ($actual) { - return $file; - } else { - return $this->getFilename($file); - } - } -} diff --git a/src/system/src/Grav/Common/Page/Medium/ImageMedium.php b/src/system/src/Grav/Common/Page/Medium/ImageMedium.php deleted file mode 100644 index c38d8e8..0000000 --- a/src/system/src/Grav/Common/Page/Medium/ImageMedium.php +++ /dev/null @@ -1,473 +0,0 @@ - [ 0, 1 ], - 'forceResize' => [ 0, 1 ], - 'cropResize' => [ 0, 1 ], - 'crop' => [ 0, 1, 2, 3 ], - 'cropResize' => [ 0, 1 ], - 'zoomCrop' => [ 0, 1 ] - ]; - - /** - * @var array - */ - protected $derivatives = []; - - /** - * @var string - */ - protected $sizes = '100vw'; - - /** - * Construct. - * - * @param array $items - * @param Blueprint $blueprint - */ - public function __construct($items = [], Blueprint $blueprint = null) - { - parent::__construct($items, $blueprint); - - $config = self::$grav['config']; - - $image_info = getimagesize($this->get('filepath')); - $this->def('width', $image_info[0]); - $this->def('height', $image_info[1]); - $this->def('mime', $image_info['mime']); - $this->def('debug', $config->get('system.images.debug')); - - $this->set('thumbnails.media', $this->get('filepath')); - - $this->default_quality = $config->get('system.images.default_image_quality', 85); - - $this->reset(); - - if ($config->get('system.images.cache_all', false)) { - $this->cache(); - } - } - - /** - * Add meta file for the medium. - * - * @param $filepath - * @return $this - */ - public function addMetaFile($filepath) - { - parent::addMetaFile($filepath); - - // Apply filters in meta file - $this->reset(); - - return $this; - } - - /** - * Return PATH to image. - * - * @param bool $reset - * @return string path to image - */ - public function path($reset = true) - { - $output = $this->saveImage(); - - if ($reset) { - $this->reset(); - } - - return $output; - } - - /** - * Return URL to image. - * - * @param bool $reset - * @return string - */ - public function url($reset = true) - { - $output = preg_replace('|^' . GRAV_ROOT . '|', '', $this->saveImage()); - - if ($reset) { - $this->reset(); - } - - return self::$grav['base_url'] . $output . $this->querystring() . $this->urlHash(); - } - - /** - * Simply processes with no extra methods. Useful for triggering events. - * - * @return $this - */ - public function cache() - { - if (!$this->image) { - $this->image(); - } - return $this; - } - - - /** - * Return srcset string for this Medium and its alternatives. - * - * @param bool $reset - * @return string - */ - public function srcset($reset = true) - { - if (empty($this->alternatives) && empty($this->derivatives)) { - if ($reset) { - $this->reset(); - } - return ''; - } - - if (!empty($this->derivatives)) { - asort($this->derivatives); - - foreach ($this->derivatives as $url => $width) { - $srcset[] = $url . ' ' . $width . 'w'; - } - - $srcset[] = $this->url($reset) . ' ' . $this->get('width') . 'w'; - } - else { - $srcset = [ $this->url($reset) . ' ' . $this->get('width') . 'w' ]; - foreach ($this->alternatives as $ratio => $medium) { - $srcset[] = $medium->url($reset) . ' ' . $medium->get('width') . 'w'; - } - } - - return implode(', ', $srcset); - } - - /** - * Generate derivatives - * - * @param int $min_width - * @param int $max_width - * @param int $step - * @return $this - */ - public function derivatives($min_width, $max_width, $step = 200) { - $width = $min_width; - - // Do not upscale images. - if ($max_width > $this->get('width')) { - $max_width = $this->get('width'); - } - - while ($width <= $max_width) { - $ratio = $width / $this->get('width'); - $derivative = MediumFactory::scaledFromMedium($this, 1, $ratio); - if (is_array($derivative)) { - $this->addDerivative($derivative['file']); - } - $width += $step; - } - return $this; - } - - /** - * Add a derivative - * - * @param ImageMedium $image - */ - public function addDerivative(ImageMedium $image) { - $this->derivatives[$image->url()] = $image->get('width'); - } - - /** - * Parsedown element for source display mode - * - * @param array $attributes - * @param boolean $reset - * @return array - */ - public function sourceParsedownElement(array $attributes, $reset = true) - { - empty($attributes['src']) && $attributes['src'] = $this->url(false); - - $srcset = $this->srcset($reset); - if ($srcset) { - empty($attributes['srcset']) && $attributes['srcset'] = $srcset; - $attributes['sizes'] = $this->sizes(); - } - - return [ 'name' => 'img', 'attributes' => $attributes ]; - } - - /** - * Reset image. - * - * @return $this - */ - public function reset() - { - parent::reset(); - - if ($this->image) { - $this->image(); - $this->filter(); - } - - $this->format = 'guess'; - $this->quality = $this->default_quality; - - $this->debug_watermarked = false; - - return $this; - } - - /** - * Turn the current Medium into a Link - * - * @param boolean $reset - * @param array $attributes - * @return Link - */ - public function link($reset = true, array $attributes = []) - { - $attributes['href'] = $this->url(false); - $srcset = $this->srcset(false); - if ($srcset) { - $attributes['data-srcset'] = $srcset; - } - - return parent::link($reset, $attributes); - } - - /** - * Turn the current Medium into a Link with lightbox enabled - * - * @param int $width - * @param int $height - * @param boolean $reset - * @return Link - */ - public function lightbox($width = null, $height = null, $reset = true) - { - if ($this->mode !== 'source') { - $this->display('source'); - } - - if ($width && $height) { - $this->cropResize($width, $height); - } - - return parent::lightbox($width, $height, $reset); - } - - /** - * Sets the quality of the image - * - * @param int $quality 0-100 quality - * @return Medium - */ - public function quality($quality) - { - if (!$this->image) { - $this->image(); - } - - $this->quality = $quality; - return $this; - } - - /** - * Sets image output format. - * - * @param string $format - * @return $this - */ - public function format($format) - { - if (!$this->image) { - $this->image(); - } - - $this->format = $format; - return $this; - } - - /** - * Set or get sizes parameter for srcset media action - * - * @param string $sizes - * @return $this - */ - public function sizes($sizes = null) - { - - if ($sizes) { - $this->sizes = $sizes; - return $this; - } - - return empty($this->sizes) ? '100vw' : $this->sizes; - } - - /** - * Forward the call to the image processing method. - * - * @param string $method - * @param mixed $args - * @return $this|mixed - */ - public function __call($method, $args) - { - if ($method == 'cropZoom') { - $method = 'zoomCrop'; - } - - if (!in_array($method, self::$magic_actions)) { - return parent::__call($method, $args); - } - - // Always initialize image. - if (!$this->image) { - $this->image(); - } - - try { - call_user_func_array([$this->image, $method], $args); - - foreach ($this->alternatives as $ratio => $medium) { - $args_copy = $args; - - // regular image: resize 400x400 -> 200x200 - // --> @2x: resize 800x800->400x400 - if (isset(self::$magic_resize_actions[$method])) { - foreach (self::$magic_resize_actions[$method] as $param) { - if (isset($args_copy[$param])) { - $args_copy[$param] = (int) $args_copy[$param] * $ratio; - } - } - } - - call_user_func_array([$medium, $method], $args_copy); - } - } catch (\BadFunctionCallException $e) { - } - - return $this; - } - - /** - * Gets medium image, resets image manipulation operations. - * - * @return $this - */ - protected function image() - { - $locator = self::$grav['locator']; - - $file = $this->get('filepath'); - $cacheDir = $locator->findResource('cache://images', true); - - $this->image = ImageFile::open($file) - ->setCacheDir($cacheDir) - ->setActualCacheDir($cacheDir) - ->setPrettyName(basename($this->get('basename'))); - - $this->filter(); - - return $this; - } - - /** - * Save the image with cache. - * - * @return mixed|string - */ - protected function saveImage() - { - if (!$this->image) { - return parent::path(false); - } - - if (isset($this->result)) { - return $this->result; - } - - if ($this->get('debug') && !$this->debug_watermarked) { - $ratio = $this->get('ratio'); - if (!$ratio) { - $ratio = 1; - } - - $locator = self::$grav['locator']; - $overlay = $locator->findResource("system://assets/responsive-overlays/{$ratio}x.png") ?: $locator->findResource('system://assets/responsive-overlays/unknown.png'); - $this->image->merge(ImageFile::open($overlay)); - } - - return $this->image->cacheFile($this->format, $this->quality); - } - - /** - * Filter image by using user defined filter parameters. - * - * @param string $filter Filter to be used. - */ - public function filter($filter = 'image.filters.default') - { - $filters = (array) $this->get($filter, []); - foreach ($filters as $params) { - $params = (array) $params; - $method = array_shift($params); - $this->__call($method, $params); - } - } -} diff --git a/src/system/src/Grav/Common/Page/Medium/Link.php b/src/system/src/Grav/Common/Page/Medium/Link.php deleted file mode 100644 index a92ec22..0000000 --- a/src/system/src/Grav/Common/Page/Medium/Link.php +++ /dev/null @@ -1,65 +0,0 @@ -attributes = $attributes; - $this->source = $medium->reset()->thumbnail('auto')->display('thumbnail'); - $this->source->linked = true; - } - - /** - * Get an element (is array) that can be rendered by the Parsedown engine - * - * @param string $title - * @param string $alt - * @param string $class - * @param boolean $reset - * @return array - */ - public function parsedownElement($title = null, $alt = null, $class = null, $reset = true) - { - $innerElement = $this->source->parsedownElement($title, $alt, $class, $reset); - - return [ - 'name' => 'a', - 'attributes' => $this->attributes, - 'handler' => is_string($innerElement) ? 'line' : 'element', - 'text' => $innerElement - ]; - } - - /** - * Forward the call to the source element - * - * @param string $method - * @param mixed $args - * @return $this|mixed - */ - public function __call($method, $args) - { - $this->source = call_user_func_array(array($this->source, $method), $args); - - // Don't start nesting links, if user has multiple link calls in his - // actions, we will drop the previous links. - return $this->source instanceof Link ? $this->source : $this; - } -} diff --git a/src/system/src/Grav/Common/Page/Medium/Medium.php b/src/system/src/Grav/Common/Page/Medium/Medium.php deleted file mode 100644 index d3d3e62..0000000 --- a/src/system/src/Grav/Common/Page/Medium/Medium.php +++ /dev/null @@ -1,443 +0,0 @@ -get('system.media.enable_media_timestamp', true)) { - $this->querystring('&' . self::getGrav()['cache']->getKey()); - } - - $this->def('mime', 'application/octet-stream'); - $this->reset(); - } - - /** - * Return just metadata from the Medium object - * - * @return $this - */ - public function meta() - { - return new Data($this->items); - } - - /** - * Add meta file for the medium. - * - * @param $filepath - */ - public function addMetaFile($filepath) - { - $this->merge(CompiledYamlFile::instance($filepath)->content()); - } - - /** - * Add alternative Medium to this Medium. - * - * @param $ratio - * @param Medium $alternative - */ - public function addAlternative($ratio, Medium $alternative) - { - if (!is_numeric($ratio) || $ratio === 0) { - return; - } - - $alternative->set('ratio', $ratio); - $this->alternatives[(float) $ratio] = $alternative; - } - - /** - * Return string representation of the object (html). - * - * @return string - */ - public function __toString() - { - return $this->html(); - } - - /** - * Return PATH to file. - * - * @param bool $reset - * @return string path to file - */ - public function path($reset = true) - { - if ($reset) { - $this->reset(); - } - - return $this->get('filepath'); - } - - /** - * Return URL to file. - * - * @param bool $reset - * @return string - */ - public function url($reset = true) - { - $output = preg_replace('|^' . GRAV_ROOT . '|', '', $this->get('filepath')); - - if ($reset) { - $this->reset(); - } - - return self::$grav['base_url'] . $output . $this->querystring() . $this->urlHash(); - } - - /** - * Get/set querystring for the file's url - * - * @param string $hash - * @param boolean $withHash - * @return string - */ - public function querystring($querystring = null, $withQuestionmark = true) - { - if ($querystring) { - $this->set('querystring', ltrim($querystring, '?&')); - - foreach ($this->alternatives as $alt) { - $alt->querystring($querystring, $withQuestionmark); - } - } - - $querystring = $this->get('querystring', ''); - - if ($withQuestionmark && !empty($querystring)) { - return '?' . $querystring; - } else { - return $querystring; - } - } - - /** - * Get/set hash for the file's url - * - * @param string $hash - * @param boolean $withHash - * @return string - */ - public function urlHash($hash = null, $withHash = true) - { - if ($hash) { - $this->set('urlHash', ltrim($hash, '#')); - } - - $hash = $this->get('urlHash', ''); - - if ($withHash && !empty($hash)) { - return '#' . $hash; - } else { - return $hash; - } - } - - /** - * Get an element (is array) that can be rendered by the Parsedown engine - * - * @param string $title - * @param string $alt - * @param string $class - * @param boolean $reset - * @return array - */ - public function parsedownElement($title = null, $alt = null, $class = null, $reset = true) - { - $attributes = $this->attributes; - - $style = ''; - foreach ($this->styleAttributes as $key => $value) { - $style .= $key . ': ' . $value . ';'; - } - $attributes['style'] = $style; - - if (empty($attributes['title'])) { - if (!empty($title)) { - $attributes['title'] = $title; - } elseif (!empty($this->items['title'])) { - $attributes['title'] = $this->items['title']; - } - } - - if (empty($attributes['alt'])) { - if (!empty($alt)) { - $attributes['alt'] = $alt; - } elseif (!empty($this->items['alt'])) { - $attributes['alt'] = $this->items['alt']; - } - } - - if (empty($attributes['class'])) { - if (!empty($class)) { - $attributes['class'] = $class; - } elseif (!empty($this->items['class'])) { - $attributes['class'] = $this->items['class']; - } - } - - switch ($this->mode) { - case 'text': - $element = $this->textParsedownElement($attributes, false); - break; - case 'thumbnail': - $element = $this->getThumbnail()->sourceParsedownElement($attributes, false); - break; - case 'source': - $element = $this->sourceParsedownElement($attributes, false); - break; - } - - if ($reset) { - $this->reset(); - } - - $this->display('source'); - - return $element; - } - - /** - * Parsedown element for source display mode - * - * @param array $attributes - * @param boolean $reset - * @return array - */ - protected function sourceParsedownElement(array $attributes, $reset = true) - { - return $this->textParsedownElement($attributes, $reset); - } - - /** - * Parsedown element for text display mode - * - * @param array $attributes - * @param boolean $reset - * @return array - */ - protected function textParsedownElement(array $attributes, $reset = true) - { - $text = empty($attributes['title']) ? empty($attributes['alt']) ? $this->get('filename') : $attributes['alt'] : $attributes['title']; - - $element = [ - 'name' => 'p', - 'attributes' => $attributes, - 'text' => $text - ]; - - if ($reset) { - $this->reset(); - } - - return $element; - } - - /** - * Reset medium. - * - * @return $this - */ - public function reset() - { - $this->attributes = []; - return $this; - } - - /** - * Switch display mode. - * - * @param string $mode - * - * @return $this - */ - public function display($mode = 'source') - { - if ($this->mode === $mode) { - return $this; - } - - - $this->mode = $mode; - - return $mode === 'thumbnail' ? $this->getThumbnail()->reset() : $this->reset(); - } - - /** - * Switch thumbnail. - * - * @param string $type - * - * @return $this - */ - public function thumbnail($type = 'auto') - { - if ($type !== 'auto' && !in_array($type, $this->thumbnailTypes)) { - return $this; - } - - if ($this->thumbnailType !== $type) { - $this->_thumbnail = null; - } - - $this->thumbnailType = $type; - - return $this; - } - - /** - * Turn the current Medium into a Link - * - * @param boolean $reset - * @param array $attributes - * @return Link - */ - public function link($reset = true, array $attributes = []) - { - if ($this->mode !== 'source') { - $this->display('source'); - } - - foreach ($this->attributes as $key => $value) { - empty($attributes['data-' . $key]) && $attributes['data-' . $key] = $value; - } - - empty($attributes['href']) && $attributes['href'] = $this->url(); - - return new Link($attributes, $this); - } - - /** - * Turn the current Medium into a Link with lightbox enabled - * - * @param int $width - * @param int $height - * @param boolean $reset - * @return Link - */ - public function lightbox($width = null, $height = null, $reset = true) - { - $attributes = ['rel' => 'lightbox']; - - if ($width && $height) { - $attributes['data-width'] = $width; - $attributes['data-height'] = $height; - } - - return $this->link($reset, $attributes); - } - - /** - * Allow any action to be called on this medium from twig or markdown - * - * @param string $method - * @param mixed $args - * @return $this - */ - public function __call($method, $args) - { - $qs = $method; - if (count($args) > 1 || (count($args) == 1 && !empty($args[0]))) { - $qs .= '=' . implode(',', array_map(function ($a) { return urlencode($a); }, $args)); - } - - if (!empty($qs)) { - $this->querystring($this->querystring(null, false) . '&' . $qs); - } - - return $this; - } - - /** - * Get the thumbnail Medium object - * - * @return ThumbnailImageMedium - */ - protected function getThumbnail() - { - if (!$this->_thumbnail) { - $types = $this->thumbnailTypes; - - if ($this->thumbnailType !== 'auto') { - array_unshift($types, $this->thumbnailType); - } - - foreach ($types as $type) { - $thumb = $this->get('thumbnails.' . $type, false); - - if ($thumb) { - $thumb = $thumb instanceof ThumbnailImageMedium ? $thumb : MediumFactory::fromFile($thumb, ['type' => 'thumbnail']); - $thumb->parent = $this; - } - - if ($thumb) { - $this->_thumbnail = $thumb; - break; - } - } - } - - return $this->_thumbnail; - } -} diff --git a/src/system/src/Grav/Common/Page/Medium/MediumFactory.php b/src/system/src/Grav/Common/Page/Medium/MediumFactory.php deleted file mode 100644 index aa88db7..0000000 --- a/src/system/src/Grav/Common/Page/Medium/MediumFactory.php +++ /dev/null @@ -1,148 +0,0 @@ -get("media.".strtolower($ext)); - if (!$media_params) { - return null; - } - - $params += $media_params; - - // Add default settings for undefined variables. - $params += $config->get('media.defaults'); - $params += [ - 'type' => 'file', - 'thumb' => 'media/thumb.png', - 'mime' => 'application/octet-stream', - 'filepath' => $file, - 'filename' => $filename, - 'basename' => $basename, - 'extension' => $ext, - 'path' => $path, - 'modified' => filemtime($file), - 'thumbnails' => [] - ]; - - $locator = self::getGrav()['locator']; - - $lookup = $locator->findResources('image://'); - foreach ($lookup as $lookupPath) { - if (is_file($lookupPath . '/' . $params['thumb'])) { - $params['thumbnails']['default'] = $lookupPath . '/' . $params['thumb']; - break; - } - } - - return static::fromArray($params); - } - - /** - * Create Medium from array of parameters - * - * @param array $items - * @param Blueprint|null $blueprint - * @return Medium - */ - public static function fromArray(array $items = [], Blueprint $blueprint = null) - { - $type = isset($items['type']) ? $items['type'] : null; - - switch ($type) { - case 'image': - return new ImageMedium($items, $blueprint); - break; - case 'thumbnail': - return new ThumbnailImageMedium($items, $blueprint); - break; - case 'animated': - case 'vector': - return new StaticImageMedium($items, $blueprint); - break; - case 'video': - return new VideoMedium($items, $blueprint); - break; - case 'audio': - return new AudioMedium($items, $blueprint); - break; - default: - return new Medium($items, $blueprint); - break; - } - } - - /** - * Create a new ImageMedium by scaling another ImageMedium object. - * - * @param ImageMedium $medium - * @param int $from - * @param int $to - * @return Medium - */ - public static function scaledFromMedium($medium, $from, $to) - { - if (! $medium instanceof ImageMedium) { - return $medium; - } - - if ($to > $from) { - return $medium; - } - - $ratio = $to / $from; - $width = (int) ($medium->get('width') * $ratio); - $height = (int) ($medium->get('height') * $ratio); - - $basename = $medium->get('basename'); - $basename = str_replace('@'.$from.'x', '@'.$to.'x', $basename); - - $debug = $medium->get('debug'); - $medium->set('debug', false); - - $file = $medium->resize($width, $height)->path(); - - $medium->set('debug', $debug); - - $size = filesize($file); - - $medium = self::fromFile($file); - $medium->set('size', $size); - - return ['file' => $medium, 'size' => $size]; - } -} diff --git a/src/system/src/Grav/Common/Page/Medium/ParsedownHtmlTrait.php b/src/system/src/Grav/Common/Page/Medium/ParsedownHtmlTrait.php deleted file mode 100644 index 7052dea..0000000 --- a/src/system/src/Grav/Common/Page/Medium/ParsedownHtmlTrait.php +++ /dev/null @@ -1,31 +0,0 @@ -parsedownElement($title, $alt, $class, $reset); - - if (!$this->parsedown) { - $this->parsedown = new Parsedown(null, null); - } - - return $this->parsedown->elementToHtml($element); - } -} diff --git a/src/system/src/Grav/Common/Page/Medium/RenderableInterface.php b/src/system/src/Grav/Common/Page/Medium/RenderableInterface.php deleted file mode 100644 index f1ebf0d..0000000 --- a/src/system/src/Grav/Common/Page/Medium/RenderableInterface.php +++ /dev/null @@ -1,34 +0,0 @@ -url($reset); - - return [ 'name' => 'image', 'attributes' => $attributes ]; - } -} diff --git a/src/system/src/Grav/Common/Page/Medium/StaticResizeTrait.php b/src/system/src/Grav/Common/Page/Medium/StaticResizeTrait.php deleted file mode 100644 index df42dcf..0000000 --- a/src/system/src/Grav/Common/Page/Medium/StaticResizeTrait.php +++ /dev/null @@ -1,20 +0,0 @@ -styleAttributes['width'] = $width . 'px'; - $this->styleAttributes['height'] = $height . 'px'; - - return $this; - } -} diff --git a/src/system/src/Grav/Common/Page/Medium/ThumbnailImageMedium.php b/src/system/src/Grav/Common/Page/Medium/ThumbnailImageMedium.php deleted file mode 100644 index da63522..0000000 --- a/src/system/src/Grav/Common/Page/Medium/ThumbnailImageMedium.php +++ /dev/null @@ -1,121 +0,0 @@ -bubble('parsedownElement', [$title, $alt, $class, $reset]); - } - - /** - * Return HTML markup from the medium. - * - * @param string $title - * @param string $alt - * @param string $class - * @param bool $reset - * @return string - */ - public function html($title = null, $alt = null, $class = null, $reset = true) - { - return $this->bubble('html', [$title, $alt, $class, $reset]); - } - - /** - * Switch display mode. - * - * @param string $mode - * - * @return $this - */ - public function display($mode = 'source') - { - return $this->bubble('display', [$mode], false); - } - - /** - * Switch thumbnail. - * - * @param string $type - * - * @return $this - */ - public function thumbnail($type = 'auto') - { - $this->bubble('thumbnail', [$type], false); - return $this->bubble('getThumbnail', [], false); - } - - /** - * Turn the current Medium into a Link - * - * @param boolean $reset - * @param array $attributes - * @return Link - */ - public function link($reset = true, array $attributes = []) - { - return $this->bubble('link', [$reset, $attributes], false); - } - - /** - * Turn the current Medium into a Link with lightbox enabled - * - * @param int $width - * @param int $height - * @param boolean $reset - * @return Link - */ - public function lightbox($width = null, $height = null, $reset = true) - { - return $this->bubble('lightbox', [$width, $height, $reset], false); - } - - /** - * Bubble a function call up to either the superclass function or the parent Medium instance - * - * @param string $method - * @param array $arguments - * @param boolean $testLinked - * @return Medium - */ - protected function bubble($method, array $arguments = [], $testLinked = true) - { - if (!$testLinked || $this->linked) { - return $this->parent ? call_user_func_array(array($this->parent, $method), $arguments) : $this; - } else { - return call_user_func_array(array($this, 'parent::' . $method), $arguments); - } - } -} diff --git a/src/system/src/Grav/Common/Page/Medium/VideoMedium.php b/src/system/src/Grav/Common/Page/Medium/VideoMedium.php deleted file mode 100644 index acc9672..0000000 --- a/src/system/src/Grav/Common/Page/Medium/VideoMedium.php +++ /dev/null @@ -1,45 +0,0 @@ -url($reset); - - return [ - 'name' => 'video', - 'text' => 'Your browser does not support the video tag.', - 'attributes' => $attributes - ]; - } - - /** - * Reset medium. - * - * @return $this - */ - public function reset() - { - parent::reset(); - - $this->attributes['controls'] = true; - return $this; - } -} diff --git a/src/system/src/Grav/Common/Page/Page.php b/src/system/src/Grav/Common/Page/Page.php deleted file mode 100644 index f2c6ea2..0000000 --- a/src/system/src/Grav/Common/Page/Page.php +++ /dev/null @@ -1,2208 +0,0 @@ -taxonomy = array(); - $this->process = $config->get('system.pages.process'); - $this->published = true; - } - - /** - * Initializes the page instance variables based on a file - * - * @param \SplFileInfo $file The file information for the .md file that the page represents - * @param string $extension - */ - public function init(\SplFileInfo $file, $extension = null) - { - $this->filePath($file->getPathName()); - $this->modified($file->getMTime()); - $this->id($this->modified().md5($this->filePath())); - $this->routable(true); - $this->header(); - $this->date(); - $this->metadata(); - $this->url(); - $this->visible(); - $this->modularTwig($this->slug[0] == '_'); - $this->setPublishState(); - $this->published(); - - // some extension logic - if (empty($extension)) { - $this->extension('.'.$file->getExtension()); - } else { - $this->extension($extension); - } - - // extract page language from page extension - $language = trim(basename($this->extension(), 'md'), '.') ?: null; - $this->language($language); - } - - /** - * Return an array with the routes of other translated languages - * @return array the page translated languages - */ - public function translatedLanguages() - { - $filename = substr($this->name, 0, -(strlen($this->extension()))); - $config = self::getGrav()['config']; - $languages = $config->get('system.languages.supported', []); - $translatedLanguages = []; - - foreach ($languages as $language) { - $path = $this->path . DS . $this->folder . DS . $filename . '.' . $language .'.md'; - if (file_exists($path)) { - $aPage = new Page(); - $aPage->init(new \SplFileInfo($path), $language .'.md'); - - $route = isset($aPage->header()->routes['default']) ? $aPage->header()->routes['default'] : $aPage->rawRoute(); - if (!$route) $route = $aPage->slug(); - - $translatedLanguages[$language] = $route; - } - } - - return $translatedLanguages; - } - - /** - * Return an array listing untranslated languages available - * @return array the page untranslated languages - */ - public function untranslatedLanguages() - { - $filename = substr($this->name, 0, -(strlen($this->extension()))); - $config = self::getGrav()['config']; - $languages = $config->get('system.languages.supported', []); - $untranslatedLanguages = []; - - foreach ($languages as $language) { - $path = $this->path . DS . $this->folder . DS . $filename . '.' . $language .'.md'; - if (!file_exists($path)) { - $untranslatedLanguages[] = $language; - } - } - - return $untranslatedLanguages; - } - - /** - * Gets and Sets the raw data - * - * @param string $var Raw content string - * @return Object Raw content string - */ - public function raw($var = null) - { - $file = $this->file(); - - if ($var) { - // First update file object. - if ($file) { - $file->raw($var); - } - - // Reset header and content. - $this->modified = time(); - $this->id($this->modified().md5($this->filePath())); - $this->header = null; - $this->content = null; - $this->summary = null; - } - return $file ? $file->raw() : ''; - } - - public function frontmatter($var = null) - { - - if ($var) { - $this->frontmatter = (string) $var; - - // Update also file object. - $file = $this->file(); - if ($file) { - $file->frontmatter((string) $var); - } - - // Force content re-processing. - $this->id(time().md5($this->filePath())); - } - if (!$this->frontmatter) { - $this->header(); - } - return $this->frontmatter; - } - - /** - * Gets and Sets the header based on the YAML configuration at the top of the .md file - * - * @param object|array $var a YAML object representing the configuration for the file - * @return object the current YAML configuration - */ - public function header($var = null) - { - if ($var) { - $this->header = (object) $var; - - // Update also file object. - $file = $this->file(); - if ($file) { - $file->header((array) $var); - } - - // Force content re-processing. - $this->id(time().md5($this->filePath())); - } - if (!$this->header) { - $file = $this->file(); - if ($file) { - // Set some options - $file->settings(['native' => true, 'compat' => true]); - try { - $this->raw_content = $file->markdown(); - $this->frontmatter = $file->frontmatter(); - $this->header = (object)$file->header(); - } catch (ParseException $e) { - $file->raw(self::getGrav()['language']->translate(['FRONTMATTER_ERROR_PAGE', $this->slug(), $file->filename(), $e->getMessage(), $file->raw()])); - $this->raw_content = $file->markdown(); - $this->frontmatter = $file->frontmatter(); - $this->header = (object)$file->header(); - } - $var = true; - } - } - - if ($var) { - if (isset($this->header->slug)) { - $this->slug = trim($this->header->slug); - } - if (isset($this->header->routes)) { - $this->routes = (array)($this->header->routes); - } - if (isset($this->header->title)) { - $this->title = trim($this->header->title); - } - if (isset($this->header->language)) { - $this->language = trim($this->header->language); - } - if (isset($this->header->template)) { - $this->template = trim($this->header->template); - } - if (isset($this->header->menu)) { - $this->menu = trim($this->header->menu); - } - if (isset($this->header->routable)) { - $this->routable = (bool) $this->header->routable; - } - if (isset($this->header->visible)) { - $this->visible = (bool) $this->header->visible; - } - if (isset($this->header->redirect)) { - $this->redirect = trim($this->header->redirect); - } - if (isset($this->header->order_dir)) { - $this->order_dir = trim($this->header->order_dir); - } - if (isset($this->header->order_by)) { - $this->order_by = trim($this->header->order_by); - } - if (isset($this->header->order_manual)) { - $this->order_manual = (array)$this->header->order_manual; - } - if (isset($this->header->date)) { - $this->date($this->header->date); - } - if (isset($this->header->markdown_extra)) { - $this->markdown_extra = (bool)$this->header->markdown_extra; - } - if (isset($this->header->taxonomy)) { - foreach ((array) $this->header->taxonomy as $taxonomy => $taxitems) { - $this->taxonomy[$taxonomy] = (array)$taxitems; - } - } - if (isset($this->header->max_count)) { - $this->max_count = intval($this->header->max_count); - } - if (isset($this->header->process)) { - foreach ((array) $this->header->process as $process => $status) { - $this->process[$process] = (bool) $status; - } - } - if (isset($this->header->published)) { - $this->published = (bool) $this->header->published; - } - if (isset($this->header->publish_date)) { - $this->publishDate($this->header->publish_date); - } - if (isset($this->header->unpublish_date)) { - $this->unpublishDate($this->header->unpublish_date); - } - if (isset($this->header->expires)) { - $this->expires = intval($this->header->expires); - } - if (isset($this->header->etag)) { - $this->etag = (bool) $this->header->etag; - } - if (isset($this->header->last_modified)) { - $this->last_modified = (bool) $this->header->last_modified; - } - - } - - return $this->header; - } - - /** - * Get page language - * - * @param $var - * - * @return mixed - */ - public function language($var = null) - { - if ($var !== null) { - $this->language = $var; - } - - return $this->language; - } - - /** - * Modify a header value directly - * - * @param $key - * @param $value - */ - public function modifyHeader($key, $value) - { - $this->header->$key = $value; - } - - /** - * Get the summary. - * - * @param int $size Max summary size. - * @return string - */ - public function summary($size = null) - { - /** @var Config $config */ - $config = self::getGrav()['config']->get('site.summary'); - if (isset($this->header->summary)) { - $config = array_merge($config, $this->header->summary); - } - - // Return summary based on settings in site config file - if (!$config['enabled']) { - return $this->content(); - } - - // Set up variables to process summary from page or from custom summary - if ($this->summary === null) { - $content = $this->content(); - $summary_size = $this->summary_size; - } else { - $content = $this->summary; - $summary_size = mb_strlen($this->summary); - } - - // Return calculated summary based on summary divider's position - $format = $config['format']; - // Return entire page content on wrong/ unknown format - if (!in_array($format, array('short', 'long'))) { - return $content; - } elseif (($format === 'short') && isset($summary_size)) { - return mb_substr($content, 0, $summary_size); - } - - // Get summary size from site config's file - if (is_null($size)) { - $size = $config['size']; - } - - // If the size is zero, return the entire page content - if ($size === 0) { - return $content; - // Return calculated summary based on defaults - } elseif (!is_numeric($size) || ($size < 0)) { - $size = 300; - } - - return Utils::truncateHTML($content, $size); - } - - /** - * Sets the summary of the page - * - * @param string $var Summary - */ - public function setSummary($summary) - { - $this->summary = $summary; - } - - /** - * Gets and Sets the content based on content portion of the .md file - * - * @param string $var Content - * @return string Content - */ - public function content($var = null) - { - if ($var !== null) { - $this->raw_content = $var; - - // Update file object. - $file = $this->file(); - if ($file) { - $file->markdown($var); - } - - // Force re-processing. - $this->id(time().md5($this->filePath())); - $this->content = null; - } - // If no content, process it - if ($this->content === null) { - // Get media - $this->media(); - - // Load cached content - /** @var Cache $cache */ - $cache = self::getGrav()['cache']; - $cache_id = md5('page'.$this->id()); - $this->content = $cache->fetch($cache_id); - - $process_markdown = $this->shouldProcess('markdown'); - $process_twig = $this->shouldProcess('twig'); - $cache_twig = isset($this->header->cache_enable) ? $this->header->cache_enable : true; - $twig_first = isset($this->header->twig_first) ? $this->header->twig_first : false; - $twig_already_processed = false; - - // if no cached-content run everything - if ($this->content === false) { - $this->content = $this->raw_content; - self::getGrav()->fireEvent('onPageContentRaw', new Event(['page' => $this])); - - if ($twig_first) { - if ($process_twig) { - $this->processTwig(); - $twig_already_processed = true; - } - if ($process_markdown) { - $this->processMarkdown(); - } - if ($cache_twig) { - $this->cachePageContent(); - } - } else { - if ($process_markdown) { - $this->processMarkdown(); - } - if (!$cache_twig) { - $this->cachePageContent(); - } - if ($process_twig) { - $this->processTwig(); - $twig_already_processed = true; - } - if ($cache_twig) { - $this->cachePageContent(); - } - } - // content cached, but twig cache off - } - - // only markdown content cached, process twig if required and not already processed - if ($process_twig && !$cache_twig && !$twig_already_processed) { - $this->processTwig(); - } - - // Handle summary divider - $delimiter = self::getGrav()['config']->get('site.summary.delimiter', '==='); - $divider_pos = mb_strpos($this->content, "

{$delimiter}

"); - if ($divider_pos !== false) { - $this->summary_size = $divider_pos; - $this->content = str_replace("

{$delimiter}

", '', $this->content); - } - - } - - return $this->content; - } - - /** - * Process the Markdown content. Uses Parsedown or Parsedown Extra depending on configuration - */ - protected function processMarkdown() - { - /** @var Config $config */ - $config = self::getGrav()['config']; - - $defaults = (array) $config->get('system.pages.markdown'); - if (isset($this->header()->markdown)) { - $defaults = array_merge($defaults, $this->header()->markdown); - } - - // pages.markdown_extra is deprecated, but still check it... - if (!isset($defaults['extra']) && (isset($this->markdown_extra) || $config->get('system.pages.markdown_extra') !== null)) { - $defaults['extra'] = $this->markdown_extra ?: $config->get('system.pages.markdown_extra'); - } - - // Initialize the preferred variant of Parsedown - if ($defaults['extra']) { - $parsedown = new ParsedownExtra($this, $defaults); - } else { - $parsedown = new Parsedown($this, $defaults); - } - - $this->content = $parsedown->text($this->content); - } - - - /** - * Process the Twig page content. - */ - private function processTwig() - { - $twig = self::getGrav()['twig']; - $this->content = $twig->processPage($this, $this->content); - } - - /** - * Fires the onPageContentProcessed event, and caches the page content using a unique ID for the page - */ - private function cachePageContent() - { - $cache = self::getGrav()['cache']; - $cache_id = md5('page'.$this->id()); - - self::getGrav()->fireEvent('onPageContentProcessed', new Event(['page' => $this])); - $cache->save($cache_id, $this->content); - } - - /** - * Needed by the onPageContentProcessed event to get the raw page content - * - * @return string the current page content - */ - public function getRawContent() - { - return $this->content; - } - - /** - * Needed by the onPageContentProcessed event to set the raw page content - * - * @param $content - */ - public function setRawContent($content) - { - $this->content = $content; - } - - /** - * Get value from a page variable (used mostly for creating edit forms). - * - * @param string $name Variable name. - * @param mixed $default - * @return mixed - */ - public function value($name, $default = null) - { - if ($name == 'content') { - return $this->raw_content; - } - if ($name == 'route') { - return $this->parent()->rawRoute(); - } - if ($name == 'order') { - $order = $this->order(); - return $order ? (int) $this->order() : ''; - } - if ($name == 'ordering') { - return (bool) $this->order(); - } - if ($name == 'folder') { - $regex = '/^[0-9]+\./u'; - return preg_replace($regex, '', $this->folder); - } - if ($name == 'name') { - $language = $this->language() ? '.' . $this->language() : ''; - $name_val = str_replace($language .'.md', '', $this->name()); - if ($this->modular()) { - return 'modular/' . $name_val; - } - return $name_val; - } - if ($name == 'media') { - return $this->media()->all(); - } - if ($name == 'media.file') { - return $this->media()->files(); - } - if ($name == 'media.video') { - return $this->media()->videos(); - } - if ($name == 'media.image') { - return $this->media()->images(); - } - if ($name == 'media.audio') { - return $this->media()->audios(); - } - - $path = explode('.', $name); - $scope = array_shift($path); - - if ($name == 'frontmatter') { - return $this->frontmatter; - } - - if ($scope == 'header') { - $current = $this->header(); - foreach ($path as $field) { - if (is_object($current) && isset($current->{$field})) { - $current = $current->{$field}; - } elseif (is_array($current) && isset($current[$field])) { - $current = $current[$field]; - } else { - return $default; - } - } - - return $current; - } - - return $default; - } - - public function rawMarkdown($var = null) - { - if ($var !== null) { - $this->raw_content = $var; - } - - return $this->raw_content; - } - - /** - * Get file object to the page. - * - * @return MarkdownFile|null - */ - public function file() - { - if ($this->name) { - return MarkdownFile::instance($this->filePath()); - } - return null; - } - - /** - * Save page if there's a file assigned to it. - * @param bool $reorder Internal use. - */ - public function save($reorder = true) - { - // Perform move, copy or reordering if needed. - $this->doRelocation($reorder); - - $file = $this->file(); - if ($file) { - $file->filename($this->filePath()); - $file->header((array) $this->header()); - $file->markdown($this->raw_content); - $file->save(); - } - } - - /** - * Prepare move page to new location. Moves also everything that's under the current page. - * - * You need to call $this->save() in order to perform the move. - * - * @param Page $parent New parent page. - * @return Page - */ - public function move(Page $parent) - { - $clone = clone $this; - $clone->_action = 'move'; - $clone->_original = $this; - $clone->parent($parent); - $clone->id(time().md5($clone->filePath())); - - if ($parent->path()) { - $clone->path($parent->path() . '/' . $clone->folder()); - } - - if ($parent->route()) { - $clone->route($parent->route() . '/'. $clone->slug()); - } else { - $clone->route(self::getGrav()['pages']->root()->route() . '/'. $clone->slug()); - } - - return $clone; - } - - /** - * Prepare a copy from the page. Copies also everything that's under the current page. - * - * Returns a new Page object for the copy. - * You need to call $this->save() in order to perform the move. - * - * @param Page $parent New parent page. - * @return Page - */ - public function copy($parent) - { - $clone = $this->move($parent); - $clone->_action = 'copy'; - - return $clone; - } - - /** - * Get blueprints for the page. - * - * @return Blueprint - */ - public function blueprints() - { - /** @var Pages $pages */ - $pages = self::getGrav()['pages']; - - $blueprint = $pages->blueprints($this->blueprintName()); - $fields = $blueprint->fields(); - $edit_mode = isset(self::getGrav()['admin']) ? self::getGrav()['config']->get('plugins.admin.edit_mode') : null; - - // override if you only want 'normal' mode - if (empty($fields) && ($edit_mode == 'auto' || $edit_mode == 'normal')) { - $blueprint = $pages->blueprints('default'); - } - - // override if you only want 'expert' mode - if (!empty($fields) && $edit_mode == 'expert') { - $blueprint = $pages->blueprints(''); - } - - return $blueprint; - } - - /** - * Get the blueprint name for this page. Use the blueprint form field if set - * - * @return string - */ - public function blueprintName() - { - $blueprint_name = filter_input(INPUT_POST, 'blueprint', FILTER_SANITIZE_STRING) ?: $this->template(); - - return $blueprint_name; - } - - /** - * Validate page header. - * - * @throws Exception - */ - public function validate() - { - $blueprints = $this->blueprints(); - $blueprints->validate($this->toArray()); - } - - /** - * Filter page header from illegal contents. - */ - public function filter() - { - $blueprints = $this->blueprints(); - $values = $blueprints->filter($this->toArray()); - if ($values && isset($values['header'])) { - $this->header($values['header']); - } - } - - /** - * Get unknown header variables. - * - * @return array - */ - public function extra() - { - $blueprints = $this->blueprints(); - return $blueprints->extra($this->toArray()['header'], 'header.'); - } - - /** - * Convert page to an array. - * - * @return array - */ - public function toArray() - { - return array( - 'header' => (array) $this->header(), - 'content' => (string) $this->value('content') - ); - } - - /** - * Convert page to YAML encoded string. - * - * @return string - */ - public function toYaml() - { - return Yaml::dump($this->toArray(), 10); - } - - /** - * Convert page to JSON encoded string. - * - * @return string - */ - public function toJson() - { - return json_encode($this->toArray()); - } - - /** - * Gets and sets the associated media as found in the page folder. - * - * @param Media $var Representation of associated media. - * @return Media Representation of associated media. - */ - public function media($var = null) - { - /** @var Cache $cache */ - $cache = self::getGrav()['cache']; - - if ($var) { - $this->media = $var; - } - if ($this->media === null) { - // Use cached media if possible. - $media_cache_id = md5('media'.$this->id()); - if (!$media = $cache->fetch($media_cache_id)) { - $media = new Media($this->path()); - $cache->save($media_cache_id, $media); - } - $this->media = $media; - } - return $this->media; - } - - /** - * Gets and sets the name field. If no name field is set, it will return 'default.md'. - * - * @param string $var The name of this page. - * @return string The name of this page. - */ - public function name($var = null) - { - if ($var !== null) { - $this->name = $var; - } - return empty($this->name) ? 'default.md' : $this->name; - } - - /** - * Returns child page type. - * - * @return string - */ - public function childType() - { - return isset($this->header->child_type) ? (string) $this->header->child_type : 'default'; - } - - /** - * Gets and sets the template field. This is used to find the correct Twig template file to render. - * If no field is set, it will return the name without the .md extension - * - * @param string $var the template name - * @return string the template name - */ - public function template($var = null) - { - if ($var !== null) { - $this->template = $var; - } - if (empty($this->template)) { - $this->template = ($this->modular() ? 'modular/' : '') . str_replace($this->extension(), '', $this->name()); - } - return $this->template; - } - - /** - * Gets and sets the extension field. - * - * @param null $var - * @return null|string - */ - public function extension($var = null) - { - if ($var !== null) { - $this->extension = $var; - } - if (empty($this->extension)) { - $this->extension = '.' . pathinfo($this->name(), PATHINFO_EXTENSION); - } - return $this->extension; - } - - /** - * Gets and sets the expires field. If not set will return the default - * - * @param string $var The name of this page. - * @return string The name of this page. - */ - public function expires($var = null) - { - if ($var !== null) { - $this->expires = $var; - } - return empty($this->expires) ? self::getGrav()['config']->get('system.pages.expires') : $this->expires; - } - - /** - * Gets and sets the title for this Page. If no title is set, it will use the slug() to get a name - * - * @param string $var the title of the Page - * @return string the title of the Page - */ - public function title($var = null) - { - if ($var !== null) { - $this->title = $var; - } - if (empty($this->title)) { - $this->title = ucfirst($this->slug()); - } - return $this->title; - } - - /** - * Gets and sets the menu name for this Page. This is the text that can be used specifically for navigation. - * If no menu field is set, it will use the title() - * - * @param string $var the menu field for the page - * @return string the menu field for the page - */ - public function menu($var = null) - { - if ($var !== null) { - $this->menu = $var; - } - if (empty($this->menu)) { - $this->menu = $this->title(); - } - return $this->menu; - } - - /** - * Gets and Sets whether or not this Page is visible for navigation - * - * @param bool $var true if the page is visible - * @return bool true if the page is visible - */ - public function visible($var = null) - { - if ($var !== null) { - $this->visible = (bool) $var; - } - - if ($this->visible === null) { - // Set item visibility in menu if folder is different from slug - // eg folder = 01.Home and slug = Home - $regex = '/^[0-9]+\./u'; - if (preg_match($regex, $this->folder)) { - $this->visible = true; - } else { - $this->visible = false; - } - } - return $this->visible; - } - - /** - * Gets and Sets whether or not this Page is considered published - * - * @param bool $var true if the page is published - * @return bool true if the page is published - */ - public function published($var = null) - { - if ($var !== null) { - $this->published = (bool) $var; - } - - // If not published, should not be visible in menus either - if ($this->published === false) { - $this->visible = false; - } - - return $this->published; - } - - /** - * Gets and Sets the Page publish date - * - * @param string $var string representation of a date - * @return int unix timestamp representation of the date - */ - public function publishDate($var = null) - { - if ($var !== null) { - $this->publish_date = Utils::date2timestamp($var); - } - - if ($this->publish_date === null) { - $this->publish_date = $this->date(); - } - - return $this->publish_date; - } - - /** - * Gets and Sets the Page unpublish date - * - * @param string $var string representation of a date - * @return int|null unix timestamp representation of the date - */ - public function unpublishDate($var = null) - { - if ($var !== null) { - $this->unpublish_date = Utils::date2timestamp($var); - } - - return $this->unpublish_date; - } - - /** - * Gets and Sets whether or not this Page is routable, ie you can reach it - * via a URL. - * The page must be *routable* and *published* - * - * @param bool $var true if the page is routable - * @return bool true if the page is routable - */ - public function routable($var = null) - { - if ($var !== null) { - $this->routable = (bool) $var; - } - - return $this->routable && $this->published(); - } - - /** - * Gets and Sets the process setup for this Page. This is multi-dimensional array that consists of - * a simple array of arrays with the form array("markdown"=>true) for example - * - * @param array $var an Array of name value pairs where the name is the process and value is true or false - * @return array an Array of name value pairs where the name is the process and value is true or false - */ - public function process($var = null) - { - if ($var !== null) { - $this->process = (array) $var; - } - return $this->process; - } - - /** - * Function to merge page metadata tags and build an array of Metadata objects - * that can then be rendered in the page. - * - * @param array $var an Array of metadata values to set - * @return array an Array of metadata values for the page - */ - public function metadata($var = null) - { - if ($var !== null) { - $this->metadata = (array) $var; - } - - // if not metadata yet, process it. - if (null === $this->metadata) { - $header_tag_http_equivs = ['content-type', 'default-style', 'refresh']; - - $this->metadata = []; - - // Set the Generator tag - $this->metadata['generator'] = array('name'=>'generator', 'content'=>'GravCMS ' . GRAV_VERSION); - - // Get initial metadata for the page - $metadata = self::getGrav()['config']->get('site.metadata'); - - if (isset($this->header->metadata)) { - // Merge any site.metadata settings in with page metadata - $metadata = array_merge($metadata, $this->header->metadata); - } - - // Build an array of meta objects.. - foreach ((array)$metadata as $key => $value) { - // If this is a property type metadata: "og", "twitter", "facebook" etc - if (is_array($value)) { - foreach ($value as $property => $prop_value) { - $prop_key = $key.":".$property; - $this->metadata[$prop_key] = array('property'=>$prop_key, 'content'=>htmlspecialchars($prop_value, ENT_QUOTES)); - } - // If it this is a standard meta data type - } else { - if (in_array($key, $header_tag_http_equivs)) { - $this->metadata[$key] = array('http_equiv'=>$key, 'content'=>htmlspecialchars($value, ENT_QUOTES)); - } else { - $this->metadata[$key] = array('name'=>$key, 'content'=>htmlspecialchars($value, ENT_QUOTES)); - } - } - } - } - - return $this->metadata; - } - - /** - * Gets and Sets the slug for the Page. The slug is used in the URL routing. If not set it uses - * the parent folder from the path - * - * @param string $var the slug, e.g. 'my-blog' - * @return string the slug - */ - public function slug($var = null) - { - if ($var !== null) { - $this->slug = $var; - } - - if (empty($this->slug)) { - $this->slug = preg_replace(PAGE_ORDER_PREFIX_REGEX, '', $this->folder); - } - - return $this->slug; - } - - /** - * Get/set order number of this page. - * - * @param int $var - * @return int|bool - */ - public function order($var = null) - { - if ($var !== null) { - $order = !empty($var) ? sprintf('%02d.', (int)$var) : ''; - $this->folder($order . $this->slug()); - } - preg_match(PAGE_ORDER_PREFIX_REGEX, $this->folder, $order); - - return isset($order[0]) ? $order[0] : false; - } - - /** - * Gets the URL with host information, aka Permalink. - * @return string The permalink. - */ - public function permalink() - { - return $this->url(true); - } - - /** - * Gets the URL for a page - alias of url(). - * - * @param bool $include_host - * @return string the permalink - */ - public function link($include_host = false) - { - return $this->url($include_host); - } - - /** - * Gets the url for the Page. - * - * @param bool $include_host Defaults false, but true would include http://yourhost.com - * @param bool $canonical true to return the canonical URL - * - * @return string The url. - */ - public function url($include_host = false, $canonical = false, $include_lang = true) - { - - /** @var Pages $pages */ - $pages = self::getGrav()['pages']; - - /** @var Language $language */ - $language = self::getGrav()['language']; - - // get pre-route - if ($include_lang && $language->enabled()) { - $pre_route = $language->getLanguageURLPrefix(); - } else { - $pre_route = ''; - } - - // get canonical route if requested - if ($canonical) { - $route = $pre_route . $this->routeCanonical(); - } else { - $route = $pre_route . $this->route(); - } - - /** @var Uri $uri */ - $uri = self::getGrav()['uri']; - - $rootUrl = $uri->rootUrl($include_host) . $pages->base(); - - $url = $rootUrl.'/'.trim($route, '/'); - - // trim trailing / if not root - if ($url !== '/') { - $url = rtrim($url, '/'); - } - - return $url; - } - - /** - * Gets the route for the page based on the route headers if available, else from - * the parents route and the current Page's slug. - * - * @param string $var Set new default route. - * - * @return string The route for the Page. - */ - public function route($var = null) - { - if ($var !== null) { - $this->route = $var; - } - - if (empty($this->route)) { - // calculate route based on parent slugs - $baseRoute = $this->parent ? (string) $this->parent()->route() : null; - $this->route = isset($baseRoute) ? $baseRoute . '/'. $this->slug() : null; - - if (!empty($this->routes) && isset($this->routes['default'])) { - $this->routes['aliases'][] = $this->route; - $this->route = $this->routes['default']; - return $this->route; - } - } - - return $this->route; - } - - /** - * Helper method to clear the route out so it regenerates next time you use it - */ - public function unsetRouteSlug() - { - unset($this->route); - unset($this->slug); - } - - public function rawRoute($var = null) - { - if ($var !== null) { - $this->raw_route = $var; - } - - if (empty($this->raw_route)) { - $baseRoute = $this->parent ? (string) $this->parent()->rawRoute() : null; - - $regex = '/^[0-9]+\./u'; - $slug = preg_replace($regex, '', $this->folder); - - $this->raw_route = isset($baseRoute) ? $baseRoute . '/'. $slug : null; - } - - return $this->raw_route; - } - - /** - * Gets the route aliases for the page based on page headers. - * - * @param array $var list of route aliases - * - * @return array The route aliases for the Page. - */ - public function routeAliases($var = null) - { - if ($var !== null) { - $this->routes['aliases'] = (array) $var; - } - - if (!empty($this->routes) && isset($this->routes['aliases'])) { - return $this->routes['aliases']; - } else { - return []; - } - } - - /** - * Gets the canonical route for this page if its set. If provided it will use - * that value, else if it's `true` it will use the default route. - * - * @param null $var - * - * @return bool|string - */ - public function routeCanonical($var = null) - { - if ($var !== null) { - $this->routes['canonical'] = (array)$var; - } - - if (!empty($this->routes) && isset($this->routes['canonical'])) { - return $this->routes['canonical']; - } - - return $this->route(); - } - - /** - * Gets and sets the identifier for this Page object. - * - * @param string $var the identifier - * @return string the identifier - */ - public function id($var = null) - { - if ($var !== null) { - $this->id = $var; - } - return $this->id; - } - - /** - * Gets and sets the modified timestamp. - * - * @param int $var modified unix timestamp - * @return int modified unix timestamp - */ - public function modified($var = null) - { - if ($var !== null) { - $this->modified = $var; - } - return $this->modified; - } - - /** - * Gets the redirect set in the header. - * - * @param string $var redirect url - * @return array - */ - public function redirect($var = null) - { - if ($var !== null) { - $this->redirect = $var; - } - return $this->redirect; - } - - /** - * Gets and sets the option to show the etag header for the page. - * - * @param boolean $var show etag header - * @return boolean show etag header - */ - public function eTag($var = null) - { - if ($var !== null) { - $this->etag = $var; - } - if (!isset($this->etag)) { - $this->etag = (bool) self::getGrav()['config']->get('system.pages.etag'); - } - return $this->etag; - } - - /** - * Gets and sets the option to show the last_modified header for the page. - * - * @param boolean $var show last_modified header - * @return boolean show last_modified header - */ - public function lastModified($var = null) - { - if ($var !== null) { - $this->last_modified = $var; - } - if (!isset($this->last_modified)) { - $this->last_modified = (bool) self::getGrav()['config']->get('system.pages.last_modified'); - } - return $this->last_modified; - } - - /** - * Gets and sets the path to the .md file for this Page object. - * - * @param string $var the file path - * @return string|null the file path - */ - public function filePath($var = null) - { - if ($var !== null) { - // Filename of the page. - $this->name = basename($var); - // Folder of the page. - $this->folder = basename(dirname($var)); - // Path to the page. - $this->path = dirname(dirname($var)); - } - return $this->path . '/' . $this->folder . '/' . ($this->name ?: ''); - } - - /** - * Gets the relative path to the .md file - * - * @return string The relative file path - */ - public function filePathClean() - { - return str_replace(ROOT_DIR, '', $this->filePath()); - } - - /** - * Gets and sets the path to the folder where the .md for this Page object resides. - * This is equivalent to the filePath but without the filename. - * - * @param string $var the path - * @return string|null the path - */ - public function path($var = null) - { - if ($var !== null) { - // Folder of the page. - $this->folder = basename($var); - // Path to the page. - $this->path = dirname($var); - } - return $this->path ? $this->path . '/' . $this->folder : null; - } - - /** - * Get/set the folder. - * - * @param string $var Optional path - * @return string|null - */ - public function folder($var = null) - { - if ($var !== null) { - $this->folder = $var; - } - return $this->folder; - } - - /** - * Gets and sets the date for this Page object. This is typically passed in via the page headers - * - * @param string $var string representation of a date - * @return int unix timestamp representation of the date - */ - public function date($var = null) - { - if ($var !== null) { - $this->date = Utils::date2timestamp($var); - } - - if (!$this->date) { - $this->date = $this->modified; - } - - return $this->date; - } - - /** - * Gets and sets the order by which any sub-pages should be sorted. - * @param string $var the order, either "asc" or "desc" - * @return string the order, either "asc" or "desc" - */ - public function orderDir($var = null) - { - if ($var !== null) { - $this->order_dir = $var; - } - if (empty($this->order_dir)) { - $this->order_dir = 'asc'; - } - return $this->order_dir; - } - - /** - * Gets and sets the order by which the sub-pages should be sorted. - * - * default - is the order based on the file system, ie 01.Home before 02.Advark - * title - is the order based on the title set in the pages - * date - is the order based on the date set in the pages - * folder - is the order based on the name of the folder with any numerics omitted - * - * @param string $var supported options include "default", "title", "date", and "folder" - * @return string supported options include "default", "title", "date", and "folder" - */ - public function orderBy($var = null) - { - if ($var !== null) { - $this->order_by = $var; - } - return $this->order_by; - } - - /** - * Gets the manual order set in the header. - * - * @param string $var supported options include "default", "title", "date", and "folder" - * @return array - */ - public function orderManual($var = null) - { - if ($var !== null) { - $this->order_manual = $var; - } - return (array) $this->order_manual; - } - - /** - * Gets and sets the maxCount field which describes how many sub-pages should be displayed if the - * sub_pages header property is set for this page object. - * - * @param int $var the maximum number of sub-pages - * @return int the maximum number of sub-pages - */ - public function maxCount($var = null) - { - if ($var !== null) { - $this->max_count = (int) $var; - } - if (empty($this->max_count)) { - /** @var Config $config */ - $config = self::getGrav()['config']; - $this->max_count = (int) $config->get('system.pages.list.count'); - } - return $this->max_count; - } - - /** - * Gets and sets the taxonomy array which defines which taxonomies this page identifies itself with. - * - * @param array $var an array of taxonomies - * @return array an array of taxonomies - */ - public function taxonomy($var = null) - { - if ($var !== null) { - $this->taxonomy = $var; - } - return $this->taxonomy; - } - - /** - * Gets and sets the modular var that helps identify this parent page contains modular pages. - * - * @param bool $var true if modular_twig - * @return bool true if modular_twig - */ - public function modular($var = null) - { - return $this->modularTwig($var); - } - - /** - * Gets and sets the modular_twig var that helps identify this page as a modular page that will need - * twig processing handled differently from a regular page. - * - * @param bool $var true if modular_twig - * @return bool true if modular_twig - */ - public function modularTwig($var = null) - { - if ($var !== null) { - $this->modular_twig = (bool) $var; - if ($var) { - $this->process['twig'] = true; - $this->visible(false); - // some routable logic - if (empty($this->header->routable)) { - $this->routable = false; - } - } - } - return $this->modular_twig; - } - - /** - * Gets the configured state of the processing method. - * - * @param string $process the process, eg "twig" or "markdown" - * @return bool whether or not the processing method is enabled for this Page - */ - public function shouldProcess($process) - { - return isset($this->process[$process]) ? (bool) $this->process[$process] : false; - } - - /** - * Gets and Sets the parent object for this page - * - * @param Page $var the parent page object - * @return Page|null the parent page object if it exists. - */ - public function parent(Page $var = null) - { - if ($var) { - $this->parent = $var->path(); - return $var; - } - - /** @var Pages $pages */ - $pages = self::getGrav()['pages']; - - return $pages->get($this->parent); - } - - /** - * Returns children of this page. - * - * @return \Grav\Common\Page\Collection - */ - public function children() - { - /** @var Pages $pages */ - $pages = self::getGrav()['pages']; - return $pages->children($this->path()); - } - - - /** - * Check to see if this item is the first in an array of sub-pages. - * - * @return boolean True if item is first. - */ - public function isFirst() - { - $collection = $this->parent()->collection('content', false); - if ($collection instanceof Collection) { - return $collection->isFirst($this->path()); - } - return true; - } - - /** - * Check to see if this item is the last in an array of sub-pages. - * - * @return boolean True if item is last - */ - public function isLast() - { - $collection = $this->parent()->collection('content', false); - if ($collection instanceof Collection) { - return $collection->isLast($this->path()); - } - return true; - } - - /** - * Gets the previous sibling based on current position. - * - * @return Page the previous Page item - */ - public function prevSibling() - { - return $this->adjacentSibling(-1); - } - - /** - * Gets the next sibling based on current position. - * - * @return Page the next Page item - */ - public function nextSibling() - { - return $this->adjacentSibling(1); - } - - /** - * Returns the adjacent sibling based on a direction. - * - * @param integer $direction either -1 or +1 - * @return Page the sibling page - */ - public function adjacentSibling($direction = 1) - { - $collection = $this->parent()->collection('content', false); - if ($collection instanceof Collection) { - return $collection->adjacentSibling($this->path(), $direction); - } - return false; - } - - /** - * Returns whether or not this page is the currently active page requested via the URL. - * - * @return bool True if it is active - */ - public function active() - { - $uri_path = rtrim(self::getGrav()['uri']->path(), '/') ?: '/'; - $routes = self::getGrav()['pages']->routes(); - - if (isset($routes[$uri_path])) { - if ($routes[$uri_path] == $this->path()) { - return true; - } - - } - return false; - } - - /** - * Returns whether or not this URI's URL contains the URL of the active page. - * Or in other words, is this page's URL in the current URL - * - * @return bool True if active child exists - */ - public function activeChild() - { - $uri = self::getGrav()['uri']; - $pages = self::getGrav()['pages']; - $uri_path = rtrim($uri->path(), '/'); - $routes = self::getGrav()['pages']->routes(); - - if (isset($routes[$uri_path])) { - $child_page = $pages->dispatch($uri->route())->parent(); - if ($child_page) while (!$child_page->root()) { - if ($this->path() == $child_page->path()) { - return true; - } - $child_page = $child_page->parent(); - } - } - - return false; - } - - /** - * Returns whether or not this page is the currently configured home page. - * - * @return bool True if it is the homepage - */ - public function home() - { - return $this->find('/') == $this; - } - - /** - * Returns whether or not this page is the root node of the pages tree. - * - * @return bool True if it is the root - */ - public function root() - { - if (!$this->parent && !$this->name && !$this->visible) { - return true; - } else { - return false; - } - } - - /** - * Helper method to return a page. - * - * @param string $url the url of the page - * @param bool $all - * - * @return \Grav\Common\Page\Page page you were looking for if it exists - */ - public function find($url, $all = false) - { - /** @var Pages $pages */ - $pages = self::getGrav()['pages']; - return $pages->dispatch($url, $all); - } - - /** - * Get a collection of pages in the current context. - * - * @param string|array $params - * @param boolean $pagination - * @return Collection - * @throws \InvalidArgumentException - */ - public function collection($params = 'content', $pagination = true) - { - if (is_string($params)) { - $params = (array) $this->value('header.'.$params); - } elseif (!is_array($params)) { - throw new \InvalidArgumentException('Argument should be either header variable name or array of parameters'); - } - - if (!isset($params['items'])) { - return array(); - } - - $collection = $this->evaluate($params['items']); - if (!$collection instanceof Collection) { - $collection = new Collection(); - } - $collection->setParams($params); - - /** @var Uri $uri */ - $uri = self::getGrav()['uri']; - /** @var Config $config */ - $config = self::getGrav()['config']; - - $process_taxonomy = isset($params['url_taxonomy_filters']) ? $params['url_taxonomy_filters'] : $config->get('system.pages.url_taxonomy_filters'); - - if ($process_taxonomy) { - foreach ((array) $config->get('site.taxonomies') as $taxonomy) { - if ($uri->param($taxonomy)) { - $items = explode(',', $uri->param($taxonomy)); - $collection->setParams(['taxonomies' => [$taxonomy => $items]]); - - foreach ($collection as $page) { - // Don't filter modular pages - if ($page->modular()) { - continue; - } - foreach ($items as $item) { - if (empty($page->taxonomy[$taxonomy]) - || !in_array(htmlspecialchars_decode($item, ENT_QUOTES), $page->taxonomy[$taxonomy])) { - $collection->remove(); - } - } - } - } - } - } - - if (isset($params['dateRange'])) { - $start = isset($params['dateRange']['start']) ? $params['dateRange']['start'] : 0; - $end = isset($params['dateRange']['end']) ? $params['dateRange']['end'] : false; - $field = isset($params['dateRange']['field']) ? $params['dateRange']['field'] : false; - $collection->dateRange($start, $end, $field); - } - - if (isset($params['order'])) { - $by = isset($params['order']['by']) ? $params['order']['by'] : 'default'; - $dir = isset($params['order']['dir']) ? $params['order']['dir'] : 'asc'; - $custom = isset($params['order']['custom']) ? $params['order']['custom'] : null; - $collection->order($by, $dir, $custom); - } - - /** @var Grav $grav */ - $grav = self::getGrav()['grav']; - - // New Custom event to handle things like pagination. - $grav->fireEvent('onCollectionProcessed', new Event(['collection' => $collection])); - - // Slice and dice the collection if pagination is required - if ($pagination) { - $params = $collection->params(); - - $limit = isset($params['limit']) ? $params['limit'] : 0; - $start = !empty($params['pagination']) ? ($uri->currentPage() - 1) * $limit : 0; - - if ($limit && $collection->count() > $limit) { - $collection->slice($start, $limit); - } - } - - return $collection; - } - - /** - * @param string $value - * - * @return mixed - * @internal - */ - protected function evaluate($value) - { - // Parse command. - if (is_string($value)) { - // Format: @command.param - $cmd = $value; - $params = array(); - } elseif (is_array($value) && count($value) == 1 && !is_int(key($value))) { - // Format: @command.param: { attr1: value1, attr2: value2 } - $cmd = (string) key($value); - $params = (array) current($value); - } else { - $result = []; - foreach($value as $key => $val) { - if (is_int($key)) { - $result = $result + $this->evaluate($val)->toArray(); - } else { - $result = $result + $this->evaluate([$key=>$val])->toArray(); - } - - } - return new Collection($result); - } - - // We only evaluate commands which start with @ - if (empty($cmd) || $cmd[0] != '@') { - return $value; - } - - /** @var Pages $pages */ - $pages = self::getGrav()['pages']; - - $parts = explode('.', $cmd); - $current = array_shift($parts); - - $results = new Collection(); - switch ($current) { - case '@self': - if (!empty($parts)) { - switch ($parts[0]) { - case 'modular': - // @self.modular: false (alternative to @self.children) - if (!empty($params) && $params[0] === false) { - $results = $this->children()->nonModular(); - break; - } - $results = $this->children()->modular(); - break; - case 'children': - $results = $this->children()->nonModular(); - break; - - case 'parent': - $collection = new Collection(); - $results = $collection->addPage($this->parent()); - break; - - case 'siblings': - $results = $this->parent()->children()->remove($this->path()); - break; - - case 'descendants': - $results = $pages->all($this)->remove($this->path())->nonModular(); - break; - } - } - - $results = $results->published(); - break; - - case '@page': - $page = null; - - if (!empty($params)) { - $page = $this->find($params[0]); - } - - // safety check in case page is not found - if (!isset($page)) { - return $results; - } - - // Handle a @page.descendants - if (!empty($parts)) { - switch ($parts[0]) { - case 'self': - $results = new Collection(); - $results = $results->addPage($page); - break; - - case 'descendants': - $results = $pages->all($page)->remove($page->path()); - break; - - case 'children': - $results = $page->children(); - break; - } - } else { - $results = $page->children(); - } - - $results = $results->nonModular()->published(); - - break; - - case '@root': - if (!empty($parts) && $parts[0] == 'descendants') { - $results = $pages->all($pages->root())->nonModular()->published(); - } else { - $results = $pages->root()->children()->nonModular()->published(); - } - break; - - - case '@taxonomy': - // Gets a collection of pages by using one of the following formats: - // @taxonomy.category: blog - // @taxonomy.category: [ blog, featured ] - // @taxonomy: { category: [ blog, featured ], level: 1 } - - /** @var Taxonomy $taxonomy_map */ - $taxonomy_map = self::getGrav()['taxonomy']; - - if (!empty($parts)) { - $params = [implode('.', $parts) => $params]; - } - $results = $taxonomy_map->findTaxonomy($params)->published(); - break; - } - - return $results; - } - - /** - * Returns whether or not this Page object has a .md file associated with it or if its just a directory. - * - * @return bool True if its a page with a .md file associated - */ - public function isPage() - { - if ($this->name) { - return true; - } - return false; - } - - /** - * Returns whether or not this Page object is a directory or a page. - * - * @return bool True if its a directory - */ - public function isDir() - { - return !$this->isPage(); - } - - /** - * Returns whether the page exists in the filesystem. - * - * @return bool - */ - public function exists() - { - $file = $this->file(); - return $file && $file->exists(); - } - - /** - * Cleans the path. - * - * @param string $path the path - * @return string the path - */ - protected function cleanPath($path) - { - $lastchunk = strrchr($path, DS); - if (strpos($lastchunk, ':') !== false) { - $path = str_replace($lastchunk, '', $path); - } - return $path; - } - - /** - * Moves or copies the page in filesystem. - * - * @internal - */ - protected function doRelocation($reorder) - { - if (empty($this->_original) ) { - return; - } - - // Do reordering. - if ($reorder && $this->order() != $this->_original->order()) { - /** @var Pages $pages */ - $pages = self::getGrav()['pages']; - - $parent = $this->parent(); - - // Extract visible children from the parent page. - $list = array(); - /** @var Page $page */ - foreach ($parent->children()->visible() as $page) { - if ($page->order()) { - $list[$page->slug] = $page->path(); - } - } - - // If page was moved, take it out of the list. - if ($this->_action == 'move') { - unset($list[$this->slug()]); - } - - $list = array_values($list); - - // Then add it back to the new location (if needed). - if ($this->order()) { - array_splice($list, min($this->order()-1, count($list)), 0, array($this->path())); - } - - // Reorder all moved pages. - foreach ($list as $order => $path) { - if ($path == $this->path()) { - // Handle current page; we do want to change ordering number, but nothing else. - $this->order($order+1); - } else { - // Handle all the other pages. - $page = $pages->get($path); - - if ($page && $page->exists() && $page->order() != $order+1) { - $page = $page->move($parent); - $page->order($order+1); - $page->save(false); - } - } - } - } - if ($this->_action == 'move' && $this->_original->exists()) { - Folder::move($this->_original->path(), $this->path()); - } - if ($this->_action == 'copy' && $this->_original->exists()) { - Folder::copy($this->_original->path(), $this->path()); - } - - if ($this->name() != $this->_original->name()) { - $path = $this->path(); - if (is_file($path . '/' . $this->_original->name())) { - rename($path . '/' . $this->_original->name(), $path . '/' . $this->name()); - } - } - - $this->_action = null; - $this->_original = null; - } - - protected function setPublishState() - { - // Handle publishing dates if no explict published option set - if (self::getGrav()['config']->get('system.pages.publish_dates') && !isset($this->header->published)) { - // unpublish if required, if not clear cache right before page should be unpublished - if ($this->unpublishDate()) { - if ($this->unpublishDate() < time()) { - $this->published(false); - } else { - $this->published(); - self::getGrav()['cache']->setLifeTime($this->unpublishDate()); - } - } - // publish if required, if not clear cache right before page is published - if ($this->publishDate() != $this->modified() && $this->publishDate() > time()) { - $this->published(false); - self::getGrav()['cache']->setLifeTime($this->publishDate()); - } - } - } -} diff --git a/src/system/src/Grav/Common/Page/Pages.php b/src/system/src/Grav/Common/Page/Pages.php deleted file mode 100644 index ccb7530..0000000 --- a/src/system/src/Grav/Common/Page/Pages.php +++ /dev/null @@ -1,915 +0,0 @@ -grav = $c; - $this->base = ''; - } - - /** - * Get or set base path for the pages. - * - * @param string $path - * @return string - */ - public function base($path = null) - { - if ($path !== null) { - $path = trim($path, '/'); - $this->base = $path ? '/' . $path : null; - } - - return $this->base; - } - - /** - * Class initialization. Must be called before using this class. - */ - public function init() - { - $config = $this->grav['config']; - $this->ignore_files = $config->get('system.pages.ignore_files'); - $this->ignore_folders = $config->get('system.pages.ignore_folders'); - $this->ignore_hidden = $config->get('system.pages.ignore_hidden'); - - $this->buildPages(); - } - - /** - * Get or set last modification time. - * - * @param int $modified - * @return int|null - */ - public function lastModified($modified = null) - { - if ($modified && $modified > $this->last_modified) { - $this->last_modified = $modified; - } - return $this->last_modified; - } - - /** - * Returns a list of all pages. - * - * @return Page - */ - public function instances() - { - return $this->instances; - } - - /** - * Returns a list of all routes. - * - * @return array - */ - public function routes() - { - return $this->routes; - } - - /** - * Adds a page and assigns a route to it. - * - * @param Page $page Page to be added. - * @param string $route Optional route (uses route from the object if not set). - */ - public function addPage(Page $page, $route = null) - { - if (!isset($this->instances[$page->path()])) { - $this->instances[$page->path()] = $page; - } - $route = $page->route($route); - if ($page->parent()) { - $this->children[$page->parent()->path()][$page->path()] = array('slug' => $page->slug()); - } - $this->routes[$route] = $page->path(); - } - - /** - * Sort sub-pages in a page. - * - * @param Page $page - * @param string $order_by - * @param string $order_dir - * - * @return array - */ - public function sort(Page $page, $order_by = null, $order_dir = null) - { - if ($order_by === null) { - $order_by = $page->orderBy(); - } - if ($order_dir === null) { - $order_dir = $page->orderDir(); - } - - $path = $page->path(); - $children = isset($this->children[$path]) ? $this->children[$path] : array(); - - if (!$children) { - return $children; - } - - if (!isset($this->sort[$path][$order_by])) { - $this->buildSort($path, $children, $order_by, $page->orderManual()); - } - - $sort = $this->sort[$path][$order_by]; - - if ($order_dir != 'asc') { - $sort = array_reverse($sort); - } - - return $sort; - } - - /** - * @param Collection $collection - * @param $orderBy - * @param string $orderDir - * @param null $orderManual - * @return array - * @internal - */ - public function sortCollection(Collection $collection, $orderBy, $orderDir = 'asc', $orderManual = null) - { - $items = $collection->toArray(); - if (!$items) { - return []; - } - - $lookup = md5(json_encode($items)); - if (!isset($this->sort[$lookup][$orderBy])) { - $this->buildSort($lookup, $items, $orderBy, $orderManual); - } - - $sort = $this->sort[$lookup][$orderBy]; - - if ($orderDir != 'asc') { - $sort = array_reverse($sort); - } - - return $sort; - - } - - /** - * Get a page instance. - * - * @param string $path - * @return Page - * @throws \Exception - */ - public function get($path) - { - if (!is_null($path) && !is_string($path)) { - throw new \Exception(); - } - return isset($this->instances[(string) $path]) ? $this->instances[(string) $path] : null; - } - - /** - * Get children of the path. - * - * @param string $path - * @return Collection - */ - public function children($path) - { - $children = isset($this->children[(string) $path]) ? $this->children[(string) $path] : array(); - return new Collection($children, array(), $this); - } - - /** - * Dispatch URI to a page. - * - * @param $url - * @param bool $all - * @return Page|null - */ - public function dispatch($url, $all = false) - { - // Fetch page if there's a defined route to it. - $page = isset($this->routes[$url]) ? $this->get($this->routes[$url]) : null; - - // Are we in the admin? this is important! - $not_admin = !isset($this->grav['admin']); - - // If the page cannot be reached, look into site wide redirects, routes + wildcards - if (!$all && $not_admin && (!$page || ($page && !$page->routable()) || ($page && $page->redirect()))) { - - // If the page is a simple redirect, just do it. - if ($page && $page->redirect()) { - $this->grav->redirectLangSafe($page->redirect()); - } - - /** @var Config $config */ - $config = $this->grav['config']; - - // See if route matches one in the site configuration - $route = $config->get("site.routes.{$url}"); - if ($route) { - $page = $this->dispatch($route, $all); - } else { - // Try Regex style redirects - foreach ((array)$config->get("site.redirects") as $pattern => $replace) { - $pattern = '#' . $pattern . '#'; - try { - $found = preg_replace($pattern, $replace, $url); - if ($found != $url) { - $this->grav->redirectLangSafe($found); - } - } catch (ErrorException $e) { - $this->grav['log']->error('site.redirects: ' . $pattern . '-> ' . $e->getMessage()); - } - } - - // Try Regex style routes - foreach ((array)$config->get("site.routes") as $pattern => $replace) { - $pattern = '#' . $pattern . '#'; - try { - $found = preg_replace($pattern, $replace, $url); - if ($found != $url) { - $page = $this->dispatch($found, $all); - } - } catch (ErrorException $e) { - $this->grav['log']->error('site.routes: '. $pattern . '-> ' . $e->getMessage()); - } - } - } - } - - return $page; - } - - /** - * Get root page. - * - * @return Page - */ - public function root() - { - /** @var UniformResourceLocator $locator */ - $locator = $this->grav['locator']; - - return $this->instances[rtrim($locator->findResource('page://'), DS)]; - } - - /** - * Get a blueprint for a page type. - * - * @param string $type - * @return Blueprint - */ - public function blueprints($type) - { - if (!isset($this->blueprints)) { - $this->blueprints = new Blueprints(self::getTypes()); - } - - try { - $blueprint = $this->blueprints->get($type); - } catch (\RuntimeException $e) { - $blueprint = $this->blueprints->get('default'); - } - - if (!$blueprint->initialized) { - $this->grav->fireEvent('onBlueprintCreated', new Event(['blueprint' => $blueprint])); - $blueprint->initialized = true; - } - - return $blueprint; - } - - /** - * Get all pages - * - * @param \Grav\Common\Page\Page $current - * @return \Grav\Common\Page\Collection - */ - public function all(Page $current = null) - { - $all = new Collection(); - - /** @var Page $current */ - $current = $current ?: $this->root(); - - if (!$current->root()) { - $all[$current->path()] = [ 'slug' => $current->slug() ]; - } - - foreach ($current->children() as $next) { - $all->append($this->all($next)); - } - - return $all; - } - - /** - * Get list of route/title of all pages. - * - * @param Page $current - * @param int $level - * @return array - * @throws \RuntimeException - */ - public function getList(Page $current = null, $level = 0) - { - if (!$current) { - if ($level) { - throw new \RuntimeException('Internal error'); - } - - $current = $this->root(); - } - - $list = array(); - - if (!$current->root()) { - $list[$current->route()] = str_repeat('  ', ($level-1)*2) . $current->title(); - } - - foreach ($current->children() as $next) { - $list = array_merge($list, $this->getList($next, $level + 1)); - } - - return $list; - } - - /** - * Get available page types. - * - * @return Types - */ - public static function getTypes() - { - $locator = Grav::instance()['locator']; - if (!self::$types) { - self::$types = new Types(); - file_exists('theme://blueprints/') && self::$types->scanBlueprints($locator->findResources('theme://blueprints/')); - file_exists('theme://templates/') && self::$types->scanTemplates($locator->findResources('theme://templates/')); - - $event = new Event(); - $event->types = self::$types; - Grav::instance()->fireEvent('onGetPageTemplates', $event); - } - - return self::$types; - } - - /** - * Get available page types. - * - * @return array - */ - public static function types() - { - $types = self::getTypes(); - - return $types->pageSelect(); - } - - /** - * Get available page types. - * - * @return array - */ - public static function modularTypes() - { - $types = self::getTypes(); - - return $types->modularSelect(); - } - - /** - * Get template types based on page type (standard or modular) - * - * @return array - */ - public static function pageTypes() - { - /** @var Admin $admin */ - $admin = Grav::instance()['admin']; - - /** @var Page $page */ - $page = $admin->getPage($admin->route); - - if ($page && $page->modular()) { - return static::modularTypes(); - } - - return static::types(); - } - - /** - * Get available parents. - * - * @return array - */ - public static function parents() - { - $grav = Grav::instance(); - - /** @var Pages $pages */ - $pages = $grav['pages']; - - return $pages->getList(); - } - - /** - * Get's the home route - * - * @return string - */ - public static function getHomeRoute() - { - if (empty(self::$home)) { - $grav = Grav::instance(); - - /** @var Config $config */ - $config = $grav['config']; - - /** @var Language $language */ - $language = $grav['language']; - - $home = $config->get('system.home.alias'); - - if ($language->enabled()) { - $home_aliases = $config->get('system.home.aliases'); - if ($home_aliases) { - $active = $language->getActive(); - $default = $language->getDefault(); - - try { - if ($active) { - $home = $home_aliases[$active]; - } else { - $home = $home_aliases[$default]; - } - } catch (ErrorException $e) { - $home = $home_aliases[$default]; - } - - } - } - - self::$home_route = trim($home, '/'); - } - return self::$home_route; - } - - /** - * Builds pages. - * - * @internal - */ - protected function buildPages() - { - $this->sort = array(); - - /** @var Config $config */ - $config = $this->grav['config']; - - /** @var Language $language */ - $language = $this->grav['language']; - - /** @var UniformResourceLocator $locator */ - $locator = $this->grav['locator']; - $pages_dir = $locator->findResource('page://'); - - if ($config->get('system.cache.enabled')) { - /** @var Cache $cache */ - $cache = $this->grav['cache']; - /** @var Taxonomy $taxonomy */ - $taxonomy = $this->grav['taxonomy']; - - // how should we check for last modified? Default is by file - switch (strtolower($config->get('system.cache.check.method', 'file'))) { - case 'none': - case 'off': - $last_modified = 0; - break; - case 'folder': - $last_modified = Folder::lastModifiedFolder($pages_dir); - break; - default: - $last_modified = Folder::lastModifiedFile($pages_dir); - } - - $page_cache_id = md5(USER_DIR.$last_modified.$language->getActive().$config->checksum()); - - list($this->instances, $this->routes, $this->children, $taxonomy_map, $this->sort) = $cache->fetch($page_cache_id); - if (!$this->instances) { - $this->grav['debugger']->addMessage('Page cache missed, rebuilding pages..'); - - // recurse pages and cache result - $this->resetPages($pages_dir, $page_cache_id); - - } else { - // If pages was found in cache, set the taxonomy - $this->grav['debugger']->addMessage('Page cache hit.'); - $taxonomy->taxonomy($taxonomy_map); - } - } else { - $this->recurse($pages_dir); - $this->buildRoutes(); - } - } - - /** - * Accessible method to manually reset the pages cache - * - * @param $pages_dir - * @param $page_cache_id - */ - public function resetPages($pages_dir, $page_cache_id) - { - $this->recurse($pages_dir); - $this->buildRoutes(); - - // cache if needed - if ($this->grav['config']->get('system.cache.enabled')) { - /** @var Cache $cache */ - $cache = $this->grav['cache']; - /** @var Taxonomy $taxonomy */ - $taxonomy = $this->grav['taxonomy']; - - // save pages, routes, taxonomy, and sort to cache - $cache->save( - $page_cache_id, - array($this->instances, $this->routes, $this->children, $taxonomy->taxonomy(), $this->sort) - ); - } - } - - /** - * Recursive function to load & build page relationships. - * - * @param string $directory - * @param Page|null $parent - * @return Page - * @throws \RuntimeException - * @internal - */ - protected function recurse($directory, Page &$parent = null) - { - $directory = rtrim($directory, DS); - $page = new Page; - - /** @var Config $config */ - $config = $this->grav['config']; - - /** @var Language $language */ - $language = $this->grav['language']; - - // stuff to do at root page - if ($parent === null) { - - // Fire event for memory and time consuming plugins... - if ($config->get('system.pages.events.page')) { - $this->grav->fireEvent('onBuildPagesInitialized'); - } - } - - $page->path($directory); - if ($parent) { - $page->parent($parent); - } - - $page->orderDir($config->get('system.pages.order.dir')); - $page->orderBy($config->get('system.pages.order.by')); - - // Add into instances - if (!isset($this->instances[$page->path()])) { - $this->instances[$page->path()] = $page; - if ($parent && $page->path()) { - $this->children[$parent->path()][$page->path()] = array('slug' => $page->slug()); - } - } else { - throw new \RuntimeException('Fatal error when creating page instances.'); - } - - $content_exists = false; - $pages_found = glob($directory.'/*'.CONTENT_EXT); - $page_extensions = $language->getFallbackPageExtensions(); - - if ($pages_found) { - foreach ($page_extensions as $extension) { - foreach ($pages_found as $found) { - if (preg_match('/^.*\/[0-9A-Za-z\-\_]+('.$extension.')$/', $found)) { - $page_found = $found; - $page_extension = $extension; - break 2; - } - } - } - } - - if ($parent && !empty($page_found)) { - $file = new \SplFileInfo($page_found); - $page->init($file, $page_extension); - - $content_exists = true; - - if ($config->get('system.pages.events.page')) { - $this->grav->fireEvent('onPageProcessed', new Event(['page' => $page])); - } - } - - // set current modified of page - $last_modified = $page->modified(); - - /** @var \DirectoryIterator $file */ - foreach (new \FilesystemIterator($directory) as $file) { - $name = $file->getFilename(); - - // Ignore all hidden files if set. - if ($this->ignore_hidden) { - if ($name && $name[0] == '.') { - continue; - } - } - - if ($file->isFile()) { - // Update the last modified if it's newer than already found - if (!in_array($file->getBasename(), $this->ignore_files) && ($modified = $file->getMTime()) > $last_modified) { - $last_modified = $modified; - } - } elseif ($file->isDir() && !in_array($file->getFilename(), $this->ignore_folders)) { - if (!$page->path()) { - $page->path($file->getPath()); - } - - $path = $directory.DS.$name; - $child = $this->recurse($path, $page); - - if (Utils::startsWith($name, '_')) { - $child->routable(false); - } - - $this->children[$page->path()][$child->path()] = array('slug' => $child->slug()); - - if ($config->get('system.pages.events.page')) { - $this->grav->fireEvent('onFolderProcessed', new Event(['page' => $page])); - } - } - } - - // Set routability to false if no page found - if (!$content_exists) { - $page->routable(false); - } - - // Override the modified and ID so that it takes the latest change into account - $page->modified($last_modified); - $page->id($last_modified.md5($page->filePath())); - - // Sort based on Defaults or Page Overridden sort order - $this->children[$page->path()] = $this->sort($page); - - return $page; - } - - /** - * @internal - */ - protected function buildRoutes() - { - /** @var $taxonomy Taxonomy */ - $taxonomy = $this->grav['taxonomy']; - - // Get the home route - $home = self::getHomeRoute(); - - // Build routes and taxonomy map. - /** @var $page Page */ - foreach ($this->instances as $page) { - if (!$page->root()) { - // process taxonomy - $taxonomy->addTaxonomy($page); - - $route = $page->route(); - $raw_route = $page->rawRoute(); - $page_path = $page->path(); - - // add regular route - $this->routes[$route] = $page_path; - - // add raw route - if ($raw_route != $route) { - $this->routes[$raw_route] = $page_path; - } - - // add canonical route - $route_canonical = $page->routeCanonical(); - if ($route_canonical && ($route !== $route_canonical)) { - $this->routes[$route_canonical] = $page_path; - } - - // add aliases to routes list if they are provided - $route_aliases = $page->routeAliases(); - if ($route_aliases) { - foreach ($route_aliases as $alias) { - $this->routes[$alias] = $page_path; - } - } - } - } - - // Alias and set default route to home page. - if ($home && isset($this->routes['/' . $home])) { - $this->routes['/'] = $this->routes['/' . $home]; - $this->get($this->routes['/' . $home])->route('/'); - } - } - - /** - * @param string $path - * @param array $pages - * @param string $order_by - * @param array $manual - * @throws \RuntimeException - * @internal - */ - protected function buildSort($path, array $pages, $order_by = 'default', $manual = null) - { - $list = array(); - $header_default = null; - $header_query = null; - - // do this headery query work only once - if (strpos($order_by, 'header.') === 0) { - $header_query = explode('|', str_replace('header.', '', $order_by)); - if (isset($header_query[1])) { - $header_default = $header_query[1]; - } - } - - foreach ($pages as $key => $info) { - $child = isset($this->instances[$key]) ? $this->instances[$key] : null; - if (!$child) { - throw new \RuntimeException("Page does not exist: {$key}"); - } - - switch ($order_by) { - case 'title': - $list[$key] = $child->title(); - break; - case 'date': - $list[$key] = $child->date(); - break; - case 'modified': - $list[$key] = $child->modified(); - break; - case 'slug': - $list[$key] = $child->slug(); - break; - case 'basename': - $list[$key] = basename($key); - break; - case (is_string($header_query[0])): - $child_header = new Header((array)$child->header()); - $header_value = $child_header->get($header_query[0]); - if ($header_value) { - $list[$key] = $header_value; - } else { - $list[$key] = $header_default ?: $key; - } - break; - case 'manual': - case 'default': - default: - $list[$key] = $key; - } - } - - // handle special case when order_by is random - if ($order_by == 'random') { - $list = $this->arrayShuffle($list); - } else { - // else just sort the list according to specified key - asort($list); - } - - - // Move manually ordered items into the beginning of the list. Order of the unlisted items does not change. - if (is_array($manual) && !empty($manual)) { - $new_list = array(); - $i = count($manual); - - foreach ($list as $key => $dummy) { - $info = $pages[$key]; - $order = array_search($info['slug'], $manual); - if ($order === false) { - $order = $i++; - } - $new_list[$key] = (int) $order; - } - - $list = $new_list; - - // Apply manual ordering to the list. - asort($list); - } - - foreach ($list as $key => $sort) { - $info = $pages[$key]; - $this->sort[$path][$order_by][$key] = $info; - } - } - - // Shuffles and associative array - protected function arrayShuffle($list) - { - $keys = array_keys($list); - shuffle($keys); - - $new = array(); - foreach ($keys as $key) { - $new[$key] = $list[$key]; - } - - return $new; - } -} diff --git a/src/system/src/Grav/Common/Page/Types.php b/src/system/src/Grav/Common/Page/Types.php deleted file mode 100644 index 6ef1191..0000000 --- a/src/system/src/Grav/Common/Page/Types.php +++ /dev/null @@ -1,110 +0,0 @@ -systemBlueprints && isset($this->systemBlueprints[$type])) { - $useBlueprint = $this->systemBlueprints[$type]; - } else { - $useBlueprint = $blueprint; - } - - if ($blueprint || empty($this->items[$type])) { - $this->items[$type] = $useBlueprint; - } - } - - public function scanBlueprints($paths) - { - $this->items = $this->findBlueprints($paths) + $this->items; - } - - public function scanTemplates($paths) - { - $options = [ - 'compare' => 'Filename', - 'pattern' => '|\.html\.twig$|', - 'filters' => [ - 'value' => '|\.html\.twig$|' - ], - 'value' => 'Filename', - 'recursive' => false - ]; - - if (!$this->systemBlueprints) { - $this->systemBlueprints = $this->findBlueprints('blueprints://pages'); - } - - // register default by default - $this->register('default'); - - foreach ((array) $paths as $path) { - foreach (Folder::all($path, $options) as $type) { - $this->register($type); - } - $modular_path = rtrim($path, '/') . '/modular'; - if (file_exists($modular_path)) { - foreach (Folder::all($modular_path, $options) as $type) { - $this->register('modular/' . $type); - } - } - } - } - - public function pageSelect() - { - $list = []; - foreach ($this->items as $name => $file) { - if (strpos($name, '/')) { - continue; - } - $list[$name] = ucfirst(strtr($name, '_', ' ')); - } - ksort($list); - return $list; - } - - public function modularSelect() - { - $list = []; - foreach ($this->items as $name => $file) { - if (strpos($name, 'modular/') !== 0) { - continue; - } - $list[$name] = trim(ucfirst(strtr(basename($name), '_', ' '))); - } - ksort($list); - return $list; - } - - private function findBlueprints($paths) - { - $options = [ - 'compare' => 'Filename', - 'pattern' => '|\.yaml$|', - 'filters' => [ - 'key' => '|\.yaml$|' - ], - 'key' => 'SubPathName', - 'value' => 'PathName', - ]; - - foreach ((array) $paths as $path) { - return Folder::all($path, $options); - } - } -} diff --git a/src/system/src/Grav/Common/Plugin.php b/src/system/src/Grav/Common/Plugin.php deleted file mode 100644 index 3f2f90a..0000000 --- a/src/system/src/Grav/Common/Plugin.php +++ /dev/null @@ -1,185 +0,0 @@ -grav = $grav; - $this->config = $config; - $this->name = $name; - } - - public function isAdmin() - { - if (isset($this->grav['admin'])) { - return true; - } - return false; - } - - /** - * @param array $events - */ - protected function enable(array $events) - { - /** @var EventDispatcher $dispatcher */ - $dispatcher = $this->grav['events']; - - foreach ($events as $eventName => $params) { - if (is_string($params)) { - $dispatcher->addListener($eventName, array($this, $params)); - } elseif (is_string($params[0])) { - $dispatcher->addListener($eventName, array($this, $params[0]), isset($params[1]) ? $params[1] : 0); - } else { - foreach ($params as $listener) { - $dispatcher->addListener($eventName, array($this, $listener[0]), isset($listener[1]) ? $listener[1] : 0); - } - } - } - } - - /** - * @param array $events - */ - protected function disable(array $events) - { - /** @var EventDispatcher $dispatcher */ - $dispatcher = $this->grav['events']; - - foreach ($events as $eventName => $params) { - if (is_string($params)) { - $dispatcher->removeListener($eventName, array($this, $params)); - } elseif (is_string($params[0])) { - $dispatcher->removeListener($eventName, array($this, $params[0])); - } else { - foreach ($params as $listener) { - $dispatcher->removeListener($eventName, array($this, $listener[0])); - } - } - } - } - - /** - * This function will search a string for markdown links in a specific format. The link value can be - * optionally compared against via the $internal_regex and operated on by the callback $function - * provided. - * - * format: [plugin:myplugin_name](function_data) - * - * @param $content The string to perform operations upon - * @param $function The anonymous callback function - * @param string $internal_regex Optional internal regex to extra data from - * - * @return string - */ - protected function parseLinks($content, $function, $internal_regex = '(.*)') - { - $regex = '/\[plugin:(?:'.$this->name.')\]\('.$internal_regex.'\)/i'; - return preg_replace_callback($regex, $function, $content); - } - - /** - * Merge global and page configurations. - * - * @param Page $page The page to merge the configurations with the - * plugin settings. - * @param bool $deep Should you use deep or shallow merging - * @param array $params Array of additional configuration options to - * merge with the plugin settings. - * - * @return \Grav\Common\Data\Data - */ - protected function mergeConfig(Page $page, $deep = false, $params = []) - { - $class_name = $this->name; - $class_name_merged = $class_name . '.merged'; - $defaults = $this->config->get('plugins.'. $class_name, []); - $page_header = $page->header(); - $header = []; - if (!isset($page_header->$class_name_merged) && isset($page_header->$class_name)) { - // Get default plugin configurations and retrieve page header configuration - $config = $page_header->$class_name; - if (is_bool($config)) { - // Overwrite enabled option with boolean value in page header - $config = ['enabled' => $config]; - } - // Merge page header settings using deep or shallow merging technique - if ($deep) { - $header = array_replace_recursive($defaults, $config); - } else { - $header = array_merge($defaults, $config); - } - // Create new config object and set it on the page object so it's cached for next time - $page->modifyHeader($class_name_merged, new Data($header)); - } else if (isset($page_header->$class_name_merged)) { - $merged = $page_header->$class_name_merged; - $header = $merged->toArray(); - } - if (empty($header)) { - $header = $defaults; - } - // Merge additional parameter with configuration options - if ($deep) { - $header = array_replace_recursive($header, $params); - } else { - $header = array_merge($header, $params); - } - // Return configurations as a new data config class - return new Data($header); - } -} diff --git a/src/system/src/Grav/Common/Plugins.php b/src/system/src/Grav/Common/Plugins.php deleted file mode 100644 index 93da156..0000000 --- a/src/system/src/Grav/Common/Plugins.php +++ /dev/null @@ -1,137 +0,0 @@ -get('plugins'); - - $inflector = self::getGrav()['inflector']; - - /** @var EventDispatcher $events */ - $events = self::getGrav()['events']; - - foreach ($plugins as $plugin => $data) { - if (empty($data['enabled'])) { - // Only load enabled plugins. - continue; - } - - $locator = self::getGrav()['locator']; - $filePath = $locator->findResource('plugins://' . $plugin . DS . $plugin . PLUGIN_EXT); - if (!is_file($filePath)) { - self::getGrav()['log']->addWarning(sprintf("Plugin '%s' enabled but not found! Try clearing cache with `bin/grav clear-cache`", $plugin)); - continue; - } - - require_once $filePath; - - $pluginClassFormat = [ - 'Grav\\Plugin\\'.ucfirst($plugin).'Plugin', - 'Grav\\Plugin\\'.$inflector->camelize($plugin).'Plugin' - ]; - $pluginClassName = false; - - foreach ($pluginClassFormat as $pluginClass) { - if (class_exists($pluginClass)) { - $pluginClassName = $pluginClass; - break; - } - } - - if (false === $pluginClassName) { - throw new \RuntimeException(sprintf("Plugin '%s' class not found! Try reinstalling this plugin.", $plugin)); - } - - $instance = new $pluginClassName($plugin, self::getGrav(), $config); - if ($instance instanceof EventSubscriberInterface) { - $events->addSubscriber($instance); - } - } - - return $this->items; - } - - public function add($plugin) - { - if (is_object($plugin)) { - $this->items[get_class($plugin)] = $plugin; - } - } - - /** - * Return list of all plugin data with their blueprints. - * - * @return array - */ - public static function all() - { - $list = array(); - $locator = Grav::instance()['locator']; - - $plugins = (array) $locator->findResources('plugins://', false); - foreach ($plugins as $path) { - $iterator = new \DirectoryIterator($path); - - /** @var \DirectoryIterator $directory */ - foreach ($iterator as $directory) { - if (!$directory->isDir() || $directory->isDot()) { - continue; - } - - $type = $directory->getBasename(); - $list[$type] = self::get($type); - } - } - ksort($list); - - return $list; - } - - public static function get($name) - { - $blueprints = new Blueprints('plugins://'); - $blueprint = $blueprints->get("{$name}/blueprints"); - $blueprint->name = $name; - - // Load default configuration. - $file = CompiledYamlFile::instance("plugins://{$name}/{$name}.yaml"); - $obj = new Data($file->content(), $blueprint); - - // Override with user configuration. - $obj->merge(self::getGrav()['config']->get('plugins.' . $name) ?: []); - - // Save configuration always to user/config. - $file = CompiledYamlFile::instance("config://plugins/{$name}.yaml"); - $obj->file($file); - - return $obj; - } - -} diff --git a/src/system/src/Grav/Common/Service/ConfigServiceProvider.php b/src/system/src/Grav/Common/Service/ConfigServiceProvider.php deleted file mode 100644 index 28a6ac4..0000000 --- a/src/system/src/Grav/Common/Service/ConfigServiceProvider.php +++ /dev/null @@ -1,64 +0,0 @@ -setup = is_file($file) ? (array) include $file : []; - $this->environment = isset($this->setup['environment']) ? $this->setup['environment'] : null; - - $container['blueprints'] = function ($c) use ($self) { - return $self->loadMasterBlueprints($c); - }; - - $container['config'] = function ($c) use ($self) { - return $self->loadMasterConfig($c); - }; - } - - public function loadMasterConfig(Container $container) - { - $environment = $this->getEnvironment($container); - - $config = new Config($this->setup, $container, $environment); - - return $config; - } - - public function loadMasterBlueprints(Container $container) - { - $environment = $this->getEnvironment($container); - $file = CACHE_DIR . 'compiled/blueprints/master-'.$environment.'.php'; - $data = is_file($file) ? (array) include $file : []; - - return new Blueprints($data, $container); - } - - public function getEnvironment(Container $container) - { - if (!isset($this->environment)) { - $this->environment = $container['uri']->environment(); - } - - return $this->environment; - } -} diff --git a/src/system/src/Grav/Common/Service/ErrorServiceProvider.php b/src/system/src/Grav/Common/Service/ErrorServiceProvider.php deleted file mode 100644 index ac676ad..0000000 --- a/src/system/src/Grav/Common/Service/ErrorServiceProvider.php +++ /dev/null @@ -1,44 +0,0 @@ -setPageTitle('Crikey! There was an error...'); - $error_page->setEditor('sublime'); - $error_page->addResourcePath(GRAV_ROOT . '/system/assets'); - $error_page->addCustomCss('whoops.css'); - - $json_page = new JsonResponseHandler; - $json_page->onlyForAjaxRequests(true); - - $errors->pushHandler($error_page, 'pretty'); - $errors->pushHandler(new PlainTextHandler, 'text'); - $errors->pushHandler($json_page, 'json'); - - $logger = $container['log']; - $errors->pushHandler(function (\Exception $exception, $inspector, $run) use ($logger) { - try { - $logger->addCritical($exception->getMessage() . ' - Trace: ' . $exception->getTraceAsString()); - } catch (\Exception $e) { - echo $e; - } - }, 'log'); - - $errors->register(); - - $container['errors'] = $errors; - } -} diff --git a/src/system/src/Grav/Common/Service/LoggerServiceProvider.php b/src/system/src/Grav/Common/Service/LoggerServiceProvider.php deleted file mode 100644 index edaf921..0000000 --- a/src/system/src/Grav/Common/Service/LoggerServiceProvider.php +++ /dev/null @@ -1,20 +0,0 @@ -pushHandler(new StreamHandler($log_file, Logger::DEBUG)); - - $container['log'] = $log; - } -} diff --git a/src/system/src/Grav/Common/Service/StreamsServiceProvider.php b/src/system/src/Grav/Common/Service/StreamsServiceProvider.php deleted file mode 100644 index d8f7dff..0000000 --- a/src/system/src/Grav/Common/Service/StreamsServiceProvider.php +++ /dev/null @@ -1,40 +0,0 @@ -initializeLocator($locator); - - return $locator; - }; - - $container['streams'] = function($c) { - /** @var Config $config */ - $config = $c['config']; - - /** @var UniformResourceLocator $locator */ - $locator = $c['locator']; - - // Set locator to both streams. - Stream::setLocator($locator); - ReadOnlyStream::setLocator($locator); - - return new StreamBuilder($config->getStreams($c)); - }; - } -} diff --git a/src/system/src/Grav/Common/Session.php b/src/system/src/Grav/Common/Session.php deleted file mode 100644 index 5be15ec..0000000 --- a/src/system/src/Grav/Common/Session.php +++ /dev/null @@ -1,53 +0,0 @@ -grav = $grav; - } - - public function init() - { - /** @var Uri $uri */ - $uri = $this->grav['uri']; - $config = $this->grav['config']; - - $is_admin = false; - - $session_timeout = $config->get('system.session.timeout', 1800); - $session_path = $config->get('system.session.path', '/' . ltrim($uri->rootUrl(false), '/')); - - // Activate admin if we're inside the admin path. - if ($config->get('plugins.admin.enabled')) { - $route = $config->get('plugins.admin.route'); - $base = '/' . trim($route, '/'); - if (substr($uri->route(), 0, strlen($base)) == $base) { - $session_timeout = $config->get('plugins.admin.session.timeout', 1800); - $is_admin = true; - } - } - - if ($config->get('system.session.enabled') || $is_admin) { - - - // Define session service. - parent::__construct( - $session_timeout, - $session_path - ); - - $unique_identifier = GRAV_ROOT; - $this->setName($config->get('system.session.name', 'grav_site') . '-' . substr(md5($unique_identifier), 0, 7) . ($is_admin ? '-admin' : '')); - $this->start(); - setcookie(session_name(), session_id(), time() + $session_timeout, $session_path); - } - } -} diff --git a/src/system/src/Grav/Common/Taxonomy.php b/src/system/src/Grav/Common/Taxonomy.php deleted file mode 100644 index e280e81..0000000 --- a/src/system/src/Grav/Common/Taxonomy.php +++ /dev/null @@ -1,120 +0,0 @@ -taxonomy_map = array(); - $this->grav = $grav; - } - - /** - * Takes an individual page and processes the taxonomies configured in its header. It - * then adds those taxonomies to the map - * - * @param Page $page the page to process - * @param array $page_taxonomy - */ - public function addTaxonomy(Page $page, $page_taxonomy = null) - { - if (!$page_taxonomy) { - $page_taxonomy = $page->taxonomy(); - } - - if (!$page->published() || empty($page_taxonomy)) { - return; - } - - /** @var Config $config */ - $config = $this->grav['config']; - if ($config->get('site.taxonomies')) { - foreach ((array) $config->get('site.taxonomies') as $taxonomy) { - if (isset($page_taxonomy[$taxonomy])) { - foreach ((array) $page_taxonomy[$taxonomy] as $item) { - $this->taxonomy_map[$taxonomy][(string) $item][$page->path()] = array('slug' => $page->slug()); - } - } - } - } - } - - /** - * Returns a new Page object with the sub-pages containing all the values set for a - * particular taxonomy. - * - * @param array $taxonomies taxonomies to search, eg ['tag'=>['animal','cat']] - * @param string $operator can be 'or' or 'and' (defaults to 'or') - * @return Collection Collection object set to contain matches found in the taxonomy map - */ - public function findTaxonomy($taxonomies, $operator = 'and') - { - $matches = []; - $results = []; - - foreach ((array)$taxonomies as $taxonomy => $items) { - foreach ((array) $items as $item) { - if (isset($this->taxonomy_map[$taxonomy][$item])) { - $matches[] = $this->taxonomy_map[$taxonomy][$item]; - } - } - } - - if (strtolower($operator) == 'or') { - foreach ($matches as $match) { - $results = array_merge($results, $match); - } - } else { - $results = $matches ? array_pop($matches) : []; - foreach ($matches as $match) { - $results = array_intersect_key($results, $match); - } - } - - return new Collection($results, ['taxonomies' => $taxonomies]); - } - - /** - * Gets and Sets the taxonomy map - * - * @param array $var the taxonomy map - * @return array the taxonomy map - */ - public function taxonomy($var = null) - { - if ($var) { - $this->taxonomy_map = $var; - } - return $this->taxonomy_map; - } -} diff --git a/src/system/src/Grav/Common/Theme.php b/src/system/src/Grav/Common/Theme.php deleted file mode 100644 index 1219512..0000000 --- a/src/system/src/Grav/Common/Theme.php +++ /dev/null @@ -1,23 +0,0 @@ -name = $name; - - parent::__construct($name, $grav, $config); - } -} diff --git a/src/system/src/Grav/Common/Themes.php b/src/system/src/Grav/Common/Themes.php deleted file mode 100644 index 1b9051c..0000000 --- a/src/system/src/Grav/Common/Themes.php +++ /dev/null @@ -1,296 +0,0 @@ -grav = $grav; - $this->config = $grav['config']; - - // Register instance as autoloader for theme inheritance - spl_autoload_register([$this, 'autoloadTheme']); - } - - public function init() - { - /** @var EventDispatcher $events */ - $events = $this->grav['events']; - - /** @var Themes $themes */ - $themes = $this->grav['themes']; - $themes->configure(); - - try { - $instance = $themes->load(); - } catch (\InvalidArgumentException $e) { - throw new \RuntimeException($this->current(). ' theme could not be found'); - } - - if ($instance instanceof EventSubscriberInterface) { - $events->addSubscriber($instance); - } - - $this->grav['theme'] = $instance; - } - - /** - * Return list of all theme data with their blueprints. - * - * @return array - */ - public function all() - { - $list = array(); - $locator = Grav::instance()['locator']; - - $themes = (array) $locator->findResources('themes://', false); - foreach ($themes as $path) { - $iterator = new \DirectoryIterator($path); - - /** @var \DirectoryIterator $directory */ - foreach ($iterator as $directory) { - if (!$directory->isDir() || $directory->isDot()) { - continue; - } - - $type = $directory->getBasename(); - $list[$type] = self::get($type); - } - } - ksort($list); - - return $list; - } - - /** - * Get theme configuration or throw exception if it cannot be found. - * - * @param string $name - * @return Data - * @throws \RuntimeException - */ - public function get($name) - { - if (!$name) { - throw new \RuntimeException('Theme name not provided.'); - } - - $blueprints = new Blueprints('themes://'); - $blueprint = $blueprints->get("{$name}/blueprints"); - $blueprint->name = $name; - - // Find thumbnail. - $thumb = "themes://{$name}/thumbnail.jpg"; - if ($path = $this->grav['locator']->findResource($thumb, false)) { - $blueprint->set('thumbnail', $this->grav['base_url'] . '/' . $path); - } - - // Load default configuration. - $file = CompiledYamlFile::instance("themes://{$name}/{$name}" . YAML_EXT); - $obj = new Data($file->content(), $blueprint); - - // Override with user configuration. - $obj->merge($this->grav['config']->get('themes.' . $name) ?: []); - - // Save configuration always to user/config. - $file = CompiledYamlFile::instance("config://themes/{$name}" . YAML_EXT); - $obj->file($file); - - return $obj; - } - - /** - * Return name of the current theme. - * - * @return string - */ - public function current() - { - return (string) $this->config->get('system.pages.theme'); - } - - /** - * Load current theme. - * - * @return Theme|object - */ - public function load() - { - // NOTE: ALL THE LOCAL VARIABLES ARE USED INSIDE INCLUDED FILE, DO NOT REMOVE THEM! - $grav = $this->grav; - $config = $this->config; - $name = $this->current(); - - /** @var UniformResourceLocator $locator */ - $locator = $grav['locator']; - $file = $locator('theme://theme.php') ?: $locator("theme://{$name}.php"); - - $inflector = $grav['inflector']; - - if ($file) { - // Local variables available in the file: $grav, $config, $name, $file - $class = include $file; - - if (!is_object($class)) { - $themeClassFormat = [ - 'Grav\\Theme\\'.ucfirst($name), - 'Grav\\Theme\\'.$inflector->camelize($name) - ]; - $themeClassName = false; - - foreach ($themeClassFormat as $themeClass) { - if (class_exists($themeClass)) { - $themeClassName = $themeClass; - $class = new $themeClassName($grav, $config, $name); - break; - } - } - } - } elseif (!$locator('theme://') && !defined('GRAV_CLI')) { - exit("Theme '$name' does not exist, unable to display page."); - } - - if (empty($class)) { - $class = new Theme($grav, $config, $name); - } - - return $class; - } - - /** - * Configure and prepare streams for current template. - * - * @throws \InvalidArgumentException - */ - public function configure() - { - $name = $this->current(); - $config = $this->config; - - $this->loadConfiguration($name, $config); - - /** @var UniformResourceLocator $locator */ - $locator = $this->grav['locator']; - - $registered = stream_get_wrappers(); - $schemes = $config->get( - "themes.{$name}.streams.schemes", - ['theme' => ['paths' => $locator->findResources("themes://{$name}", false)]] - ); - - foreach ($schemes as $scheme => $config) { - if (isset($config['paths'])) { - $locator->addPath($scheme, '', $config['paths']); - } - if (isset($config['prefixes'])) { - foreach ($config['prefixes'] as $prefix => $paths) { - $locator->addPath($scheme, $prefix, $paths); - } - } - - if (in_array($scheme, $registered)) { - stream_wrapper_unregister($scheme); - } - $type = !empty($config['type']) ? $config['type'] : 'ReadOnlyStream'; - if ($type[0] != '\\') { - $type = '\\RocketTheme\\Toolbox\\StreamWrapper\\' . $type; - } - - if (!stream_wrapper_register($scheme, $type)) { - throw new \InvalidArgumentException("Stream '{$type}' could not be initialized."); - } - } - - // Load languages after streams has been properly initialized - $this->loadLanguages($this->config); - } - - /** - * Load theme configuration. - * - * @param string $name Theme name - * @param Config $config Configuration class - */ - protected function loadConfiguration($name, Config $config) - { - $themeConfig = CompiledYamlFile::instance("themes://{$name}/{$name}" . YAML_EXT)->content(); - $config->joinDefaults("themes.{$name}", $themeConfig); - } - - /** - * Load theme languages. - * - * @param Config $config Configuration class - */ - protected function loadLanguages(Config $config) - { - /** @var UniformResourceLocator $locator */ - $locator = $this->grav['locator']; - - if ($config->get('system.languages.translations', true)) { - $languageFiles = array_reverse($locator->findResources("theme://languages" . YAML_EXT)); - - $languages = []; - foreach ($languageFiles as $language) { - $languages[] = CompiledYamlFile::instance($language)->content(); - } - - if ($languages) { - $languages = call_user_func_array('array_replace_recursive', $languages); - $config->getLanguages()->mergeRecursive($languages); - } - } - } - - /** - * Autoload theme classes for inheritance - * - * @param string $class Class name - * - * @return mixed false FALSE if unable to load $class; Class name if - * $class is successfully loaded - */ - protected function autoloadTheme($class) - { - /** @var UniformResourceLocator $locator */ - $locator = $this->grav['locator']; - - $prefix = "Grav\\Theme"; - if (false !== strpos($class, $prefix)) { - // Remove prefix from class - $class = substr($class, strlen($prefix)); - - // Replace namespace tokens to directory separators - $path = ltrim(preg_replace('#\\\|_(?!.+\\\)#', '/', $class), '/'); - $file = $locator->findResource("themes://{$path}/{$path}.php"); - - // Load class - if (stream_resolve_include_path($file)) { - return include_once($file); - } - } - - return false; - } -} diff --git a/src/system/src/Grav/Common/Twig/Twig.php b/src/system/src/Grav/Common/Twig/Twig.php deleted file mode 100644 index 381efe5..0000000 --- a/src/system/src/Grav/Common/Twig/Twig.php +++ /dev/null @@ -1,357 +0,0 @@ -grav = $grav; - $this->twig_paths = []; - } - - /** - * Twig initialization that sets the twig loader chain, then the environment, then extensions - * and also the base set of twig vars - */ - public function init() - { - if (!isset($this->twig)) { - /** @var Config $config */ - $config = $this->grav['config']; - /** @var UniformResourceLocator $locator */ - $locator = $this->grav['locator']; - $debugger = $this->grav['debugger']; - - /** @var Language $language */ - $language = $this->grav['language']; - - $active_language = $language->getActive(); - - $language_append = $active_language ? '/'.$active_language : ''; - - // handle language templates if available - if ($language->enabled()) { - $lang_templates = $locator->findResource('theme://templates/'.($active_language ? $active_language : $language->getDefault())); - if ($lang_templates) { - $this->twig_paths[] = $lang_templates; - } - } - - $this->twig_paths = array_merge($this->twig_paths, $locator->findResources('theme://templates')); - - $this->grav->fireEvent('onTwigTemplatePaths'); - - $this->loader = new \Twig_Loader_Filesystem($this->twig_paths); - $this->loaderArray = new \Twig_Loader_Array(array()); - $loader_chain = new \Twig_Loader_Chain(array($this->loaderArray, $this->loader)); - - $params = $config->get('system.twig'); - if (!empty($params['cache'])) { - $params['cache'] = $locator->findResource('cache://twig', true, true); - } - - $this->twig = new TwigEnvironment($loader_chain, $params); - - if ($config->get('system.twig.undefined_functions')) { - $this->twig->registerUndefinedFunctionCallback(function ($name) { - if (function_exists($name)) { - return new \Twig_Function_Function($name); - } - - return new \Twig_Function_Function(function() {}); - }); - } - - if ($config->get('system.twig.undefined_filters')) { - $this->twig->registerUndefinedFilterCallback(function ($name) { - if (function_exists($name)) { - return new \Twig_Filter_Function($name); - } - - return new \Twig_Filter_Function(function() {}); - }); - } - - $this->grav->fireEvent('onTwigInitialized'); - - // set default date format if set in config - if ($config->get('system.pages.dateformat.long')) { - $this->twig->getExtension('core')->setDateFormat($config->get('system.pages.dateformat.long')); - } - // enable the debug extension if required - if ($config->get('system.twig.debug')) { - $this->twig->addExtension(new \Twig_Extension_Debug()); - } - $this->twig->addExtension(new TwigExtension()); - - $this->grav->fireEvent('onTwigExtensions'); - - // Set some standard variables for twig - $this->twig_vars = array( - 'config' => $config, - 'uri' => $this->grav['uri'], - 'base_dir' => rtrim(ROOT_DIR, '/'), - 'base_url' => $this->grav['base_url'] . $language_append, - 'base_url_simple' => $this->grav['base_url'], - 'base_url_absolute' => $this->grav['base_url_absolute'] . $language_append, - 'base_url_relative' => $this->grav['base_url_relative'] . $language_append, - 'theme_dir' => $locator->findResource('theme://'), - 'theme_url' => $this->grav['base_url'] .'/'. $locator->findResource('theme://', false), - 'site' => $config->get('site'), - 'assets' => $this->grav['assets'], - 'taxonomy' => $this->grav['taxonomy'], - 'browser' => $this->grav['browser'], - ); - } - } - - /** - * @return \Twig_Environment - */ - public function twig() - { - return $this->twig; - } - - /** - * @return \Twig_Loader_Filesystem - */ - public function loader() - { - return $this->loader; - } - - /** - * Adds or overrides a template. - * - * @param string $name The template name - * @param string $template The template source - */ - public function setTemplate($name, $template) - { - $this->loaderArray->setTemplate($name, $template); - } - - /** - * Twig process that renders a page item. It supports two variations: - * 1) Handles modular pages by rendering a specific page based on its modular twig template - * 2) Renders individual page items for twig processing before the site rendering - * - * @param Page $item The page item to render - * @param string $content Optional content override - * @return string The rendered output - * @throws \Twig_Error_Loader - */ - public function processPage(Page $item, $content = null) - { - $content = $content !== null ? $content : $item->content(); - - // override the twig header vars for local resolution - $this->grav->fireEvent('onTwigPageVariables', new Event(['page' => $item])); - $twig_vars = $this->twig_vars; - - $twig_vars['page'] = $item; - $twig_vars['media'] = $item->media(); - $twig_vars['header'] = $item->header(); - - $local_twig = clone($this->twig); - $modular_twig = $item->modularTwig(); - $process_twig = isset($item->header()->process['twig']) ? $item->header()->process['twig'] : false; - - try { - // Process Modular Twig - if ($modular_twig) { - $twig_vars['content'] = $content; - $template = $item->template() . TEMPLATE_EXT; - $output = $content = $local_twig->render($template, $twig_vars); - } - - // Process in-page Twig - if (!$modular_twig || ($modular_twig && $process_twig)) { - $name = '@Page:' . $item->path(); - $this->setTemplate($name, $content); - $output = $local_twig->render($name, $twig_vars); - } - } catch (\Twig_Error_Loader $e) { - throw new \RuntimeException($e->getRawMessage(), 404, $e); - } - - return $output; - } - - /** - * Process a Twig template directly by using a template name - * and optional array of variables - * - * @param string $template template to render with - * @param array $vars Optional variables - * @return string - */ - public function processTemplate($template, $vars = array()) - { - // override the twig header vars for local resolution - $this->grav->fireEvent('onTwigTemplateVariables'); - $vars += $this->twig_vars; - - try { - $output = $this->twig->render($template, $vars); - } catch (\Twig_Error_Loader $e) { - throw new \RuntimeException($e->getRawMessage(), 404, $e); - } - - return $output; - - } - - - /** - * Process a Twig template directly by using a Twig string - * and optional array of variables - * - * @param string $string string to render. - * @param array $vars Optional variables - * @return string - */ - public function processString($string, array $vars = array()) - { - // override the twig header vars for local resolution - $this->grav->fireEvent('onTwigStringVariables'); - $vars += $this->twig_vars; - - $name = '@Var:' . $string; - $this->setTemplate($name, $string); - - try { - $output = $this->twig->render($name, $vars); - } catch (\Twig_Error_Loader $e) { - throw new \RuntimeException($e->getRawMessage(), 404, $e); - } - - return $output; - } - - /** - * Twig process that renders the site layout. This is the main twig process that renders the overall - * page and handles all the layout for the site display. - * - * @param string $format Output format (defaults to HTML). - * @return string the rendered output - * @throws \RuntimeException - */ - public function processSite($format = null) - { - // set the page now its been processed - $this->grav->fireEvent('onTwigSiteVariables'); - $pages = $this->grav['pages']; - $page = $this->grav['page']; - $content = $page->content(); - $config = $this->grav['config']; - - $twig_vars = $this->twig_vars; - - $twig_vars['pages'] = $pages->root(); - $twig_vars['page'] = $page; - $twig_vars['header'] = $page->header(); - $twig_vars['media'] = $page->media(); - $twig_vars['content'] = $content; - $ext = '.' . ($format ? $format : 'html') . TWIG_EXT; - - // determine if params are set, if so disable twig cache - $params = $this->grav['uri']->params(null, true); - if (!empty($params)) { - $this->twig->setCache(false); - } - - // Get Twig template layout - $template = $this->template($page->template() . $ext); - - try { - $output = $this->twig->render($template, $twig_vars); - } catch (\Twig_Error_Loader $e) { - $error_msg = $e->getMessage(); - // Try html version of this template if initial template was NOT html - if ($ext != '.html'.TWIG_EXT) { - try { - $output = $this->twig->render($page->template().'.html'.TWIG_EXT, $twig_vars); - } catch (\Twig_Error_Loader $e) { - throw new \RuntimeException($error_msg, 400, $e); - } - } else { - throw new \RuntimeException($error_msg, 400, $e); - } - } - - return $output; - } - - /** - * Simple helper method to get the twig template if it has already been set, else return - * the one being passed in - * - * @param string $template the template name - * @return string the template name - */ - public function template($template) - { - if (isset($this->template)) { - return $this->template; - } else { - return $template; - } - } -} diff --git a/src/system/src/Grav/Common/Twig/TwigEnvironment.php b/src/system/src/Grav/Common/Twig/TwigEnvironment.php deleted file mode 100644 index c7067f0..0000000 --- a/src/system/src/Grav/Common/Twig/TwigEnvironment.php +++ /dev/null @@ -1,16 +0,0 @@ -grav = Grav::instance(); - $this->debugger = isset($this->grav['debugger']) ? $this->grav['debugger'] : null; - $this->config = $this->grav['config']; - } - - /** - * Returns extension name. - * - * @return string - */ - public function getName() - { - return 'GravTwigExtension'; - } - - /** - * Register some standard globals - * - * @return array - */ - public function getGlobals() - { - return array( - 'grav' => $this->grav, - ); - } - - /** - * Return a list of all filters. - * - * @return array - */ - public function getFilters() - { - return [ - new \Twig_SimpleFilter('*ize', [$this,'inflectorFilter']), - new \Twig_SimpleFilter('absolute_url', [$this, 'absoluteUrlFilter']), - new \Twig_SimpleFilter('contains', [$this, 'containsFilter']), - new \Twig_SimpleFilter('defined', [$this, 'definedDefaultFilter']), - new \Twig_SimpleFilter('ends_with', [$this, 'endsWithFilter']), - new \Twig_SimpleFilter('fieldName', [$this,'fieldNameFilter']), - new \Twig_SimpleFilter('ksort', [$this,'ksortFilter']), - new \Twig_SimpleFilter('ltrim', [$this, 'ltrimFilter']), - new \Twig_SimpleFilter('markdown', [$this, 'markdownFilter']), - new \Twig_SimpleFilter('md5', [$this,'md5Filter']), - new \Twig_SimpleFilter('nicetime', [$this, 'nicetimeFilter']), - new \Twig_SimpleFilter('randomize', [$this,'randomizeFilter']), - new \Twig_SimpleFilter('modulus', [$this,'modulusFilter']), - new \Twig_SimpleFilter('rtrim', [$this, 'rtrimFilter']), - new \Twig_SimpleFilter('safe_email', [$this,'safeEmailFilter']), - new \Twig_SimpleFilter('safe_truncate', ['\Grav\Common\Utils','safeTruncate']), - new \Twig_SimpleFilter('safe_truncate_html', ['\Grav\Common\Utils','safeTruncateHTML']), - new \Twig_SimpleFilter('sort_by_key', [$this,'sortByKeyFilter']), - new \Twig_SimpleFilter('starts_with', [$this, 'startsWithFilter']), - new \Twig_SimpleFilter('t', [$this, 'translate']), - new \Twig_SimpleFilter('ta', [$this, 'translateArray']), - new \Twig_SimpleFilter('truncate', ['\Grav\Common\Utils','truncate']), - new \Twig_SimpleFilter('truncate_html', ['\Grav\Common\Utils','truncateHTML']), - ]; - } - - /** - * Return a list of all functions. - * - * @return array - */ - public function getFunctions() - { - return [ - new \Twig_SimpleFunction('array', [$this, 'arrayFunc']), - new \Twig_simpleFunction('authorize', [$this, 'authorize']), - new \Twig_SimpleFunction('debug', [$this, 'dump'], ['needs_context' => true, 'needs_environment' => true]), - new \Twig_SimpleFunction('dump', [$this, 'dump'], ['needs_context' => true, 'needs_environment' => true]), - new \Twig_SimpleFunction('gist', [$this, 'gistFunc']), - new \Twig_simpleFunction('random_string', [$this, 'randomStringFunc']), - new \Twig_SimpleFunction('repeat', [$this, 'repeatFunc']), - new \Twig_SimpleFunction('string', [$this, 'stringFunc']), - new \Twig_simpleFunction('t', [$this, 'translate']), - new \Twig_simpleFunction('ta', [$this, 'translateArray']), - new \Twig_SimpleFunction('url', [$this, 'urlFunc']), - new \Twig_SimpleFunction('evaluate', [$this, 'evaluateFunc']), - ]; - } - - /** - * Filters field name by changing dot notation into array notation. - * - * @param string $str - * @return string - */ - public function fieldNameFilter($str) - { - $path = explode('.', $str); - - return array_shift($path) . ($path ? '[' . implode('][', $path) . ']' : ''); - } - - /** - * Protects email address. - * - * @param string $str - * @return string - */ - public function safeEmailFilter($str) - { - $email = ''; - $str_len = strlen($str); - for ($i = 0; $i < $str_len; $i++) { - $email .= "&#" . ord($str[$i]). ";"; - } - return $email; - } - - /** - * Returns array in a random order. - * - * @param array $original - * @param int $offset Can be used to return only slice of the array. - * @return array - */ - public function randomizeFilter($original, $offset = 0) - { - if (!is_array($original)) { - return $original; - } - - if ($original instanceof \Traversable) { - $original = iterator_to_array($original, false); - } - - $sorted = []; - $random = array_slice($original, $offset); - shuffle($random); - - $sizeOf = sizeof($original); - for ($x=0; $x < $sizeOf; $x++) { - if ($x < $offset) { - $sorted[] = $original[$x]; - } else { - $sorted[] = array_shift($random); - } - } - return $sorted; - } - - /** - * Returns the modulus of an integer - * - * @param int $number - * @param int $divider - * @param array $items array of items to select from to return - * @return int - */ - public function modulusFilter($number, $divider, $items = null) - { - if (is_string($number)) { - $number = strlen($number); - } - - $remainder = $number % $divider; - - if (is_array($items)) { - if (isset($items[$remainder])) { - return $items[$remainder]; - } else { - return $items[0]; - } - } - return $remainder; - } - - /** - * Inflector supports following notations: - * - * {{ 'person'|pluralize }} => people - * {{ 'shoes'|singularize }} => shoe - * {{ 'welcome page'|titleize }} => "Welcome Page" - * {{ 'send_email'|camelize }} => SendEmail - * {{ 'CamelCased'|underscorize }} => camel_cased - * {{ 'Something Text'|hyphenize }} => something-text - * {{ 'something_text_to_read'|humanize }} => "Something text to read" - * {{ '181'|monthize }} => 6 - * {{ '10'|ordinalize }} => 10th - * - * @param string $action - * @param string $data - * @param int $count - * @return mixed - */ - public function inflectorFilter($action, $data, $count = null) - { - $action = $action.'ize'; - - $inflector = $this->grav['inflector']; - - if (in_array( - $action, - ['titleize','camelize','underscorize','hyphenize', 'humanize','ordinalize','monthize'] - )) { - return $inflector->$action($data); - } elseif (in_array($action, ['pluralize','singularize'])) { - if ($count) { - return $inflector->$action($data, $count); - } else { - return $inflector->$action($data); - } - } else { - return $data; - } - } - - /** - * Return MD5 hash from the input. - * - * @param string $str - * @return string - */ - public function md5Filter($str) - { - return md5($str); - } - - /** - * Sorts a collection by key - * - * @param array $input - * @param string $filter - * @param array|int $direction - * - * @return string - */ - public function sortByKeyFilter(array $input, $filter, $direction = SORT_ASC) - { - $output = []; - - if (!$input) { - return $output; - } - - foreach ($input as $key => $row) { - $output[$key] = $row[$filter]; - } - - array_multisort($output, $direction, $input); - - return $input; - } - - /** - * Return ksorted collection. - * - * @param array $array - * @return array - */ - public function ksortFilter(array $array) - { - ksort($array); - return $array; - } - - /** - * determine if a string contains another - * - * @param String $haystack - * @param String $needle - * - * @return boolean - */ - public function containsFilter($haystack, $needle) - { - return (strpos($haystack, $needle) !== false); - } - - /** - * displays a facebook style 'time ago' formatted date/time - * - * @param $date - * @param $long_strings - * @param String - * - * @return boolean - */ - public function nicetimeFilter($date, $long_strings = true) - { - if (empty($date)) { - return $this->grav['language']->translate('NICETIME.NO_DATE_PROVIDED', null, true); - } - - if ($long_strings) { - $periods = array("NICETIME.SECOND", "NICETIME.MINUTE", "NICETIME.HOUR", "NICETIME.DAY", "NICETIME.WEEK", "NICETIME.MONTH", "NICETIME.YEAR", "NICETIME.DECADE"); - } else { - $periods = array("NICETIME.SEC", "NICETIME.MIN", "NICETIME.HR", "NICETIME.DAY", "NICETIME.WK", "NICETIME.MO", "NICETIME.YR", "NICETIME.DEC"); - } - - $lengths = array("60","60","24","7","4.35","12","10"); - - $now = time(); - - // check if unix timestamp - if ((string)(int)$date == $date) { - $unix_date = $date; - } else { - $unix_date = strtotime($date); - } - - // check validity of date - if (empty($unix_date)) { - return $this->grav['language']->translate('NICETIME.BAD_DATE', null, true); - } - - // is it future date or past date - if ($now > $unix_date) { - $difference = $now - $unix_date; - $tense = $this->grav['language']->translate('NICETIME.AGO', null, true); - - } else { - $difference = $unix_date - $now; - $tense = $this->grav['language']->translate('NICETIME.FROM_NOW', null, true); - } - - for ($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) { - $difference /= $lengths[$j]; - } - - $difference = round($difference); - - if ($difference != 1) { - $periods[$j] .= '_PLURAL'; - } - - $periods[$j] = $this->grav['language']->translate($periods[$j], null, true); - - return "$difference $periods[$j] {$tense}"; - } - - public function absoluteUrlFilter($string) - { - $url = $this->grav['uri']->base(); - $string = preg_replace('/((?:href|src) *= *[\'"](?!(http|ftp)))/i', "$1$url", $string); - return $string; - - } - - public function markdownFilter($string) - { - $page = $this->grav['page']; - $defaults = $this->config->get('system.pages.markdown'); - - // Initialize the preferred variant of Parsedown - if ($defaults['extra']) { - $parsedown = new ParsedownExtra($page, $defaults); - } else { - $parsedown = new Parsedown($page, $defaults); - } - - $string = $parsedown->text($string); - - return $string; - } - - public function startsWithFilter($haystack, $needle) - { - return Utils::startsWith($haystack, $needle); - } - - public function endsWithFilter($haystack, $needle) - { - return Utils::endsWith($haystack, $needle); - } - - public function definedDefaultFilter($value, $default = null) - { - if (isset($value)) { - return $value; - } else { - return $default; - } - } - - public function rtrimFilter($value, $chars = null) - { - return rtrim($value, $chars); - } - - public function ltrimFilter($value, $chars = null) - { - return ltrim($value, $chars); - } - - public function translate() - { - return $this->grav['language']->translate(func_get_args()); - } - - public function translateArray($key, $index, $lang = null) - { - return $this->grav['language']->translateArray($key, $index, $lang); - } - - /** - * Repeat given string x times. - * - * @param string $input - * @param int $multiplier - * @return string - */ - public function repeatFunc($input, $multiplier) - { - return str_repeat($input, $multiplier); - } - - /** - * Return URL to the resource. - * - * @example {{ url('theme://images/logo.png')|default('http://www.placehold.it/150x100/f4f4f4') }} - * - * @param string $input Resource to be located. - * @param bool $domain True to include domain name. - * @return string|null Returns url to the resource or null if resource was not found. - */ - public function urlFunc($input, $domain = false) - { - if (!trim((string) $input)) { - return false; - } - - if (strpos((string) $input, '://')) { - /** @var UniformResourceLocator $locator */ - $locator = $this->grav['locator']; - - // Get relative path to the resource (or false if not found). - $resource = $locator->findResource((string) $input, false); - } else { - $resource = (string) $input; - } - - /** @var Uri $uri */ - $uri = $this->grav['uri']; - - return $resource ? rtrim($uri->rootUrl($domain), '/') . '/' . $resource : null; - } - - /** - * Evaluate a string - * - * @example {{ evaluate('grav.language.getLanguage') }} - * - * @param string $input String to be evaluated - * @return string Returns the evaluated string - */ - public function evaluateFunc($input) - { - return $this->grav['twig']->processString("{{ $input }}"); - } - - /** - * Based on Twig_Extension_Debug / twig_var_dump - * (c) 2011 Fabien Potencier - * - * @param \Twig_Environment $env - * @param $context - */ - public function dump(\Twig_Environment $env, $context) - { - if (!$env->isDebug() || !$this->debugger) { - return; - } - - $count = func_num_args(); - if (2 === $count) { - $data = []; - foreach ($context as $key => $value) { - if (is_object($value)) { - if (method_exists($value, 'toArray')) { - $data[$key] = $value->toArray(); - } else { - $data[$key] = "Object (" . get_class($value) . ")"; - } - } else { - $data[$key] = $value; - } - } - $this->debugger->addMessage($data, 'debug'); - } else { - for ($i = 2; $i < $count; $i++) { - $this->debugger->addMessage(func_get_arg($i), 'debug'); - } - } - } - - /** - * Output a Gist - * - * @param string $id - * @return string - */ - public function gistFunc($id) - { - return ''; - } - - /** - * Generate a random string - * - * @param int $count - * - * @return string - */ - public function randomStringFunc($count = 5) - { - return Utils::generateRandomString($count); - } - - /** - * Cast a value to array - * - * @param $value - * - * @return array - */ - public function arrayFunc($value) - { - return (array) $value; - } - - /** - * Returns a string from a value. If the value is array, return it json encoded - * - * @param $value - * - * @return string - */ - public function stringFunc($value) - { - if (is_array($value)) { //format the array as a string - return json_encode($value); - } else { - return $value; - } - } - - /** - * Translate a string - * - * @return string - */ - public function translateFunc() - { - return $this->grav['language']->translate(func_get_args()); - } - - /** - * Authorize an action. Returns true if the user is logged in and has the right to execute $action. - * - * @param string $action - * - * @return bool - */ - public function authorize($action) - { - if (!$this->grav['user']->authenticated) { - return false; - } - - $action = (array)$action; - - foreach ($action as $a) { - if ($this->grav['user']->authorize($a)) { - return true; - } - } - - return false; - } -} diff --git a/src/system/src/Grav/Common/Twig/WriteCacheFileTrait.php b/src/system/src/Grav/Common/Twig/WriteCacheFileTrait.php deleted file mode 100644 index ec0d93c..0000000 --- a/src/system/src/Grav/Common/Twig/WriteCacheFileTrait.php +++ /dev/null @@ -1,39 +0,0 @@ -get('system.twig.umask_fix', false); - } - - if (self::$umask) { - if (!is_dir(dirname($file))) { - $old = umask(0002); - mkdir(dirname($file), 0777, true); - umask($old); - } - parent::writeCacheFile($file, $content); - chmod($file, 0775); - } else { - parent::writeCacheFile($file, $content); - } - } -} diff --git a/src/system/src/Grav/Common/Uri.php b/src/system/src/Grav/Common/Uri.php deleted file mode 100644 index 0473d39..0000000 --- a/src/system/src/Grav/Common/Uri.php +++ /dev/null @@ -1,575 +0,0 @@ -host = 'localhost'; - } else { - $this->host = $name; - } - - $this->base = $base; - $this->root = $base . $root_path; - $this->url = $base . $uri; - } - - /** - * Initializes the URI object based on the url set on the object - */ - public function init() - { - $grav = Grav::instance(); - - $config = $grav['config']; - $language = $grav['language']; - - // resets - $this->paths = []; - $this->params = []; - $this->query = []; - - // get any params and remove them - $uri = str_replace($this->root, '', $this->url); - - // remove double slashes - $uri = preg_replace('#/{2,}#', '/', $uri); - - // remove the setup.php based base if set: - $setup_base = $grav['pages']->base(); - if ($setup_base) { - $uri = str_replace($setup_base, '', $uri); - } - - // If configured to, redirect trailing slash URI's with a 301 redirect - if ($config->get('system.pages.redirect_trailing_slash', false) && $uri != '/' && Utils::endsWith($uri, '/')) { - $grav->redirect(rtrim($uri, '/'), 301); - } - - // process params - $uri = $this->processParams($uri, $config->get('system.param_sep')); - - // set active language - $uri = $language->setActiveFromUri($uri); - - // split the URL and params - $bits = parse_url($uri); - - // process query string - if (isset($bits['query']) && isset($bits['path'])) { - $this->query = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING); - $uri = $bits['path']; - } - - // remove the extension if there is one set - $parts = pathinfo($uri); - - // set the original basename - $this->basename = $parts['basename']; - - // set the extension - if (isset($parts['extension'])) { - $this->extension = $parts['extension']; - } - - $valid_page_types = implode('|', $config->get('system.pages.types')); - - if (preg_match("/\.(".$valid_page_types.")$/", $parts['basename'])) { - $uri = rtrim(str_replace(DIRECTORY_SEPARATOR, DS, $parts['dirname']), DS). '/' .$parts['filename']; - } - - // set the new url - $this->url = $this->root . $uri; - $this->path = $uri; - $this->content_path = trim(str_replace($this->base, '', $this->path), '/'); - if ($this->content_path != '') { - $this->paths = explode('/', $this->content_path); - } - } - - /** - * Process any params based in this URL, supports any valid delimiter - * - * @param $uri - * @param string $delimiter - * - * @return string - */ - private function processParams($uri, $delimiter = ':') - { - if (strpos($uri, $delimiter) !== false) { - $bits = explode('/', $uri); - $path = array(); - foreach ($bits as $bit) { - if (strpos($bit, $delimiter) !== false) { - $param = explode($delimiter, $bit); - if (count($param) == 2) { - $plain_var = filter_var(urldecode($param[1]), FILTER_SANITIZE_STRING); - $this->params[$param[0]] = $plain_var; - } - } else { - $path[] = $bit; - } - } - $uri = '/' . ltrim(implode('/', $path), '/'); - } - return $uri; - } - - /** - * Return URI path. - * - * @param string $id - * @return string - */ - public function paths($id = null) - { - if (isset($id)) { - return $this->paths[$id]; - } else { - return $this->paths; - } - } - - /** - * Return route to the current URI. By default route doesn't include base path. - * - * @param bool $absolute True to include full path. - * @param bool $domain True to include domain. Works only if first parameter is also true. - * @return string - */ - public function route($absolute = false, $domain = false) - { - return urldecode(($absolute ? $this->rootUrl($domain) : '') . '/' . implode('/', $this->paths)); - } - - /** - * Return full query string or a single query attribute. - * - * @param string $id Optional attribute. - * @return string - */ - public function query($id = null, $raw = false) - { - if (isset($id)) { - return isset($this->query[$id]) ? $this->query[$id] : null; - } else { - if ($raw) { - return $this->query; - } else { - return http_build_query($this->query); - } - } - } - - /** - * Return all or a single query parameter as a URI compatible string. - * - * @param string $id Optional parameter name. - * @param boolean $array return the array format or not - * @return null|string - */ - public function params($id = null, $array = false) - { - $config = Grav::instance()['config']; - - $params = null; - if ($id === null) { - if ($array) { - return $this->params; - } - $output = array(); - foreach ($this->params as $key => $value) { - $output[] = $key . $config->get('system.param_sep') . $value; - $params = '/'.implode('/', $output); - } - } elseif (isset($this->params[$id])) { - if ($array) { - return $this->params[$id]; - } - $params = "/{$id}". $config->get('system.param_sep') . $this->params[$id]; - } - - return $params; - } - - /** - * Get URI parameter. - * - * @param string $id - * @return bool|string - */ - public function param($id) - { - if (isset($this->params[$id])) { - return urldecode($this->params[$id]); - } else { - return false; - } - } - - /** - * Return URL. - * - * @param bool $include_host Include hostname. - * @return string - */ - public function url($include_host = false) - { - if ($include_host) { - return $this->url; - } else { - $url = (str_replace($this->base, '', rtrim($this->url, '/'))); - return $url ? $url : '/'; - } - } - - /** - * Return the Path - * - * @return String The path of the URI - */ - public function path() - { - $path = $this->path; - if ($path === '') { - $path = '/'; - } - return $path; - } - - /** - * Return the Extension of the URI - * - * @param null $default - * - * @return String The extension of the URI - */ - public function extension($default = null) - { - if (!$this->extension) { - $this->extension = $default; - } - return $this->extension; - } - - /** - * Return the host of the URI - * - * @return String The host of the URI - */ - public function host() - { - return $this->host; - } - - /** - * Gets the environment name - * - * @return String - */ - public function environment() - { - return $this->host(); - } - - - /** - * Return the basename of the URI - * - * @return String The basename of the URI - */ - public function basename() - { - return $this->basename; - } - - /** - * Return the base of the URI - * - * @return String The base of the URI - */ - public function base() - { - return $this->base; - } - - /** - * Return root URL to the site. - * - * @param bool $include_host Include hostname. - * @return mixed - */ - public function rootUrl($include_host = false) - { - if ($include_host) { - return $this->root; - } else { - $root = str_replace($this->base, '', $this->root); - return $root; - } - } - - /** - * Return current page number. - * - * @return int - */ - public function currentPage() - { - if (isset($this->params['page'])) { - return $this->params['page']; - } else { - return 1; - } - } - - /** - * Return relative path to the referrer defaulting to current or given page. - * - * @param string $default - * @param string $attributes - * @return string - */ - public function referrer($default = null, $attributes = null) - { - $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null; - - // Check that referrer came from our site. - $root = $this->rootUrl(true); - if ($referrer) { - // Referrer should always have host set and it should come from the same base address. - if (stripos($referrer, $root) !== 0) { - $referrer = null; - } - } - - if (!$referrer) { - $referrer = $default ? $default : $this->route(true, true); - } - - if ($attributes) { - $referrer .= $attributes; - } - - // Return relative path. - return substr($referrer, strlen($root)); - } - - /** - * Return the IP address of the current user - * - * @return string ip address - */ - public function ip() - { - if (getenv('HTTP_CLIENT_IP')) - $ipaddress = getenv('HTTP_CLIENT_IP'); - else if(getenv('HTTP_X_FORWARDED_FOR')) - $ipaddress = getenv('HTTP_X_FORWARDED_FOR'); - else if(getenv('HTTP_X_FORWARDED')) - $ipaddress = getenv('HTTP_X_FORWARDED'); - else if(getenv('HTTP_FORWARDED_FOR')) - $ipaddress = getenv('HTTP_FORWARDED_FOR'); - else if(getenv('HTTP_FORWARDED')) - $ipaddress = getenv('HTTP_FORWARDED'); - else if(getenv('REMOTE_ADDR')) - $ipaddress = getenv('REMOTE_ADDR'); - else - $ipaddress = 'UNKNOWN'; - return $ipaddress; - - } - - /** - * Is this an external URL? if it starts with `http` then yes, else false - * - * @param string $url the URL in question - * @return boolean is eternal state - */ - public function isExternal($url) - { - if (Utils::startsWith($url, 'http')) { - return true; - } else { - return false; - } - } - - /** - * The opposite of built-in PHP method parse_url() - * - * @param $parsed_url - * @return string - */ - public static function buildUrl($parsed_url) - { - $scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : ''; - $host = isset($parsed_url['host']) ? $parsed_url['host'] : ''; - $port = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : ''; - $user = isset($parsed_url['user']) ? $parsed_url['user'] : ''; - $pass = isset($parsed_url['pass']) ? ':' . $parsed_url['pass'] : ''; - $pass = ($user || $pass) ? "$pass@" : ''; - $path = isset($parsed_url['path']) ? $parsed_url['path'] : ''; - $query = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : ''; - $fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : ''; - return "$scheme$user$pass$host$port$path$query$fragment"; - } - - /** - * Converts links from absolute '/' or relative (../..) to a grav friendly format - * - * @param $page the current page to use as reference - * @param string $markdown_url the URL as it was written in the markdown - * - * @return string the more friendly formatted url - */ - public static function convertUrl(Page $page, $markdown_url, $type = 'link') - { - $grav = Grav::instance(); - - /** @var Grav\Common\Language\Language $language */ - $language = $grav['language']; - - // Link processing should prepend language - $language_append = ''; - if ($type == 'link' && $language->enabled()) { - $language_append = $language->getLanguageURLPrefix(); - } - - $pages_dir = $grav['locator']->findResource('page://'); - $base_url = rtrim($grav['base_url'] . $grav['pages']->base(), '/') . $language_append; - - // if absolute and starts with a base_url move on - if (pathinfo($markdown_url, PATHINFO_DIRNAME) == '.' && $page->url() == '/') { - return '/' . $markdown_url; - // no path to convert - } elseif ($base_url != '' && Utils::startsWith($markdown_url, $base_url)) { - return $markdown_url; - // if contains only a fragment - } elseif (Utils::startsWith($markdown_url, '#')) { - return $markdown_url; - } else { - $target = null; - // see if page is relative to this or absolute - if (Utils::startsWith($markdown_url, '/')) { - $normalized_url = Utils::normalizePath($base_url . $markdown_url); - $normalized_path = Utils::normalizePath($pages_dir . $markdown_url); - } else { - $normalized_url = $base_url . Utils::normalizePath($page->route() . '/' . $markdown_url); - $normalized_path = Utils::normalizePath($page->path() . '/' . $markdown_url); - } - - // special check to see if path checking is required. - $just_path = str_replace($normalized_url, '', $normalized_path); - if ($just_path == $page->path()) { - return $normalized_url; - } - - $url_bits = parse_url($normalized_path); - $full_path = ($url_bits['path']); - - if (file_exists($full_path)) { - // do nothing - } elseif (file_exists(urldecode($full_path))) { - $full_path = urldecode($full_path); - } else { - return $normalized_url; - } - - $path_info = pathinfo($full_path); - $page_path = $path_info['dirname']; - $filename = ''; - - - if ($markdown_url == '..') { - $page_path = $full_path; - } else { - // save the filename if a file is part of the path - if (is_file($full_path)) { - if ($path_info['extension'] != 'md') { - $filename = '/' . $path_info['basename']; - } - } else { - $page_path = $full_path; - } - } - - // get page instances and try to find one that fits - $instances = $grav['pages']->instances(); - if (isset($instances[$page_path])) { - $target = $instances[$page_path]; - $url_bits['path'] = $base_url . rtrim($target->route(), '/') . $filename; - return Uri::buildUrl($url_bits); - } - - return $normalized_url; - } - } -} diff --git a/src/system/src/Grav/Common/User/Authentication.php b/src/system/src/Grav/Common/User/Authentication.php deleted file mode 100644 index fc26bf8..0000000 --- a/src/system/src/Grav/Common/User/Authentication.php +++ /dev/null @@ -1,51 +0,0 @@ -exists(). - * - * @param string $username - * @return User - */ - public static function load($username) - { - $locator = self::getGrav()['locator']; - - $blueprints = new Blueprints('blueprints://'); - $blueprint = $blueprints->get('user/account'); - $file_path = $locator->findResource('account://' . $username . YAML_EXT); - $file = CompiledYamlFile::instance($file_path); - $content = $file->content(); - if (!isset($content['username'])) { - $content['username'] = $username; - } - $user = new User($content, $blueprint); - $user->file($file); - - return $user; - } - - /** - * Remove user account. - * - * @param string $username - * @return bool True is the action was performed - */ - public static function remove($username) - { - $file_path = self::getGrav()['locator']->findResource('account://' . $username . YAML_EXT); - if (file_exists($file_path) && unlink($file_path)) { - return true; - } - - return false; - } - - /** - * Authenticate user. - * - * If user password needs to be updated, new information will be saved. - * - * @param string $password Plaintext password. - * @return bool - */ - public function authenticate($password) - { - $save = false; - - // Plain-text is still stored - if ($this->password) { - if ($password !== $this->password) { - // Plain-text passwords do not match, we know we should fail but execute - // verify to protect us from timing attacks and return false regardless of - // the result - Authentication::verify($password, self::getGrav()['config']->get('system.security.default_hash')); - return false; - } else { - // Plain-text does match, we can update the hash and proceed - $save = true; - - $this->hashed_password = Authentication::create($this->password); - unset($this->password); - } - - } - - $result = Authentication::verify($password, $this->hashed_password); - - // Password needs to be updated, save the file. - if ($result == 2) { - $save = true; - $this->hashed_password = Authentication::create($password); - } - - if ($save) { - $this->save(); - } - - return (bool) $result; - } - - /** - * Save user without the username - */ - public function save() - { - $file = $this->file(); - if ($file) { - // if plain text password, hash it and remove plain text - if ($this->password) { - $this->hashed_password = Authentication::create($this->password); - unset($this->password); - } - - $username = $this->get('username'); - unset($this->username); - $file->save($this->items); - $this->set('username', $username); - } - } - - /** - * Checks user authorization to the action. - * - * @param string $action - * @return bool - */ - public function authorize($action) - { - if (empty($this->items)) { - return false; - } - - return Utils::isPositive($this->get("access.{$action}")); - } - - /** - * Checks user authorization to the action. - * Ensures backwards compatibility - * - * @param string $action - * @deprecated use authorize() - * @return bool - */ - public function authorise($action) - { - return $this->authorize($action); - } -} diff --git a/src/system/src/Grav/Common/Utils.php b/src/system/src/Grav/Common/Utils.php deleted file mode 100644 index 8c55669..0000000 --- a/src/system/src/Grav/Common/Utils.php +++ /dev/null @@ -1,390 +0,0 @@ - 'd-m-Y H:i (e.g. '.$now->format('d-m-Y H:i').')', - 'Y-m-d H:i' => 'Y-m-d H:i (e.g. '.$now->format('Y-m-d H:i').')', - 'm/d/Y h:i a' => 'm/d/Y h:i (e.g. '.$now->format('m/d/Y h:i a').')', - 'H:i d-m-Y' => 'H:i d-m-Y (e.g. '.$now->format('H:i d-m-Y').')', - 'h:i a m/d/Y' => 'h:i a m/d/Y (e.g. '.$now->format('h:i a m/d/Y').')', - ]; - $default_format = self::getGrav()['config']->get('system.pages.dateformat.default'); - if ($default_format) { - $date_formats = array_merge([$default_format => $default_format.' (e.g. '.$now->format($default_format).')'], $date_formats); - } - return $date_formats; - } - - /** - * Truncate text by number of characters but can cut off words. - * - * @param string $string - * @param int $limit Max number of characters. - * @param bool $up_to_break truncate up to breakpoint after char count - * @param string $break Break point. - * @param string $pad Appended padding to the end of the string. - * @return string - */ - public static function truncate($string, $limit = 150, $up_to_break = false, $break = " ", $pad = "…") - { - // return with no change if string is shorter than $limit - if (mb_strlen($string) <= $limit) { - return $string; - } - - // is $break present between $limit and the end of the string? - if ($up_to_break && false !== ($breakpoint = mb_strpos($string, $break, $limit))) { - if ($breakpoint < mb_strlen($string) - 1) { - $string = mb_substr($string, 0, $breakpoint) . $break; - } - } else { - $string = mb_substr($string, 0, $limit) . $pad; - } - - return $string; - } - - /** - * Truncate text by number of characters in a "word-safe" manor. - * - * @param $string - * @param int $limit - * @return string - */ - public static function safeTruncate($string, $limit = 150) - { - return static::truncate($string, $limit, true); - } - - - /** - * Truncate HTML by number of characters. not "word-safe"! - * - * @param string $text - * @param int $length - * - * @return string - */ - public static function truncateHtml($text, $length = 100) - { - return Truncator::truncate($text, $length, array('length_in_chars' => true)); - } - - /** - * Truncate HTML by number of characters in a "word-safe" manor. - * - * @param string $text - * @param int $length - * - * @return string - */ - public static function safeTruncateHtml($text, $length = 100) - { - return Truncator::truncate($text, $length, array('length_in_chars' => true, 'word_safe' => true)); - } - - /** - * Generate a random string of a given length - * - * @param int $length - * - * @return string - */ - public static function generateRandomString($length = 5) - { - return substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length); - } - - /** - * Provides the ability to download a file to the browser - * - * @param $file the full path to the file to be downloaded - * @param bool $force_download as opposed to letting browser choose if to download or render - */ - public static function download($file, $force_download = true) - { - if (file_exists($file)) { - // fire download event - self::getGrav()->fireEvent('onBeforeDownload', new Event(['file' => $file])); - - $file_parts = pathinfo($file); - $filesize = filesize($file); - - // check if this function is available, if so use it to stop any timeouts - if (function_exists('set_time_limit')) { - set_time_limit(0); - } - - ignore_user_abort(false); - - if ($force_download) { - header('Content-Description: File Transfer'); - header('Content-Type: application/octet-stream'); - header('Content-Disposition: attachment; filename=' . $file_parts['basename']); - header('Content-Transfer-Encoding: binary'); - header('Expires: 0'); - header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); - header('Pragma: public'); - } else { - header("Content-Type: " . Utils::getMimeType($file_parts['extension'])); - } - header('Content-Length: ' . $filesize); - - // 8kb chunks for now - $chunk = 8 * 1024; - - $fh = fopen($file, "rb"); - - if ($fh === false) { - return; - } - - // Repeat reading until EOF - while (!feof($fh)) { - echo fread($fh, $chunk); - - ob_flush(); // flush output - flush(); - } - - exit; - } - } - - /** - * Return the mimetype based on filename - * - * @param $extension Extension of file (eg .txt) - * - * @return string - */ - public static function getMimeType($extension) - { - $extension = strtolower($extension); - $config = self::getGrav()['config']->get('media'); - - if (isset($config[$extension])) { - return $config[$extension]['mime']; - } - - return 'application/octet-stream'; - } - - /** - * Normalize path by processing relative `.` and `..` syntax and merging path - * - * @param $path - * - * @return string - */ - public static function normalizePath($path) - { - $root = ($path[0] === '/') ? '/' : ''; - - $segments = explode('/', trim($path, '/')); - $ret = array(); - foreach ($segments as $segment) { - if (($segment == '.') || empty($segment)) { - continue; - } - if ($segment == '..') { - array_pop($ret); - } else { - array_push($ret, $segment); - } - } - - return $root . implode('/', $ret); - } - - public static function timezones() - { - $timezones = \DateTimeZone::listIdentifiers(\DateTimeZone::ALL); - $offsets = []; - $testDate = new \DateTime; - - foreach ($timezones as $zone) { - $tz = new \DateTimeZone($zone); - $offsets[$zone] = $tz->getOffset($testDate); - } - - asort($offsets); - - $timezone_list = array(); - foreach ($offsets as $timezone => $offset) { - $offset_prefix = $offset < 0 ? '-' : '+'; - $offset_formatted = gmdate('H:i', abs($offset)); - - $pretty_offset = "UTC${offset_prefix}${offset_formatted}"; - - $timezone_list[$timezone] = "(${pretty_offset}) $timezone"; - } - - return $timezone_list; - - } - - public static function arrayFilterRecursive(Array $source, $fn) - { - $result = array(); - foreach ($source as $key => $value) - { - if (is_array($value)) - { - $result[$key] = static::arrayFilterRecursive($value, $fn); - continue; - } - if ($fn($key, $value)) - { - $result[$key] = $value; // KEEP - continue; - } - } - return $result; - } - - public static function pathPrefixedByLangCode($string) - { - $languages_enabled = self::getGrav()['config']->get('system.languages.supported', []); - - if ($string[0] == '/' && $string[3] == '/' && in_array(substr($string, 1, 2), $languages_enabled)) { - return true; - } - - return false; - } - - public static function date2timestamp($date) - { - $config = self::getGrav()['config']; - $default_dateformat = $config->get('system.pages.dateformat.default'); - - // try to use DateTime and default format - if ($default_dateformat) { - $datetime = DateTime::createFromFormat($default_dateformat, $date); - } else { - $datetime = new DateTime($date); - } - - // fallback to strtotime if DateTime approach failed - if ($datetime !== false) { - return $datetime->getTimestamp(); - } else { - return strtotime($date); - } - } - - /** - * Checks if a value is positive - * - * @param string $value - * - * @return boolean - */ - public static function isPositive($value) { - return in_array($value, [true, 1, '1', 'yes', 'on', 'true'], true); - } -} diff --git a/src/system/src/Grav/Console/Cli/BackupCommand.php b/src/system/src/Grav/Console/Cli/BackupCommand.php deleted file mode 100644 index a597efc..0000000 --- a/src/system/src/Grav/Console/Cli/BackupCommand.php +++ /dev/null @@ -1,97 +0,0 @@ -setName("backup") - ->addArgument( - 'destination', - InputArgument::OPTIONAL, - 'Where to store the backup (/backup is default)' - - ) - ->setDescription("Creates a backup of the Grav instance") - ->setHelp('The backup creates a zipped backup. Optionally can be saved in a different destination.'); - - $this->source = getcwd(); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|null|void - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->setupConsole($input, $output); - - $this->progress = new ProgressBar($output); - $this->progress->setFormat('Archiving %current% files [%bar%] %elapsed:6s% %memory:6s%'); - - self::getGrav()['config']->init(); - - $destination = ($input->getArgument('destination')) ? $input->getArgument('destination') : null; - $log = JsonFile::instance(self::getGrav()['locator']->findResource("log://backup.log", true, true)); - $backup = ZipBackup::backup($destination, [$this, 'output']); - - $log->content([ - 'time' => time(), - 'location' => $backup - ]); - $log->save(); - - $output->writeln(''); - $output->writeln(''); - - } - - /** - * @param $folder - * @param $zipFile - * @param $exclusiveLength - * @param $progress - */ - public function output($args) - { - switch ($args['type']) { - case 'message': - $this->output->writeln($args['message']); - break; - case 'progress': - if ($args['complete']) { - $this->progress->finish(); - } else { - $this->progress->advance(); - } - break; - } - } - -} - diff --git a/src/system/src/Grav/Console/Cli/CleanCommand.php b/src/system/src/Grav/Console/Cli/CleanCommand.php deleted file mode 100644 index 350c9ab..0000000 --- a/src/system/src/Grav/Console/Cli/CleanCommand.php +++ /dev/null @@ -1,212 +0,0 @@ -setName("clean") - ->setDescription("Handles cleaning chores for Grav distribution") - ->setHelp('The clean clean extraneous folders and data'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|null|void - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->setupConsole($input, $output); - $this->cleanPaths(); - } - - private function cleanPaths() - { - $this->output->writeln(''); - $this->output->writeln('DELETING'); - - $anything = false; - - foreach ($this->paths_to_remove as $path) { - $path = ROOT_DIR . $path; - - if (is_dir($path) && @Folder::delete($path)) { - $anything = true; - $this->output->writeln('dir: ' . $path); - } elseif (is_file($path) && @unlink($path)) { - $anything = true; - $this->output->writeln('file: ' . $path); - } - } - - if (!$anything) { - $this->output->writeln(''); - $this->output->writeln('Nothing to clean...'); - } - - } - -} diff --git a/src/system/src/Grav/Console/Cli/ClearCacheCommand.php b/src/system/src/Grav/Console/Cli/ClearCacheCommand.php deleted file mode 100644 index 9440648..0000000 --- a/src/system/src/Grav/Console/Cli/ClearCacheCommand.php +++ /dev/null @@ -1,73 +0,0 @@ -setName("clear-cache") - ->setDescription("Clears Grav cache") - ->addOption('all', null, InputOption::VALUE_NONE, 'If set will remove all including compiled, twig, doctrine caches') - ->addOption('assets-only', null, InputOption::VALUE_NONE, 'If set will remove only assets/*') - ->addOption('images-only', null, InputOption::VALUE_NONE, 'If set will remove only images/*') - ->addOption('cache-only', null, InputOption::VALUE_NONE, 'If set will remove only cache/*') - ->setHelp('The clear-cache deletes all cache files'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|null|void - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->setupConsole($input, $output); - $this->cleanPaths(); - } - - /** - * loops over the array of paths and deletes the files/folders - */ - private function cleanPaths() - { - $this->output->writeln(''); - $this->output->writeln('Clearing cache'); - $this->output->writeln(''); - - if ($this->input->getOption('all')) { - $remove = 'all'; - } elseif ($this->input->getOption('assets-only')) { - $remove = 'assets-only'; - } elseif ($this->input->getOption('images-only')) { - $remove = 'images-only'; - } elseif ($this->input->getOption('cache-only')) { - $remove = 'cache-only'; - } else { - $remove = 'standard'; - } - - foreach (Cache::clearCache($remove) as $result) { - $this->output->writeln($result); - } - } -} - diff --git a/src/system/src/Grav/Console/Cli/ComposerCommand.php b/src/system/src/Grav/Console/Cli/ComposerCommand.php deleted file mode 100644 index 843df5c..0000000 --- a/src/system/src/Grav/Console/Cli/ComposerCommand.php +++ /dev/null @@ -1,82 +0,0 @@ -setName("composer") - ->addOption( - 'install', - 'i', - InputOption::VALUE_NONE, - 'install the dependencies' - ) - ->addOption( - 'update', - 'u', - InputOption::VALUE_NONE, - 'update the dependencies' - ) - ->setDescription("Updates the composer vendor dependencies needed by Grav.") - ->setHelp('The composer command updates the composer vendor dependencies needed by Grav'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|null|void - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->setupConsole($input, $output); - - $action = $input->getOption('install') ? 'install' : ($input->getOption('update') ? 'update' : 'install'); - - if ($input->getOption('install')) { - $action = 'install'; - } - - // Updates composer first - $output->writeln("\nInstalling vendor dependencies"); - $output->writeln($this->composerUpdate(GRAV_ROOT, $action)); - } - -} diff --git a/src/system/src/Grav/Console/Cli/InstallCommand.php b/src/system/src/Grav/Console/Cli/InstallCommand.php deleted file mode 100644 index 6a5c84f..0000000 --- a/src/system/src/Grav/Console/Cli/InstallCommand.php +++ /dev/null @@ -1,173 +0,0 @@ -setName("install") - ->addOption( - 'symlink', - 's', - InputOption::VALUE_NONE, - 'Symlink the required bits' - ) - ->addArgument( - 'destination', - InputArgument::OPTIONAL, - 'Where to install the required bits (default to current project)' - - ) - ->setDescription("Installs the dependencies needed by Grav. Optionally can create symbolic links") - ->setHelp('The install command installs the dependencies needed by Grav. Optionally can create symbolic links'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|null|void - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->setupConsole($input, $output); - - $dependencies_file = '.dependencies'; - $this->destination = ($input->getArgument('destination')) ? $input->getArgument('destination') : ROOT_DIR; - - // fix trailing slash - $this->destination = rtrim($this->destination, DS) . DS; - $this->user_path = $this->destination . USER_PATH; - - if (false === $this->isWindows()) { - $local_config_file = exec('eval echo ~/.grav/config'); - if (file_exists($local_config_file)) { - $this->local_config = Yaml::parse($local_config_file); - $output->writeln('Read local config from ' . $local_config_file . ''); - } - } - - // Look for dependencies file in ROOT and USER dir - if (file_exists($this->user_path . $dependencies_file)) { - $this->config = Yaml::parse($this->user_path . $dependencies_file); - } elseif (file_exists($this->destination . $dependencies_file)) { - $this->config = Yaml::parse($this->destination . $dependencies_file); - } else { - $output->writeln('ERROR Missing .dependencies file in user/ folder'); - } - - // If yaml config, process - if ($this->config) { - if (!$input->getOption('symlink')) { - // Updates composer first - $output->writeln("\nInstalling vendor dependencies"); - $output->writeln($this->composerUpdate(GRAV_ROOT, 'install')); - - $this->gitclone(); - } else { - $this->symlink(); - } - } else { - $output->writeln('ERROR invalid YAML in ' . $dependencies_file); - } - - - } - - /** - * Clones from Git - */ - private function gitclone() - { - $this->output->writeln(''); - $this->output->writeln('Cloning Bits'); - $this->output->writeln('============'); - $this->output->writeln(''); - - foreach ($this->config['git'] as $repo => $data) { - $path = $this->destination . DS . $data['path']; - if (!file_exists($path)) { - exec('cd "' . $this->destination . '" && git clone -b ' . $data['branch'] . ' ' . $data['url'] . ' ' . $data['path']); - $this->output->writeln('SUCCESS cloned ' . $data['url'] . ' -> ' . $path . ''); - $this->output->writeln(''); - } else { - $this->output->writeln('' . $path . ' already exists, skipping...'); - $this->output->writeln(''); - } - - } - } - - /** - * Symlinks - */ - private function symlink() - { - $this->output->writeln(''); - $this->output->writeln('Symlinking Bits'); - $this->output->writeln('==============='); - $this->output->writeln(''); - - if (!$this->local_config) { - $this->output->writeln('No local configuration available, aborting...'); - $this->output->writeln(''); - return; - } - - exec('cd ' . $this->destination); - foreach ($this->config['links'] as $repo => $data) { - $from = $this->local_config[$data['scm'] . '_repos'] . $data['src']; - $to = $this->destination . $data['path']; - - if (file_exists($from)) { - if (!file_exists($to)) { - symlink($from, $to); - $this->output->writeln('SUCCESS symlinked ' . $data['src'] . ' -> ' . $data['path'] . ''); - $this->output->writeln(''); - } else { - $this->output->writeln('destination: ' . $to . ' already exists, skipping...'); - $this->output->writeln(''); - } - } else { - $this->output->writeln('source: ' . $from . ' does not exists, skipping...'); - $this->output->writeln(''); - } - - } - } -} diff --git a/src/system/src/Grav/Console/Cli/NewProjectCommand.php b/src/system/src/Grav/Console/Cli/NewProjectCommand.php deleted file mode 100644 index 6e193fe..0000000 --- a/src/system/src/Grav/Console/Cli/NewProjectCommand.php +++ /dev/null @@ -1,71 +0,0 @@ -setName("new-project") - ->addArgument( - 'destination', - InputArgument::REQUIRED, - 'The destination directory of your new Grav project' - ) - ->addOption( - 'symlink', - 's', - InputOption::VALUE_NONE, - 'Symlink the required bits' - ) - ->setDescription("Creates a new Grav project with all the dependencies installed") - ->setHelp("The new-project command is a combination of the `setup` and `install` commands.\nCreates a new Grav instance and performs the installation of all the required dependencies."); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|null|void - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->setupConsole($input, $output); - - $sandboxCommand = $this->getApplication()->find('sandbox'); - $installCommand = $this->getApplication()->find('install'); - - $sandboxArguments = new ArrayInput(array( - 'command' => 'sandbox', - 'destination' => $input->getArgument('destination'), - '-s' => $input->getOption('symlink') - )); - - $installArguments = new ArrayInput(array( - 'command' => 'install', - 'destination' => $input->getArgument('destination'), - '-s' => $input->getOption('symlink') - )); - - $sandboxCommand->run($sandboxArguments, $output); - $installCommand->run($installArguments, $output); - - } -} diff --git a/src/system/src/Grav/Console/Cli/NewUserCommand.php b/src/system/src/Grav/Console/Cli/NewUserCommand.php deleted file mode 100644 index a26be6f..0000000 --- a/src/system/src/Grav/Console/Cli/NewUserCommand.php +++ /dev/null @@ -1,160 +0,0 @@ -setName("newuser") - ->setDescription("Creates a new user") - ->setHelp('The newuser creates a new user file in user/accounts/ folder'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|null|void - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->setupConsole($input, $output); - $helper = $this->getHelper('question'); - $data = []; - - $this->output->writeln('Create new user'); - $this->output->writeln(''); - - // Get username and validate - $question = new Question('Enter a username: ', 'admin'); - $question->setValidator(function ($value) { - if (!preg_match('/^[a-z0-9_-]{3,16}$/', $value)) { - throw new RuntimeException( - 'Username should be between 3 and 16 characters, including lowercase letters, numbers, underscores, and hyphens. Uppercase letters, spaces, and special characters are not allowed' - ); - } - if (file_exists(self::getGrav()['locator']->findResource('user://accounts/' . $value . YAML_EXT))) { - throw new RuntimeException( - 'Username "'.$value.'" already exists, please pick another username' - ); - } - return $value; - }); - $username = $helper->ask($this->input, $this->output, $question); - - // Get password and validate - $password = $this->askForPassword($helper, 'Enter a password: ', function ($password1) use ($helper) { - if (!preg_match('/(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}/', $password1)) { - throw new RuntimeException('Password must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters'); - } - // Since input is hidden when prompting for passwords, the user is asked to repeat the password - return $this->askForPassword($helper, 'Repeat the password: ', function ($password2) use ($password1) { - if (strcmp($password2, $password1)) { - throw new RuntimeException('Passwords did not match.'); - } - return $password2; - }); - }); - $data['password'] = $password; - - // Get email and validate - $question = new Question('Enter an email: '); - $question->setValidator(function ($value) { - if (!preg_match('/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/', $value)) { - throw new RuntimeException( - 'Not a valid email address' - ); - } - return $value; - }); - $data['email'] = $helper->ask($this->input, $this->output, $question); - - // Choose permissions - $question = new ChoiceQuestion( - 'Please choose a set of permissions:', - array('a'=>'admin access', 's'=>'site access', 'b'=>'admin and site access'), - 'a' - ); - $question->setErrorMessage('permissions %s is invalid.'); - $permissions_choice = $helper->ask($this->input, $this->output, $question); - - switch ($permissions_choice) { - case 'a': - $data['access']['admin'] = ['login' => true, 'super' => true]; - break; - case 's': - $data['access']['site'] = ['login' => true]; - break; - case 'b': - $data['access']['admin'] = ['login' => true, 'super' => true]; - $data['access']['site'] = ['login' => true]; - } - - // Get fullname - $question = new Question('Enter a fullname: '); - $question->setValidator(function ($value) { - if ($value === null || trim($value) == '') { - throw new RuntimeException( - 'Fullname is required' - ); - } - return $value; - }); - $data['fullname'] = $helper->ask($this->input, $this->output, $question); - - // Get title - $question = new Question('Enter a title: '); - $data['title'] = $helper->ask($this->input, $this->output, $question); - - // Create user object and save it - $user = new User($data); - $file = CompiledYamlFile::instance(self::getGrav()['locator']->findResource('user://accounts/' . $username . YAML_EXT, true, true)); - $user->file($file); - $user->save(); - - $this->output->writeln(''); - $this->output->writeln('Success! User '. $username .' created.'); - } - - /** - * Get password and validate. - * - * @param Helper $helper - * @param string $question - * @param callable $validator - * - * @return string - */ - protected function askForPassword(Helper $helper, $question, callable $validator) - { - $question = new Question($question); - $question->setValidator($validator); - $question->setHidden(true); - $question->setHiddenFallback(true); - return $helper->ask($this->input, $this->output, $question); - } -} diff --git a/src/system/src/Grav/Console/Cli/SandboxCommand.php b/src/system/src/Grav/Console/Cli/SandboxCommand.php deleted file mode 100644 index d490655..0000000 --- a/src/system/src/Grav/Console/Cli/SandboxCommand.php +++ /dev/null @@ -1,313 +0,0 @@ - '/.editorconfig', - '/.gitignore' => '/.gitignore', - '/CHANGELOG.md' => '/CHANGELOG.md', - '/LICENSE' => '/LICENSE', - '/README.md' => '/README.md', - '/index.php' => '/index.php', - '/composer.json' => '/composer.json', - '/bin' => '/bin', - '/system' => '/system', - '/vendor' => '/vendor', - ); - - /** - * @var string - */ - - protected $default_file = "---\ntitle: HomePage\n---\n# HomePage\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque porttitor eu felis sed ornare. Sed a mauris venenatis, pulvinar velit vel, dictum enim. Phasellus ac rutrum velit. Nunc lorem purus, hendrerit sit amet augue aliquet, iaculis ultricies nisl. Suspendisse tincidunt euismod risus, quis feugiat arcu tincidunt eget. Nulla eros mi, commodo vel ipsum vel, aliquet congue odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque velit orci, laoreet at adipiscing eu, interdum quis nibh. Nunc a accumsan purus."; - - protected $source; - protected $destination; - - /** - * - */ - protected function configure() - { - $this - ->setName('sandbox') - ->setDescription('Setup of a base Grav system in your webroot, good for development, playing around or starting fresh') - ->addArgument( - 'destination', - InputArgument::REQUIRED, - 'The destination directory to symlink into' - ) - ->addOption( - 'symlink', - 's', - InputOption::VALUE_NONE, - 'Symlink the base grav system' - ) - ->setHelp("The sandbox command help create a development environment that can optionally use symbolic links to link the core of grav to the git cloned repository.\nGood for development, playing around or starting fresh"); - $this->source = getcwd(); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|null|void - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->setupConsole($input, $output); - $this->destination = $input->getArgument('destination'); - - // Symlink the Core Stuff - if ($input->getOption('symlink')) { - // Create Some core stuff if it doesn't exist - $this->createDirectories(); - - // Loop through the symlink mappings and create the symlinks - $this->symlink(); - - // Copy the Core STuff - } else { - // Create Some core stuff if it doesn't exist - $this->createDirectories(); - - // Loop through the symlink mappings and copy what otherwise would be symlinks - $this->copy(); - } - - $this->pages(); - $this->initFiles(); - $this->perms(); - } - - /** - * - */ - private function createDirectories() - { - $this->output->writeln(''); - $this->output->writeln('Creating Directories'); - $dirs_created = false; - - if (!file_exists($this->destination)) { - mkdir($this->destination, 0777, true); - } - - foreach ($this->directories as $dir) { - if (!file_exists($this->destination . $dir)) { - $dirs_created = true; - $this->output->writeln(' ' . $dir . ''); - mkdir($this->destination . $dir, 0777, true); - } - } - - if (!$dirs_created) { - $this->output->writeln(' Directories already exist'); - } - } - - /** - * - */ - private function copy() - { - $this->output->writeln(''); - $this->output->writeln('Copying Files'); - - - foreach ($this->mappings as $source => $target) { - if ((int)$source == $source) { - $source = $target; - } - - $from = $this->source . $source; - $to = $this->destination . $target; - - $this->output->writeln(' ' . $source . ' -> ' . $to); - Folder::rcopy($from, $to); - } - } - - /** - * - */ - private function symlink() - { - $this->output->writeln(''); - $this->output->writeln('Resetting Symbolic Links'); - - - foreach ($this->mappings as $source => $target) { - if ((int)$source == $source) { - $source = $target; - } - - $from = $this->source . $source; - $to = $this->destination . $target; - - $this->output->writeln(' ' . $source . ' -> ' . $to); - - if (is_dir($to)) { - @Folder::delete($to); - } else { - @unlink($to); - } - symlink($from, $to); - } - } - - /** - * - */ - private function initFiles() - { - $this->check($this->output); - - $this->output->writeln(''); - $this->output->writeln('File Initializing'); - $files_init = false; - - // Copy files if they do not exist - foreach ($this->files as $source => $target) { - if ((int)$source == $source) { - $source = $target; - } - - $from = $this->source . $source; - $to = $this->destination . $target; - - if (!file_exists($to)) { - $files_init = true; - copy($from, $to); - $this->output->writeln(' ' . $target . ' -> Created'); - } - } - - if (!$files_init) { - $this->output->writeln(' Files already exist'); - } - - - } - - /** - * - */ - private function pages() - { - $this->output->writeln(''); - $this->output->writeln('Pages Initializing'); - - // get pages files and initialize if no pages exist - $pages_dir = $this->destination . '/user/pages'; - $pages_files = array_diff(scandir($pages_dir), array('..', '.')); - - if (count($pages_files) == 0) { - $destination = $this->source . '/user/pages'; - Folder::rcopy($destination, $pages_dir); - $this->output->writeln(' ' . $destination . ' -> Created'); - - } - } - - /** - * - */ - private function perms() - { - $this->output->writeln(''); - $this->output->writeln('Permissions Initializing'); - - $dir_perms = 0755; - - $binaries = glob($this->destination . DS . 'bin' . DS . '*'); - - foreach ($binaries as $bin) { - chmod($bin, $dir_perms); - $this->output->writeln(' bin/' . basename($bin) . ' permissions reset to ' . decoct($dir_perms)); - } - - $this->output->writeln(""); - } - - - /** - * - */ - private function check() - { - $success = true; - - if (!file_exists($this->destination)) { - $this->output->writeln(' file: $this->destination does not exist!'); - $success = false; - } - - foreach ($this->directories as $dir) { - if (!file_exists($this->destination . $dir)) { - $this->output->writeln(' directory: ' . $dir . ' does not exist!'); - $success = false; - } - } - - foreach ($this->mappings as $target => $link) { - if (!file_exists($this->destination . $target)) { - $this->output->writeln(' mappings: ' . $target . ' does not exist!'); - $success = false; - } - } - if (!$success) { - $this->output->writeln(''); - $this->output->writeln('install should be run with --symlink|--s to symlink first'); - exit; - } - } -} diff --git a/src/system/src/Grav/Console/ConsoleTrait.php b/src/system/src/Grav/Console/ConsoleTrait.php deleted file mode 100644 index 1ba9357..0000000 --- a/src/system/src/Grav/Console/ConsoleTrait.php +++ /dev/null @@ -1,127 +0,0 @@ -set('system.cache.driver', 'default'); - } - - $this->argv = $_SERVER['argv'][0]; - - $this->input = $input; - $this->output = $output; - - $this->output->getFormatter()->setStyle('normal', new OutputFormatterStyle('white')); - $this->output->getFormatter()->setStyle('yellow', new OutputFormatterStyle('yellow', null, array('bold'))); - $this->output->getFormatter()->setStyle('red', new OutputFormatterStyle('red', null, array('bold'))); - $this->output->getFormatter()->setStyle('cyan', new OutputFormatterStyle('cyan', null, array('bold'))); - $this->output->getFormatter()->setStyle('green', new OutputFormatterStyle('green', null, array('bold'))); - $this->output->getFormatter()->setStyle('magenta', new OutputFormatterStyle('magenta', null, array('bold'))); - $this->output->getFormatter()->setStyle('white', new OutputFormatterStyle('white', null, array('bold'))); - } - - /** - * @param $path - */ - public function isGravInstance($path) - { - if (!file_exists($path)) { - $this->output->writeln(''); - $this->output->writeln("ERROR: Destination doesn't exist:"); - $this->output->writeln(" $path"); - $this->output->writeln(''); - exit; - } - - if (!is_dir($path)) { - $this->output->writeln(''); - $this->output->writeln("ERROR: Destination chosen to install is not a directory:"); - $this->output->writeln(" $path"); - $this->output->writeln(''); - exit; - } - - if (!file_exists($path . DS . 'index.php') || !file_exists($path . DS . '.dependencies') || !file_exists($path . DS . 'system' . DS . 'config' . DS . 'system.yaml')) { - $this->output->writeln(''); - $this->output->writeln("ERROR: Destination chosen to install does not appear to be a Grav instance:"); - $this->output->writeln(" $path"); - $this->output->writeln(''); - exit; - } - } - - public function composerUpdate($path, $action = 'install') - { - $composer = Composer::getComposerExecutor(); - - return system($composer . ' --working-dir="'.$path.'" --no-interaction --no-dev --prefer-dist -o '. $action); - } - - /** - * @param array $all - * - * @return int - * @throws \Exception - */ - public function clearCache($all = []) - { - if ($all) { - $all = ['--all' => true]; - } - - $command = new ClearCacheCommand(); - $input = new ArrayInput($all); - return $command->run($input, $this->output); - } - - /** - * Validate if the system is based on windows or not. - * - * @return bool - */ - public function isWindows() - { - $keys = [ - 'CYGWIN_NT-5.1', - 'WIN32', - 'WINNT', - 'Windows' - ]; - - return array_key_exists(PHP_OS, $keys); - } -} diff --git a/src/system/src/Grav/Console/Gpm/IndexCommand.php b/src/system/src/Grav/Console/Gpm/IndexCommand.php deleted file mode 100644 index f5b3e16..0000000 --- a/src/system/src/Grav/Console/Gpm/IndexCommand.php +++ /dev/null @@ -1,119 +0,0 @@ -setName("index") - ->addOption( - 'force', - 'f', - InputOption::VALUE_NONE, - 'Force re-fetching the data from remote' - ) - ->setDescription("Lists the plugins and themes available for installation") - ->setHelp('The index command lists the plugins and themes available for installation'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|null|void - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->setupConsole($input, $output); - - $this->gpm = new GPM($this->input->getOption('force')); - - $this->data = $this->gpm->getRepository(); - - $this->output->writeln(''); - - foreach ($this->data as $type => $packages) { - $this->output->writeln("" . ucfirst($type) . " [ " . count($packages) . " ]"); - - $index = 0; - foreach ($packages as $slug => $package) { - $this->output->writeln( - // index - str_pad($index++ + 1, 2, '0', STR_PAD_LEFT) . ". " . - // package name - "" . str_pad($package->name, 20) . " " . - // slug - "[" . str_pad($slug, 20, ' ', STR_PAD_BOTH) . "] " . - // version details - $this->versionDetails($package) - ); - } - - $this->output->writeln(''); - } - - $this->output->writeln('You can either get more informations about a package by typing:'); - $this->output->writeln(' ' . $this->argv . ' info '); - $this->output->writeln(''); - $this->output->writeln('Or you can install a package by typing:'); - $this->output->writeln(' ' . $this->argv . ' install '); - $this->output->writeln(''); - } - - /** - * @param $package - * - * @return string - */ - private function versionDetails($package) - { - $list = $this->gpm->{'getUpdatable' . ucfirst($package->package_type)}(); - $package = isset($list[$package->slug]) ? $list[$package->slug] : $package; - $type = ucfirst(preg_replace("/s$/", '', $package->package_type)); - $updatable = $this->gpm->{'is' . $type . 'Updatable'}($package->slug); - $installed = $this->gpm->{'is' . $type . 'Installed'}($package->slug); - $local = $this->gpm->{'getInstalled' . $type}($package->slug); - - if (!$installed || !$updatable) { - $version = $installed ? $local->version : $package->version; - $installed = !$installed ? ' (not installed)' : ' (installed)'; - - return str_pad(" [v" . $version . "]", 35) . $installed; - } - - if ($updatable) { - $installed = !$installed ? ' (not installed)' : ' (installed)'; - - return str_pad(" [v" . $package->version . " v" . $package->available . "]", - 61) . $installed; - } - - return ''; - } -} diff --git a/src/system/src/Grav/Console/Gpm/InfoCommand.php b/src/system/src/Grav/Console/Gpm/InfoCommand.php deleted file mode 100644 index 53290b8..0000000 --- a/src/system/src/Grav/Console/Gpm/InfoCommand.php +++ /dev/null @@ -1,125 +0,0 @@ -setName("info") - ->addOption( - 'force', - 'f', - InputOption::VALUE_NONE, - 'Force fetching the new data remotely' - ) - ->addArgument( - 'package', - InputArgument::REQUIRED, - 'The package of which more informations are desired. Use the "index" command for a list of packages' - ) - ->setDescription("Shows more informations about a package") - ->setHelp('The info shows more informations about a package'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|null|void - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->setupConsole($input, $output); - $this->gpm = new GPM($this->input->getOption('force')); - - $foundPackage = $this->gpm->findPackage($input->getArgument('package')); - - if (!$foundPackage) { - $this->output->writeln("The package '" . $input->getArgument('package') . "' was not found in the Grav repository."); - $this->output->writeln(''); - $this->output->writeln("You can list all the available packages by typing:"); - $this->output->writeln(" " . $this->argv . " index"); - $this->output->writeln(''); - exit; - } - - $this->output->writeln("Found package '" . $input->getArgument('package') . "' under the '" . ucfirst($foundPackage->package_type) . "' section"); - $this->output->writeln(''); - $this->output->writeln("" . $foundPackage->name . " [" . $foundPackage->slug . "]"); - $this->output->writeln(str_repeat('-', strlen($foundPackage->name) + strlen($foundPackage->slug) + 3)); - $this->output->writeln("" . strip_tags($foundPackage->description_plain) . ""); - $this->output->writeln(''); - - $packageURL = ''; - if (isset($foundPackage->author['url'])) { - $packageURL = '<' . $foundPackage->author['url'] . '>'; - } - - $this->output->writeln("" . str_pad("Author", - 12) . ": " . $foundPackage->author['name'] . ' <' . $foundPackage->author['email'] . '> ' . $packageURL); - - foreach (array( - 'version', - 'keywords', - 'date', - 'homepage', - 'demo', - 'docs', - 'guide', - 'repository', - 'bugs', - 'zipball_url', - 'license' - ) as $info) { - if (isset($foundPackage->$info)) { - $name = ucfirst($info); - $data = $foundPackage->$info; - - if ($info == 'zipball_url') { - $name = "Download"; - } - - if ($info == 'date') { - $name = "Last Update"; - $data = date('D, j M Y, H:i:s, P ', strtotime('2014-09-16T00:07:16Z')); - } - - $name = str_pad($name, 12); - $this->output->writeln("" . $name . ": " . $data); - } - } - - $this->output->writeln(''); - $this->output->writeln("You can install this package by typing:"); - $this->output->writeln(" " . $this->argv . " install " . $foundPackage->slug . ""); - $this->output->writeln(''); - - } -} diff --git a/src/system/src/Grav/Console/Gpm/InstallCommand.php b/src/system/src/Grav/Console/Gpm/InstallCommand.php deleted file mode 100644 index 40bb680..0000000 --- a/src/system/src/Grav/Console/Gpm/InstallCommand.php +++ /dev/null @@ -1,533 +0,0 @@ -setName("install") - ->addOption( - 'force', - 'f', - InputOption::VALUE_NONE, - 'Force re-fetching the data from remote' - ) - ->addOption( - 'all-yes', - 'y', - InputOption::VALUE_NONE, - 'Assumes yes (or best approach) instead of prompting' - ) - ->addOption( - 'destination', - 'd', - InputOption::VALUE_OPTIONAL, - 'The destination where the package should be installed at. By default this would be where the grav instance has been launched from', - GRAV_ROOT - ) - ->addArgument( - 'package', - InputArgument::IS_ARRAY | InputArgument::REQUIRED, - 'The package(s) that are desired to be installed. Use the "index" command for a list of packages' - ) - ->setDescription("Performs the installation of plugins and themes") - ->setHelp('The install command allows to install plugins and themes'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|null|void - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->setupConsole($input, $output); - - $this->gpm = new GPM($this->input->getOption('force')); - $this->destination = realpath($this->input->getOption('destination')); - - $packages = array_map('strtolower', $this->input->getArgument('package')); - $this->data = $this->gpm->findPackages($packages); - - if (false === $this->isWindows() && @is_file(getenv("HOME").'/.grav/config')) { - $local_config_file = exec('eval echo ~/.grav/config'); - if (file_exists($local_config_file)) { - $this->local_config = Yaml::parse($local_config_file); - } - } - - if ( - !Installer::isGravInstance($this->destination) || - !Installer::isValidDestination($this->destination, [Installer::EXISTS, Installer::IS_LINK]) - ) { - $this->output->writeln("ERROR: " . Installer::lastErrorMsg()); - exit; - } - - $this->output->writeln(''); - - if (!$this->data['total']) { - $this->output->writeln("Nothing to install."); - $this->output->writeln(''); - exit; - } - - if (count($this->data['not_found'])) { - $this->output->writeln("These packages were not found on Grav: " . implode(', ', - array_keys($this->data['not_found'])) . ""); - } - - unset($this->data['not_found']); - unset($this->data['total']); - - foreach ($this->data as $data) { - foreach ($data as $package) { - //Check for dependencies - if (isset($package->dependencies)) { - $this->output->writeln("Package " . $package->name . " has ". count($package->dependencies) . " required dependencies that must be installed first..."); - $this->output->writeln(''); - - $dependency_data = $this->gpm->findPackages($package->dependencies); - - if (!$dependency_data['total']) { - $this->output->writeln("No dependencies found..."); - $this->output->writeln(''); - } else { - unset($dependency_data['total']); - - foreach($dependency_data as $type => $dep_data) { - foreach($dep_data as $name => $dep_package) { - - $this->processPackage($dep_package); - } - } - } - } - - $this->processPackage($package); - } - } - - // clear cache after successful upgrade - $this->clearCache(); - } - - /** - * @param $package - */ - private function processPackage($package) - { - $install_options = ['GPM']; - - // if no name, not found in GPM - if (!isset($package->version)) { - unset($install_options[0]); - } - // if local config found symlink is a valid option - if (isset($this->local_config) && $this->getSymlinkSource($package)) { - $install_options[] = 'Symlink'; - } - // if override set, can install via git - if (isset($package->override_repository)) { - $install_options[] = 'Git'; - } - - // reindex list - $install_options = array_values($install_options); - - if (count($install_options) == 0) { - // no valid install options - error and return - $this->output->writeln("not valid installation methods found!"); - return; - } elseif (count($install_options) == 1) { - // only one option, use it... - $method = $install_options[0]; - } else { - $helper = $this->getHelper('question'); - $question = new ChoiceQuestion( - 'Please select installation method for ' . $package->name . ' ('.$install_options[0].' is default)', array_values($install_options), 0 - ); - $question->setErrorMessage('Method %s is invalid'); - $method = $helper->ask($this->input, $this->output, $question); - } - - $this->output->writeln(''); - - $method_name = 'process'.$method; - $this->$method_name($package); - - $this->installDemoContent($package); - } - - - /** - * @param $package - */ - private function installDemoContent($package) - { - $demo_dir = $this->destination . DS . $package->install_path . DS . '_demo'; - $dest_dir = $this->destination . DS . 'user'; - $pages_dir = $dest_dir . DS . 'pages'; - - if (file_exists($demo_dir)) { - // Demo content exists, prompt to install it. - $this->output->writeln("Attention: ".$package->name . " contains demo content"); - $helper = $this->getHelper('question'); - $question = new ConfirmationQuestion('Do you wish to install this demo content? [y|N] ', false); - - if (!$helper->ask($this->input, $this->output, $question)) { - $this->output->writeln(" '- Skipped! "); - $this->output->writeln(''); - return; - } - - // if pages folder exists in demo - if (file_exists($demo_dir . DS . 'pages')) { - $pages_backup = 'pages.' . date('m-d-Y-H-i-s'); - $question = new ConfirmationQuestion('This will backup your current `user/pages` folder to `user/'. $pages_backup. '`, continue? [y|N]', false); - - if (!$helper->ask($this->input, $this->output, $question)) { - $this->output->writeln(" '- Skipped! "); - $this->output->writeln(''); - return; - } - - // backup current pages folder - if (file_exists($dest_dir)) { - if (rename($pages_dir, $dest_dir . DS . $pages_backup)) { - $this->output->writeln(" |- Backing up pages... ok"); - } else { - $this->output->writeln(" |- Backing up pages... failed"); - } - } - } - - // Confirmation received, copy over the data - $this->output->writeln(" |- Installing demo content... ok "); - Folder::rcopy($demo_dir, $dest_dir); - $this->output->writeln(" '- Success! "); - $this->output->writeln(''); - } - } - - /** - * @param $package - * - * @return array - */ - private function getGitRegexMatches($package) - { - if (isset($package->override_repository)) { - $repository = $package->override_repository; - } elseif (isset($package->repository)) { - $repository = $package->repository; - } else { - return false; - } - - preg_match(GIT_REGEX, $repository, $matches); - - return $matches; - } - - /** - * @param $package - * - * @return bool|string - */ - private function getSymlinkSource($package) - { - $matches = $this->getGitRegexMatches($package); - - foreach ($this->local_config as $path) { - if (Utils::endsWith($matches[2], '.git')) { - $repo_dir = preg_replace('/\.git$/', '', $matches[2]); - } else { - $repo_dir = $matches[2]; - } - - $from = rtrim($path, '/') . '/' . $repo_dir; - - if (file_exists($from)) { - return $from; - } - } - return false; - } - - /** - * @param $package - */ - private function processSymlink($package) - { - - exec('cd ' . $this->destination); - - $to = $this->destination . DS . $package->install_path; - $from = $this->getSymlinkSource($package); - - $this->output->writeln("Preparing to Symlink " . $package->name . ""); - $this->output->write(" |- Checking source... "); - - if (file_exists($from)) { - $this->output->writeln("ok"); - - $this->output->write(" |- Checking destination... "); - $checks = $this->checkDestination($package); - - if (!$checks) { - $this->output->writeln(" '- Installation failed or aborted."); - $this->output->writeln(''); - } else { - if (file_exists($to)) { - $this->output->writeln(" '- Symlink cannot overwrite an existing package, please remove first"); - $this->output->writeln(''); - } else { - symlink($from, $to); - - // extra white spaces to clear out the buffer properly - $this->output->writeln(" |- Symlinking package... ok "); - - $this->output->writeln(" '- Success! "); - $this->output->writeln(''); - } - - - } - return; - } - - $this->output->writeln("not found!"); - $this->output->writeln(" '- Installation failed or aborted."); - } - - /** - * @param $package - */ - private function processGit($package) - { - $matches = $this->getGitRegexMatches($package); - - $this->output->writeln("Preparing to Git clone " . $package->name . " from " . $matches[0]); - - $this->output->write(" |- Checking destination... "); - $checks = $this->checkDestination($package); - - if (!$checks) { - $this->output->writeln(" '- Installation failed or aborted."); - $this->output->writeln(''); - } else { - $cmd = 'cd ' . $this->destination . ' && git clone ' . $matches[0] . ' ' . $package->install_path; - exec($cmd); - - // extra white spaces to clear out the buffer properly - $this->output->writeln(" |- Cloning package... ok "); - - $this->output->writeln(" '- Success! "); - $this->output->writeln(''); - } - } - - /** - * @param $package - */ - private function processGPM($package) - { - $version = isset($package->available) ? $package->available : $package->version; - - $this->output->writeln("Preparing to install " . $package->name . " [v" . $version . "]"); - - $this->output->write(" |- Downloading package... 0%"); - $this->file = $this->downloadPackage($package); - - $this->output->write(" |- Checking destination... "); - $checks = $this->checkDestination($package); - - if (!$checks) { - $this->output->writeln(" '- Installation failed or aborted."); - $this->output->writeln(''); - } else { - $this->output->write(" |- Installing package... "); - $installation = $this->installPackage($package); - if (!$installation) { - $this->output->writeln(" '- Installation failed or aborted."); - $this->output->writeln(''); - } else { - $this->output->writeln(" '- Success! "); - $this->output->writeln(''); - } - } - } - - /** - * @param $package - * - * @return string - */ - private function downloadPackage($package) - { - $this->tmp = CACHE_DIR . DS . 'tmp/Grav-' . uniqid(); - $filename = $package->slug . basename($package->zipball_url); - $output = Response::get($package->zipball_url, [], [$this, 'progress']); - - Folder::mkdir($this->tmp); - - $this->output->write("\x0D"); - $this->output->write(" |- Downloading package... 100%"); - $this->output->writeln(''); - - file_put_contents($this->tmp . DS . $filename, $output); - - return $this->tmp . DS . $filename; - } - - /** - * @param $package - * - * @return bool - */ - private function checkDestination($package) - { - $question_helper = $this->getHelper('question'); - $skip_prompt = $this->input->getOption('all-yes'); - - Installer::isValidDestination($this->destination . DS . $package->install_path); - - if (Installer::lastErrorCode() == Installer::EXISTS) { - if (!$skip_prompt) { - $this->output->write("\x0D"); - $this->output->writeln(" |- Checking destination... exists"); - - $question = new ConfirmationQuestion(" | '- The package has been detected as installed already, do you want to overwrite it? [y|N] ", - false); - $answer = $question_helper->ask($this->input, $this->output, $question); - - if (!$answer) { - $this->output->writeln(" | '- You decided to not overwrite the already installed package."); - - return false; - } - } - } - - if (Installer::lastErrorCode() == Installer::IS_LINK) { - $this->output->write("\x0D"); - $this->output->writeln(" |- Checking destination... symbolic link"); - - if ($skip_prompt) { - $this->output->writeln(" | '- Skipped automatically."); - - return false; - } - - $question = new ConfirmationQuestion(" | '- Destination has been detected as symlink, delete symbolic link first? [y|N] ", - false); - $answer = $question_helper->ask($this->input, $this->output, $question); - - if (!$answer) { - $this->output->writeln(" | '- You decided to not delete the symlink automatically."); - - return false; - } else { - unlink($this->destination . DS . $package->install_path); - } - } - - $this->output->write("\x0D"); - $this->output->writeln(" |- Checking destination... ok"); - - return true; - } - - /** - * @param $package - * - * @return bool - */ - private function installPackage($package) - { - $type = $package->package_type; - - Installer::install($this->file, $this->destination, ['install_path' => $package->install_path, 'theme' => (($type == 'themes'))]); - $error_code = Installer::lastErrorCode(); - Folder::delete($this->tmp); - - if ($error_code & (Installer::ZIP_OPEN_ERROR | Installer::ZIP_EXTRACT_ERROR)) { - $this->output->write("\x0D"); - // extra white spaces to clear out the buffer properly - $this->output->writeln(" |- Installing package... error "); - $this->output->writeln(" | '- " . Installer::lastErrorMsg()); - - return false; - } - - $this->output->write("\x0D"); - // extra white spaces to clear out the buffer properly - $this->output->writeln(" |- Installing package... ok "); - - return true; - } - - /** - * @param $progress - */ - public function progress($progress) - { - $this->output->write("\x0D"); - $this->output->write(" |- Downloading package... " . str_pad($progress['percent'], 5, " ", - STR_PAD_LEFT) . '%'); - } -} diff --git a/src/system/src/Grav/Console/Gpm/SelfupgradeCommand.php b/src/system/src/Grav/Console/Gpm/SelfupgradeCommand.php deleted file mode 100644 index 9647470..0000000 --- a/src/system/src/Grav/Console/Gpm/SelfupgradeCommand.php +++ /dev/null @@ -1,234 +0,0 @@ -setName("self-upgrade") - ->setAliases(['selfupgrade']) - ->addOption( - 'force', - 'f', - InputOption::VALUE_NONE, - 'Force re-fetching the data from remote' - ) - ->addOption( - 'all-yes', - 'y', - InputOption::VALUE_NONE, - 'Assumes yes (or best approach) instead of prompting' - ) - ->setDescription("Detects and performs an update of Grav itself when available") - ->setHelp('The update command updates Grav itself when a new version is available'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|null|void - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->setupConsole($input, $output); - $this->upgrader = new Upgrader($this->input->getOption('force')); - - $update = $this->upgrader->getAssets()['grav-update']; - - $local = $this->upgrader->getLocalVersion(); - $remote = $this->upgrader->getRemoteVersion(); - $release = strftime('%c', strtotime($this->upgrader->getReleaseDate())); - - if (!$this->upgrader->isUpgradable()) { - $this->output->writeln("You are already running the latest version of Grav (v" . $local . ") released on " . $release); - exit; - } - - // not used but preloaded just in case! - new ArrayInput([]); - - $questionHelper = $this->getHelper('question'); - $skipPrompt = $this->input->getOption('all-yes'); - - $this->output->writeln("Grav v$remote is now available [release date: $release]."); - $this->output->writeln("You are currently using v" . GRAV_VERSION . "."); - - if (!$skipPrompt) { - $question = new ConfirmationQuestion("Would you like to read the changelog before proceeding? [y|N] ", - false); - $answer = $questionHelper->ask($this->input, $this->output, $question); - - if ($answer) { - $changelog = $this->upgrader->getChangelog(GRAV_VERSION); - - $this->output->writeln(""); - foreach ($changelog as $version => $log) { - $title = $version . ' [' . $log['date'] . ']'; - $content = preg_replace_callback("/\d\.\s\[\]\(#(.*)\)/", function ($match) { - return "\n" . ucfirst($match[1]) . ":"; - }, $log['content']); - - $this->output->writeln($title); - $this->output->writeln(str_repeat('-', strlen($title))); - $this->output->writeln($content); - $this->output->writeln(""); - } - - $question = new ConfirmationQuestion("Press [ENTER] to continue.", true); - $questionHelper->ask($this->input, $this->output, $question); - } - - $question = new ConfirmationQuestion("Would you like to upgrade now? [y|N] ", false); - $answer = $questionHelper->ask($this->input, $this->output, $question); - - if (!$answer) { - $this->output->writeln("Aborting..."); - - exit; - } - } - - $this->output->writeln(""); - $this->output->writeln("Preparing to upgrade to v$remote.."); - - $this->output->write(" |- Downloading upgrade [" . $this->formatBytes($update['size']) . "]... 0%"); - $this->file = $this->download($update); - - $this->output->write(" |- Installing upgrade... "); - $installation = $this->upgrade(); - - if (!$installation) { - $this->output->writeln(" '- Installation failed or aborted."); - $this->output->writeln(''); - } else { - $this->output->writeln(" '- Success! "); - $this->output->writeln(''); - } - - // clear cache after successful upgrade - $this->clearCache('all'); - } - - /** - * @param $package - * - * @return string - */ - private function download($package) - { - $this->tmp = CACHE_DIR . DS . 'tmp/Grav-' . uniqid(); - $output = Response::get($package['download'], [], [$this, 'progress']); - - Folder::mkdir($this->tmp); - - $this->output->write("\x0D"); - $this->output->write(" |- Downloading upgrade [" . $this->formatBytes($package['size']) . "]... 100%"); - $this->output->writeln(''); - - file_put_contents($this->tmp . DS . $package['name'], $output); - - return $this->tmp . DS . $package['name']; - } - - /** - * @return bool - */ - private function upgrade() - { - Installer::install($this->file, GRAV_ROOT, - ['sophisticated' => true, 'overwrite' => true, 'ignore_symlinks' => true]); - $errorCode = Installer::lastErrorCode(); - Folder::delete($this->tmp); - - if ($errorCode & (Installer::ZIP_OPEN_ERROR | Installer::ZIP_EXTRACT_ERROR)) { - $this->output->write("\x0D"); - // extra white spaces to clear out the buffer properly - $this->output->writeln(" |- Installing upgrade... error "); - $this->output->writeln(" | '- " . Installer::lastErrorMsg()); - - return false; - } - - $this->output->write("\x0D"); - // extra white spaces to clear out the buffer properly - $this->output->writeln(" |- Installing upgrade... ok "); - - return true; - } - - /** - * @param $progress - */ - public function progress($progress) - { - $this->output->write("\x0D"); - $this->output->write(" |- Downloading upgrade [" . $this->formatBytes($progress["filesize"]) . "]... " . str_pad($progress['percent'], - 5, " ", STR_PAD_LEFT) . '%'); - } - - /** - * @param $size - * @param int $precision - * - * @return string - */ - public function formatBytes($size, $precision = 2) - { - $base = log($size) / log(1024); - $suffixes = array('', 'k', 'M', 'G', 'T'); - - return round(pow(1024, $base - floor($base)), $precision) . $suffixes[(int)floor($base)]; - } -} diff --git a/src/system/src/Grav/Console/Gpm/UninstallCommand.php b/src/system/src/Grav/Console/Gpm/UninstallCommand.php deleted file mode 100644 index 4de31aa..0000000 --- a/src/system/src/Grav/Console/Gpm/UninstallCommand.php +++ /dev/null @@ -1,206 +0,0 @@ -setName("uninstall") - ->addOption( - 'all-yes', - 'y', - InputOption::VALUE_NONE, - 'Assumes yes (or best approach) instead of prompting' - ) - ->addArgument( - 'package', - InputArgument::IS_ARRAY | InputArgument::REQUIRED, - 'The package(s) that are desired to be removed. Use the "index" command for a list of packages' - ) - ->setDescription("Performs the uninstallation of plugins and themes") - ->setHelp('The uninstall command allows to uninstall plugins and themes'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|null|void - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->setupConsole($input, $output); - - $this->gpm = new GPM(); - - $packages = array_map('strtolower', $this->input->getArgument('package')); - $this->data = ['total' => 0, 'not_found' => []]; - - foreach ($packages as $package) { - $plugin = $this->gpm->getInstalledPlugin($package); - $theme = $this->gpm->getInstalledTheme($package); - if ($plugin || $theme) { - $this->data[strtolower($package)] = $plugin ?: $theme; - $this->data['total']++; - } else { - $this->data['not_found'][] = $package; - } - } - - $this->output->writeln(''); - - if (!$this->data['total']) { - $this->output->writeln("Nothing to uninstall."); - $this->output->writeln(''); - exit; - } - - if (count($this->data['not_found'])) { - $this->output->writeln("These packages were not found installed: " . implode(', ', - $this->data['not_found']) . ""); - } - - unset($this->data['not_found']); - unset($this->data['total']); - - foreach ($this->data as $slug => $package) { - $this->output->writeln("Preparing to uninstall " . $package->name . " [v" . $package->version . "]"); - - - $this->output->write(" |- Checking destination... "); - $checks = $this->checkDestination($slug, $package); - - if (!$checks) { - $this->output->writeln(" '- Installation failed or aborted."); - $this->output->writeln(''); - } else { - $this->output->write(" |- Uninstalling package... "); - $uninstall = $this->uninstallPackage($slug, $package); - - if (!$uninstall) { - $this->output->writeln(" '- Uninstallation failed or aborted."); - $this->output->writeln(''); - } else { - $this->output->writeln(" '- Success! "); - $this->output->writeln(''); - } - } - } - - // clear cache after successful upgrade - $this->clearCache(); - } - - - /** - * @param $slug - * @param $package - * - * @return bool - */ - private function uninstallPackage($slug, $package) - { - $path = self::getGrav()['locator']->findResource($package->package_type . '://' .$slug); - Installer::uninstall($path); - $errorCode = Installer::lastErrorCode(); - - if ($errorCode && $errorCode !== Installer::IS_LINK && $errorCode !== Installer::EXISTS) { - $this->output->write("\x0D"); - // extra white spaces to clear out the buffer properly - $this->output->writeln(" |- Uninstalling package... error "); - $this->output->writeln(" | '- " . Installer::lastErrorMsg()); - - return false; - } - - $this->output->write("\x0D"); - // extra white spaces to clear out the buffer properly - $this->output->writeln(" |- Uninstalling package... ok "); - - return true; - } - - /** - * @param $slug - * @param $package - * - * @return bool - */ - - private function checkDestination($slug, $package) - { - $path = self::getGrav()['locator']->findResource($package->package_type . '://' . $slug); - $questionHelper = $this->getHelper('question'); - $skipPrompt = $this->input->getOption('all-yes'); - - Installer::isValidDestination($path); - - if (Installer::lastErrorCode() == Installer::IS_LINK) { - $this->output->write("\x0D"); - $this->output->writeln(" |- Checking destination... symbolic link"); - - if ($skipPrompt) { - $this->output->writeln(" | '- Skipped automatically."); - - return false; - } - - $question = new ConfirmationQuestion(" | '- Destination has been detected as symlink, delete symbolic link first? [y|N] ", - false); - $answer = $questionHelper->ask($this->input, $this->output, $question); - - if (!$answer) { - $this->output->writeln(" | '- You decided to not delete the symlink automatically."); - - return false; - } - } - - $this->output->write("\x0D"); - $this->output->writeln(" |- Checking destination... ok"); - - return true; - } -} diff --git a/src/system/src/Grav/Console/Gpm/UpdateCommand.php b/src/system/src/Grav/Console/Gpm/UpdateCommand.php deleted file mode 100644 index f5c3f9a..0000000 --- a/src/system/src/Grav/Console/Gpm/UpdateCommand.php +++ /dev/null @@ -1,224 +0,0 @@ -setName("update") - ->addOption( - 'force', - 'f', - InputOption::VALUE_NONE, - 'Force re-fetching the data from remote' - ) - ->addOption( - 'destination', - 'd', - InputOption::VALUE_OPTIONAL, - 'The grav instance location where the updates should be applied to. By default this would be where the grav cli has been launched from', - GRAV_ROOT - ) - ->addOption( - 'all-yes', - 'y', - InputOption::VALUE_NONE, - 'Assumes yes (or best approach) instead of prompting' - ) - ->addArgument( - 'package', - InputArgument::IS_ARRAY | InputArgument::OPTIONAL, - 'The package or packages that is desired to update. By default all available updates will be applied.' - ) - ->setDescription("Detects and performs an update of plugins and themes when available") - ->setHelp('The update command updates plugins and themes when a new version is available'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|null|void - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->setupConsole($input, $output); - - $this->gpm = new GPM($this->input->getOption('force')); - $this->destination = realpath($this->input->getOption('destination')); - $skip_prompt = $this->input->getOption('all-yes'); - - if (!Installer::isGravInstance($this->destination)) { - $this->output->writeln("ERROR: " . Installer::lastErrorMsg()); - exit; - } - - $this->data = $this->gpm->getUpdatable(); - $only_packages = array_map('strtolower', $this->input->getArgument('package')); - - if (!$this->data['total']) { - $this->output->writeln("Nothing to update."); - exit; - } - - $this->output->write("Found " . $this->gpm->countInstalled() . " extensions installed of which " . $this->data['total'] . " need updating"); - - $limit_to = $this->userInputPackages($only_packages); - - $this->output->writeln(''); - - unset($this->data['total']); - unset($limit_to['total']); - - - // updates review - $slugs = []; - - $index = 0; - foreach ($this->data as $packages) { - foreach ($packages as $slug => $package) { - if (count($limit_to) && !array_key_exists($slug, $limit_to)) { - continue; - } - - $this->output->writeln( - // index - str_pad($index++ + 1, 2, '0', STR_PAD_LEFT) . ". " . - // name - "" . str_pad($package->name, 15) . " " . - // version - "[v" . $package->version . " ➜ v" . $package->available . "]" - ); - $slugs[] = $slug; - } - } - - if (!$skip_prompt) { - // prompt to continue - $this->output->writeln(""); - $questionHelper = $this->getHelper('question'); - $question = new ConfirmationQuestion("Continue with the update process? [Y|n] ", true); - $answer = $questionHelper->ask($this->input, $this->output, $question); - - if (!$answer) { - $this->output->writeln("Update aborted. Exiting..."); - exit; - } - } - - // finally update - $install_command = $this->getApplication()->find('install'); - - $args = new ArrayInput(array( - 'command' => 'install', - 'package' => $slugs, - '-f' => $this->input->getOption('force'), - '-d' => $this->destination, - '-y' => true - )); - $command_exec = $install_command->run($args, $this->output); - - if ($command_exec != 0) { - $this->output->writeln("Error: An error occurred while trying to install the extensions"); - exit; - } - } - - /** - * @param $only_packages - * - * @return array - */ - private function userInputPackages($only_packages) - { - $found = ['total' => 0]; - $ignore = []; - - if (!count($only_packages)) { - $this->output->writeln(''); - } else { - foreach ($only_packages as $only_package) { - $find = $this->gpm->findPackage($only_package); - - if (!$find || !$this->gpm->isUpdatable($find->slug)) { - $name = isset($find->slug) ? $find->slug : $only_package; - $ignore[$name] = $name; - } else { - $found[$find->slug] = $find; - $found['total']++; - } - } - - if ($found['total']) { - $list = $found; - unset($list['total']); - $list = array_keys($list); - - if ($found['total'] !== $this->data['total']) { - $this->output->write(", only " . $found['total'] . " will be updated"); - } - - $this->output->writeln(''); - $this->output->writeln("Limiting updates for only " . implode(', ', - $list) . ""); - } - - if (count($ignore)) { - $this->output->writeln("Packages not found or not requiring updates: " . implode(', ', - $ignore) . ""); - } - } - - return $found; - } -} diff --git a/src/system/src/Grav/Console/Gpm/VersionCommand.php b/src/system/src/Grav/Console/Gpm/VersionCommand.php deleted file mode 100644 index c1068d8..0000000 --- a/src/system/src/Grav/Console/Gpm/VersionCommand.php +++ /dev/null @@ -1,102 +0,0 @@ -setName("version") - ->addOption( - 'force', - 'f', - InputOption::VALUE_NONE, - 'Force re-fetching the data from remote' - ) - ->addArgument( - 'package', - InputArgument::IS_ARRAY | InputArgument::OPTIONAL, - 'The package or packages that is desired to know the version of. By default and if not specified this would be grav' - ) - ->setDescription("Shows the version of an installed package. If available also shows pending updates.") - ->setHelp('The version command displays the current version of a package installed and, if available, the available version of pending updates'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|null|void - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->setupConsole($input, $output); - - $this->gpm = new GPM($this->input->getOption('force')); - $packages = $this->input->getArgument('package'); - - $installed = false; - - if (!count($packages)) { - $packages = ['grav']; - } - - foreach ($packages as $package) { - $package = strtolower($package); - $name = null; - $version = null; - $updatable = false; - - if ($package == 'grav') { - $name = 'Grav'; - $version = GRAV_VERSION; - $upgrader = new Upgrader(); - - if ($upgrader->isUpgradable()) { - $updatable = ' [upgradable: v' . $upgrader->getRemoteVersion() . ']'; - } - - } else { - if ($installed = $this->gpm->findPackage($package)) { - $name = $installed->name; - $version = $installed->version; - - if ($this->gpm->isUpdatable($package)) { - $updatable = ' [updatable: v' . $installed->available . ']'; - } - } - } - - $updatable = $updatable ?: ''; - - if ($installed || $package == 'grav') { - $this->output->writeln('You are running ' . $name . ' v' . $version . '' . $updatable); - } else { - $this->output->writeln('Package ' . $package . ' not found'); - } - } - } -} diff --git a/src/system/tests/Grav/Test/.gitkeep b/src/system/tests/Grav/Test/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/system/tests/Grav/TestCase.php b/src/system/tests/Grav/TestCase.php deleted file mode 100644 index 718bbad..0000000 --- a/src/system/tests/Grav/TestCase.php +++ /dev/null @@ -1,8 +0,0 @@ - - - - - ./Grav/ - - - diff --git a/src/user/accounts/.gitkeep b/src/user/accounts/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/user/config/site.yaml b/src/user/config/site.yaml deleted file mode 100644 index c45818d..0000000 --- a/src/user/config/site.yaml +++ /dev/null @@ -1,7 +0,0 @@ -title: Grav -author: - name: Joe Bloggs - email: 'joe@test.com' -metadata: - description: 'Grav is an easy to use, yet powerful, open source flat-file CMS' - diff --git a/src/user/config/system.yaml b/src/user/config/system.yaml deleted file mode 100644 index 21dd89b..0000000 --- a/src/user/config/system.yaml +++ /dev/null @@ -1,41 +0,0 @@ -absolute_urls: false - -home: - alias: '/home' - -pages: - theme: antimatter - markdown_extra: false - process: - markdown: true - twig: false - -cache: - enabled: true - check: - method: file - driver: auto - prefix: 'g' - -twig: - cache: true - debug: true - auto_reload: true - autoescape: false - -assets: - css_pipeline: false - css_minify: true - css_rewrite: true - js_pipeline: false - js_minify: true - -errors: - display: true - log: true - -debugger: - enabled: false - twig: true - shutdown: - close_connection: true diff --git a/src/user/data/.gitkeep b/src/user/data/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/user/pages/01.home/default.md b/src/user/pages/01.home/default.md deleted file mode 100644 index 64ea8ae..0000000 --- a/src/user/pages/01.home/default.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Home ---- - -# Grav is Running! -## You have installed **Grav** successfully - -Congratulations! You have installed the **Base Grav Package** that provides a **simple page** and the default **antimatter** theme to get you started. - ->>>>> If you want a more **full-featured** base install, you should check out [**Skeleton** packages available in the downloads](http://getgrav.org/downloads). - -### Find out all about Grav - -* Learn about **Grav** by checking out our dedicated [Learn Grav](http://learn.getgrav.org) site. -* Download **plugins**, **themes**, as well as other Grav **skeleton** packages from the [Grav Downloads](http://getgrav.org/downloads) page. -* Check out our [Grav Development Blog](http://getgrav.org/blog) to find out the latest goings on in the Grav-verse. - -### Edit this Page - -To edit this page, simply navigate to the folder you installed **Grav** into, and then browse to the `user/pages/01.home` folder and open the `default.md` file in your [editor of choice](http://learn.getgrav.org/basics/requirements). You will see the content of this page in [Markdown format](http://learn.getgrav.org/content/markdown). - -### Create a New Page - -Creating a new page is a simple affair in **Grav**. Simply follow these simple steps: - -1. Navigate to your pages folder: `user/pages/` and create a new folder. In this example, we will use [explicit default ordering](http://learn.getgrav.org/content/content-pages) and call the folder `02.mypage`. -2. Launch your text editor and paste in the following sample code: - - --- - title: My New Page - --- - # My New Page! - - This is the body of **my new page** and I can easily use _Markdown_ syntax here. - -3. Save this file in the `user/pages/02.mypage/` folder as `default.md`. This will tell **Grav** to render the page using the **default** template. -4. That is it! Reload your browser to see your new page in the menu. - ->>> NOTE: The page will automatically show up in the Menu after the "Home" menu item. If you wish to change the name that shows up in the Menu, simple add: `menu: My Page` between the dashes in the page content. This is called the YAML front matter, and it is where you configure page-specific options. diff --git a/src/user/plugins/.gitkeep b/src/user/plugins/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/user/plugins/admin/CHANGELOG.md b/src/user/plugins/admin/CHANGELOG.md deleted file mode 100644 index 46c6db3..0000000 --- a/src/user/plugins/admin/CHANGELOG.md +++ /dev/null @@ -1,261 +0,0 @@ -# v1.0.0-rc.4 -## 10/29/2015 - -1. [](#improved) - * Changed admin menu event hook to `onAdminMenu()` - * Minor improvements for admin page location - * Additional lang strings for Grav 1.0.0-rc.3 - -# v1.0.0-rc.3 -## 10/27/2015 - -1. [](#improved) - * Rely on context-language for active language - * Improved some Russian translations - * Only show login if not already logged in -1. [](#bugfix) - * Disable asset pipeline in admin only - * Fix Editor cursor insertion point when text is selected in some actions - -# v1.0.0-rc.2 -## 10/23/2015 - -1. [](#bugfix) - * Reverted lang redirect code. Needs to be reworked to be more reliable - -# v1.0.0-rc.1 -## 10/23/2015 - -1. [](#new) - * Redirect to non-language URL except for `pages/` -1. [](#improved) - * New language strings for new `system.yaml` fields - * Improved Russian translations - * Improved compatibility with PECL Yaml parser -1. [](#bugfix) - * Redirect to correct page if you change folder/slug - * Fix issue with Asset pipeline not being disabled in admin - * Fix for HTML in text input fields - * Fixed various icons in headers - -# v0.6.2 -## 10/15/2015 - -1. [](#improved) - * Use `title` rather than `menu` in Page listing - * Wrapped language strings in double-quotes - * New language strings for new fields -1. [](#bugfix) - * Fixed issue with IE not able to save pages - -# v0.6.1 -## 10/07/2015 - -1. [](#new) - * Added the ability to render front-end templates in markdown preview - * Option to disable Google-based fonts. Useful for Cyrillic languages. - * Couple of new static helper methods used by new page blueprints - * New `fieldset` form field (thanks @Sommerregen!) -1. [](#improved) - * Hide editor buttons in preview mode - * Improved support for admin when offline - * Use relative URL in Login form - * Added some more missing lang strings - * Improved German translation - * Compressed CSS files for improved performance - * Only get last 7 days in week count calculation -1. [](#bugfix) - * Fix saving pages in local-specific languages - * Only track 'human' page hits in statistics - * Responsive fixes for 'wordy' languages - * Fixed delete issue with array field type - * Fixed some hardcoded `admin` references to allow admin path change - * Fix for issue with lang code being added twice - * Fix language name in admin buttons - -# v0.6.0 -## 09/16/2015 - -1. [](#new) - * Support for custom markdown editor buttons! - * Added Russian translations - * Added Japanese translations - * Ajax session keep-alive when editing forms -1. [](#improved) - * Added missing Italian translations - * Added additional options field into the pages form field -1. [](#bugfix) - * Fix GPM errors in offline mode - * Fix for duplicate status messages - -# v0.5.0 -## 09/11/2015 - -1. [](#new) - * Responsive layout for mobile compatibility (thanks @Vivalldi!) - * Added page type and many other new filters to Page list view - * Added granular ACL requirements to admin pages - * Ability to define page date format - * Added `onAdminTemplateNavPluginHook` to allow for plugins to hook into sidebar - * Added YAML Twig filters (to and from) - * Support for nested metadata - * Added ability to disable automatic update checks via admin plugin configuration - * Initial Spanish translation -1. [](#improved) - * Check for existence of a user account - * Various language additions - * Refactored form fields to remove duplicates from form plugin - * Improved date picker - * Improved display field - * Add page template type to page list view - * Various UI fixes - * Added some default field 'focus' to save clicking - * Only allow "Add Modular" if the theme has modular templates - * Updated `chartist.js` library - * Updated 'fontawesome' fonts to the latest v4.4 -1. [](#bugfix) - * Fix for "drag-n-drop" of non-image media - * Fix a fatal error in GPM when offline - * Fix a z-index bug with tooltips - * Fix a z-index bug in lang dropdowns - * Don't allow deleting of last empty array field - * Fix for images with parenthesis in filenames - * Fix for page title visualization when not set - * Fix for cursor position in folder/array fields - -# v0.4.3 -## 08/31/2015 - -1. [](#new) - * Added Japanese translation - * Support for independent file name and template override -1. [](#improved) - * Improved slug generation using `slugify.js` - * Allow the `title` twig variables to set the page title - * Improved Page media handling with several bugfixes - * Prevent error when there are no pages on a site - * If all updates are applied, show "Fully Updated" text in dashboard - * Better preview link (requires `rtrim` filter from Grav 0.9.40) - * Order all plugins and themes alphabetically - * Removed duplicate language entries -1. [](#bugfix) - * Fix for redirect after saving when multilang not enabled - * Fix for deleting responsive media - * Fix for HTML encoding in markdown field - -# v0.4.2 -## 08/25/2015 - -1. [](#bugfix) - * Fix for current admin lang not showing up in page lang dropdown - * Fix for incorrect NAME/CONTENT lang keys - * Fix for incorrect site link - -# v0.4.1 -## 08/24/2015 - -1. [](#bugfix) - * Fix for broken **Add Page** - Doh! - * Fix for empty site link when at root - -# v0.4.0 -## 08/24/2015 - -1. [](#new) - * Multi-language Page support!!! - * Admin languages configurable per user - * Toastr messages for `check updates` - * new `tu` filter for admin translations - * Italian and German admin translations - * Added a save location in system and site configuration - * Page metadata now uses flexible array field -1. [](#improved) - * Allow subpages of modular pages to display in pages list - * Open external pages in new tabs - * Reworked `visibility` of pages - * Use `PLUGIN_ADMIN` prefix for translations - * Added link to gravatar.com to avoid confusion on avatar - * Limit page count to 200 in ordering field - * Fixed various Safari _flex_ issues - * Use `rawRoute()` for page links - * Minor `param separator` fixes - * Various CSS fixes - * Improved CodeMirror to force spaces - * Added **Selectize** dropdowns to various forms and modals -1. [](#bugfix) - * Fix for `Call to a member function path() on non-object` error - * Fixed dropdown z-index issues - * Correctly set the filename including language if set - * Fix for empty taxonomies on page save - * Fix for page not redirecting properly on folder change - * Fix for table headers styling - * Added missing translation strings - * Unique page counting in total page counts - * Fixed JS warning with page filtering and deleting - - -# v0.3.0 -## 08/11/2015 - -1. [](#new) - * Show current date in form date format fields - * Added a new **check for updates** button to flush GPM - * Added session timeout configuration for admin - * Added `isSymlink` logic for Grav - * Added new `phpinfo` page -1. [](#improved) - * Improved toggleables - * Support `param_separator` for Apache on windows - * Logout now goes to interstitial to provide session messages - * Updated hints and improved formatting - * Encoding URI for images in editor preview - * Create user `system.yaml` and `site.yaml` if they are missing - * Open external links in new tab by default - * Set edit mode to `normal` by default - * Disable CSS/JS pipelining in the admin -1. [](#bugfix) - * Fixed form submission not working in IE - * Fix fatal error when deleting homepage - * Prevent admin plugin activating when the URL of a page contains partial route - -# v0.2.0 -## 08/06/2015 - -1. [](#new) - * Added multiple **clear cache** types - * Added back to themes link when adding new themes - * Properly handles visibility and ordering and guesses best option on new - * Added new templates field with support for custom (unsupported) template type - * Added new display field for displaying simple text value - * **Update Grav** button now works - * Added spanish translation - * Added german translation -1. [](#improved) - * Improved page order handling logic - * Implemented 2-step theme switching logic with warning - * Force `modular` page class for modular template - * Clear page cache on page delete (ghost pages still showing) - * Clears route on page save so changes such as `slug` are picked up - * Fix dashboard layout in Safari - * Added tooltips for official 'Team Grav' themes/plugins -1. [](#bugfix) - * Handle modular page templates on create - * Fixed Firefox JS error for arrays - * Ensure we don't change page type to empty and save (causing page to be deleted) - * Fixed some minor CSS issues with editor - * Fixed link to RocketTheme.com - * Disabled fields now stay properly disabled - -# v0.1.1 -## 08/04/2015 - -1. [](#bugfix) - * Fixed GitHub URLs - * Hiding toggle for disabling Admin plugin - * Removed extra text not needed - -# v0.1.0 -## 08/04/2015 - -1. [](#new) - * ChangeLog started... diff --git a/src/user/plugins/admin/LICENSE b/src/user/plugins/admin/LICENSE deleted file mode 100644 index 0e788c6..0000000 --- a/src/user/plugins/admin/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Grav - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/src/user/plugins/admin/README.md b/src/user/plugins/admin/README.md deleted file mode 100644 index 4aaad46..0000000 --- a/src/user/plugins/admin/README.md +++ /dev/null @@ -1,110 +0,0 @@ -# Grav Standard Administration Panel Plugin - -[![Join the chat at https://gitter.im/getgrav/grav-plugin-admin](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/getgrav/grav-plugin-admin?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -This **admin plugin** for [Grav](http://github.com/getgrav/grav) is an HTML user interface that provides a convenient way to configure Grav and easily create and modify pages. This will remain a totally optional plugin, and is not in any way required or needed to use Grav effectively. In fact, the admin provides an intentionally limited view to ensure it remains easy to use and not overwhelming. I'm sure power users will still prefer to work with the configuration files directly. - -> IMPORTANT!!! This plugin is currently in development as is to be considered a **beta release**. As such, use this in a production environment **at your own risk!**. - -![](assets/admin-dashboard.png) - -# Features - -* User login with automatic password encryption -* Forgot password functionality -* Logged-in-user management -* One click Grav core updates -* Dashboard with maintenance status, site activity and latest page updates -* Ajax-powered backup capability -* Ajax-powered clear-cache capability -* System configuration management -* Site configuration management -* Normal and Expert modes which allow editing via forms or YAML -* Page listing with filtering and search -* Page creation, editing, moving, copying, and deleting -* Powerful syntax highlighting code editor with instant Grav-powered preview -* Editor features, hot keys, toolbar, and distraction-free fullscreen mode -* Drag-n-drop upload of page media files including drag-n-drop placement in the editor -* One click theme and plugin updates -* Plugin manager that allows listing and configuration of installed plugins -* Theme manager that allows listing and configuration of installed themes -* GPM-powered installation of new plugins and themes - -# Support - -#### Support - -We have tested internally, but we hope to use this public beta phase to identify, isolate, and fix issues related to the plugin to ensure it is as solid and reliable as possible. - -For **live chatting**, please use the dedicated [Gitter Chat Room for the admin plugin](https://gitter.im/getgrav/grav-plugin-admin) for discussions directly related to the admin plugin. - -For **bugs, features, improvements**, please ensure you [create issues in the admin plugin GitHub repository](https://github.com/getgrav/grav-plugin-admin). - -# Installation - -First ensure you are running the latest **Grav 0.9.34 or later**. This is required for the admin plugin to run properly (`-f` forces a refresh of the GPM index). - -``` -$ bin/gpm selfupgrade -f -``` - -The admin plugin actually requires the help of 3 other plugins, so to get the admin plugin to work you first need to install **admin**, **login**, **forms**, and **email** plugins. These are available via GPM, and because the plugin has dependencies you just need to proceed and install the admin plugin, and agree when prompted to install the others: - -``` -$ bin/gpm install admin -``` - -### Manual Installation - -Manual installation is not the recommended method of installation, however, it is still possible to install the admin plugin manually. Basically, you need to download each of the following plugins individually: - -* [admin](https://github.com/getgrav/grav-plugin-admin/archive/develop.zip) -* [login](https://github.com/getgrav/grav-plugin-login/archive/develop.zip) -* [form](https://github.com/getgrav/grav-plugin-form/archive/develop.zip) -* [email](https://github.com/getgrav/grav-plugin-email/archive/develop.zip) - -Extract each archive file into your `user/plugins` folder, then ensure the folders are renamed to just `admin/`, `login/`, `form/`, and `email/`. Then proceed with the **Usage instructions below**. - -# Usage - -### Create User with CLI - -After this you need to create a user account with admin privileges: - -``` -$ bin/grav newuser -``` - -### Create User Manually - -Alternatively, you can create a user account manually, in a file called `user/accounts/admin.yaml`. This **filename** is actually the **username** that you will use to login. The contents will contain the other information for the user. - -``` -password: 'password' -email: 'youremail@mail.com' -fullname: 'Johnny Appleseed' -title: 'Site Administrator' -access: - admin: - login: true - super: true -``` - -Of course you should edit your `email`, `password`, `fullname`, and `title` to suit your needs. - -> You can use any password when you manually put it in this `.yaml` file. However, when you change your password in the admin, it must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters. - -# Accessing the Admin - -By default, you can access the admin by pointing your browser to `http://yoursite.com/admin`. You can simply log in with the `username` and `password` set in the YAML file you configured earlier. - -> After logging in, your **plaintext password** will be removed and replaced by an **encrypted** one. - -# Standard Free & Paid Pro Versions - -If you have been following the [blog](http://getgrav.org/blog), [Twitter](https://twitter.com/getgrav), [gitter.im chat](https://gitter.im/getgrav/grav), etc., you probably already know now that our intention is to provide two versions of this plugin. - -The **standard free version**, is very powerful, and has more functionality than most commercial flat-file CMS systems. - -We also intend to release in the near future a more feature-rich **pro version** that will include enhanced functionality, as well as some additional nice-to-have capabilities. This pro version will be a **paid** plugin the price of which is not yet 100% finalized. - diff --git a/src/user/plugins/admin/admin.php b/src/user/plugins/admin/admin.php deleted file mode 100644 index c605d07..0000000 --- a/src/user/plugins/admin/admin.php +++ /dev/null @@ -1,414 +0,0 @@ - [['login', 100000], ['onPluginsInitialized', 1000]], - 'onShutdown' => ['onShutdown', 1000] - ]; - } - - /** - * If the admin path matches, initialize the Login plugin configuration and set the admin - * as active. - */ - public function login() - { - // Check for Pro version is enabled - if ($this->config->get('plugins.admin-pro.enabled')) { - $this->active = false; - return; - } - - $route = $this->config->get('plugins.admin.route'); - if (!$route) { - return; - } - - $this->grav['debugger']->addMessage("Admin Basic"); - - $this->base = '/' . trim($route, '/'); - $this->uri = $this->grav['uri']; - - // Only activate admin if we're inside the admin path. - if ($this->uri->route() == $this->base || - substr($this->uri->route(), 0, strlen($this->base) + 1) == $this->base . '/') { - $this->active = true; - } - } - - /** - * If the admin plugin is set as active, initialize the admin - */ - public function onPluginsInitialized() - { - // Only activate admin if we're inside the admin path. - if ($this->active) { - $this->initializeAdmin(); - - // Disable Asset pipelining - $this->config->set('system.assets.css_pipeline', false); - $this->config->set('system.assets.js_pipeline', false); - } - - // We need popularity no matter what - require_once __DIR__ . '/classes/popularity.php'; - $this->popularity = new Popularity(); - } - - /** - * Sets longer path to the home page allowing us to have list of pages when we enter to pages section. - */ - public function onPagesInitialized() - { - $this->session = $this->grav['session']; - - // Set original route for the home page. - $home = '/' . trim($this->config->get('system.home.alias'), '/'); - - // set the default if not set before - $this->session->expert = $this->session->expert ?: false; - - // set session variable if it's passed via the url - if ($this->uri->param('mode') == 'expert') { - $this->session->expert = true; - } elseif ($this->uri->param('mode') == 'normal') { - $this->session->expert = false; - } - - // check for existence of a user account - $account_dir = $file_path = $this->grav['locator']->findResource('account://'); - $user_check = (array) glob($account_dir . '/*.yaml'); - if (!count($user_check) > 0) { - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.NO_USER_ACCOUNTS'), 'info'); - } - - /** @var Pages $pages */ - $pages = $this->grav['pages']; - - $this->grav['admin']->routes = $pages->routes(); - - // Remove default route from routes. - if (isset($this->grav['admin']->routes['/'])) { - unset($this->grav['admin']->routes['/']); - } - - $page = $pages->dispatch('/', true); - - // If page is null, the default page does not exist, and we cannot route to it - if ($page) { - $page->route($home); - } - - // Make local copy of POST. - $post = !empty($_POST) ? $_POST : array(); - - // Handle tasks. - $this->admin->task = $task = !empty($post['task']) ? $post['task'] : $this->uri->param('task'); - if ($task) { - require_once __DIR__ . '/classes/controller.php'; - $controller = new AdminController($this->grav, $this->template, $task, $this->route, $post); - $controller->execute(); - $controller->redirect(); - } elseif ($this->template == 'logs' && $this->route) { - // Display RAW error message. - echo $this->admin->logEntry(); - exit(); - } - - $self = $this; - - // Replace page service with admin. - $this->grav['page'] = function () use ($self) { - $page = new Page; - - if (file_exists(__DIR__ . "/pages/admin/{$self->template}.md")) { - $page->init(new \SplFileInfo(__DIR__ . "/pages/admin/{$self->template}.md")); - $page->slug(basename($self->template)); - return $page; - } - - // If the page cannot be found, try looking in plugins. - // Allows pages added by plugins in admin - $plugins = Grav::instance()['config']->get('plugins', []); - - foreach($plugins as $plugin => $data) { - $path = $this->grav['locator']->findResource( - "user://plugins/{$plugin}/admin/pages/{$self->template}.md"); - - if (file_exists($path)) { - $page->init(new \SplFileInfo($path)); - $page->slug(basename($self->template)); - return $page; - } - } - }; - } - - /** - * Add twig paths to plugin templates. - */ - public function onTwigTemplatePaths() - { - $twig_paths = []; - $this->grav->fireEvent('onAdminTwigTemplatePaths', new Event(['paths' => &$twig_paths])); - - $twig_paths[] = __DIR__ . '/themes/' . $this->theme . '/templates'; - - $this->grav['twig']->twig_paths = $twig_paths; - - } - - /** - * Set all twig variables for generating output. - */ - public function onTwigSiteVariables() - { - $twig = $this->grav['twig']; - - // Dynamic type support - $format = $this->uri->extension(); - $ext = '.' . ($format ? $format : 'html') . TWIG_EXT; - - $twig->twig_vars['location'] = $this->template; - $twig->twig_vars['base_url_relative_frontend'] = $twig->twig_vars['base_url_relative'] ?: '/'; - $twig->twig_vars['admin_route'] = trim($this->config->get('plugins.admin.route'), '/'); - $twig->twig_vars['base_url_relative'] = - $twig->twig_vars['base_url_simple'] . '/' . $twig->twig_vars['admin_route']; - $twig->twig_vars['theme_url'] = '/user/plugins/admin/themes/' . $this->theme; - $twig->twig_vars['base_url'] = $twig->twig_vars['base_url_relative']; - $twig->twig_vars['base_path'] = GRAV_ROOT; - $twig->twig_vars['admin'] = $this->admin; - - // Gather Plugin-hooked nav items - $this->grav->fireEvent('onAdminMenu'); - - // DEPRECATED - $this->grav->fireEvent('onAdminTemplateNavPluginHook'); - - switch ($this->template) { - case 'dashboard': - $twig->twig_vars['popularity'] = $this->popularity; - break; - case 'pages': - $page = $this->admin->page(true); - if ($page != null) { - $twig->twig_vars['file'] = File::instance($page->filePath()); - $twig->twig_vars['media_types'] = str_replace('defaults,', '', - implode(',.', array_keys($this->config->get('media')))); - - } - break; - } - } - - public function onShutdown() - { - // Just so we know that we're in this debug mode - if ($this->config->get('plugins.admin.popularity.enabled')) { - - // Only track non-admin - if (!$this->active) { - $this->popularity->trackHit(); - } - } - } - - /** - * Handles getting GPM updates - */ - public function onTaskGPM() - { - $action = $_POST['action']; // getUpdatable | getUpdatablePlugins | getUpdatableThemes | gravUpdates - $flush = isset($_POST['flush']) && $_POST['flush'] == true ? true : false; - - if (isset($this->grav['session'])) { - $this->grav['session']->close(); - } - - try { - $gpm = new GPM($flush); - - switch ($action) { - case 'getUpdates': - $resources_updates = $gpm->getUpdatable(); - $grav_updates = [ - "isUpdatable" => $gpm->grav->isUpdatable(), - "assets" => $gpm->grav->getAssets(), - "version" => GRAV_VERSION, - "available" => $gpm->grav->getVersion(), - "date" => $gpm->grav->getDate(), - "isSymlink" => $gpm->grav->isSymlink() - ]; - - echo json_encode([ - "status" => "success", - "payload" => ["resources" => $resources_updates, "grav" => $grav_updates, "installed" => $gpm->countInstalled(), 'flushed' => $flush] - ]); - break; - } - } catch (\Exception $e) { - echo json_encode(["status" => "error", "message" => $e->getMessage()]); - } - - exit; - } - - /** - * Initialize the admin. - * - * @throws \RuntimeException - */ - protected function initializeAdmin() - { - $this->enable([ - 'onTwigExtensions' => ['onTwigExtensions', 1000], - 'onPagesInitialized' => ['onPagesInitialized', 1000], - 'onTwigTemplatePaths' => ['onTwigTemplatePaths', 1000], - 'onTwigSiteVariables' => ['onTwigSiteVariables', 1000], - 'onTask.GPM' => ['onTaskGPM', 0] - ]); - - // Check for required plugins - if (!$this->grav['config']->get('plugins.login.enabled') || - !$this->grav['config']->get('plugins.form.enabled') || - !$this->grav['config']->get('plugins.email.enabled')) { - throw new \RuntimeException('One of the required plugins is missing or not enabled'); - } - - // Double check we have system.yaml and site.yaml - $config_files[] = $this->grav['locator']->findResource('user://config') . '/system.yaml'; - $config_files[] = $this->grav['locator']->findResource('user://config') . '/site.yaml'; - foreach ($config_files as $config_file) { - if (!file_exists($config_file)) { - touch($config_file); - } - } - - // Decide admin template and route. - $path = trim(substr($this->uri->route(), strlen($this->base)), '/'); - $this->template = 'dashboard'; - - if ($path) { - $array = explode('/', $path, 2); - $this->template = array_shift($array); - $this->route = array_shift($array); - } - - /** @var Language $language */ -// $require_language = ['pages', 'translations']; -// $language = $this->grav['language']; -// if ($language->isLanguageInUrl() && !in_array($this->template, $require_language)) { -// $this->grav->redirect($this->uri->route()); -// } - - // Initialize admin class. - require_once __DIR__ . '/classes/admin.php'; - $this->admin = new Admin($this->grav, $this->base, $this->template, $this->route); - - // And store the class into DI container. - $this->grav['admin'] = $this->admin; - - // Get theme for admin - $this->theme = $this->config->get('plugins.admin.theme', 'grav'); - - $assets = $this->grav['assets']; - $translations = 'if (!window.translations) window.translations = {}; ' . PHP_EOL . 'window.translations.PLUGIN_ADMIN = {};' . PHP_EOL; - - $strings = ['EVERYTHING_UP_TO_DATE', - 'UPDATES_ARE_AVAILABLE', - 'IS_AVAILABLE_FOR_UPDATE', - 'AND', - 'IS_NOW_AVAILABLE', - 'CURRENT', - 'UPDATE_GRAV_NOW', - 'TASK_COMPLETED', - 'UPDATE', - 'UPDATING_PLEASE_WAIT', - 'GRAV_SYMBOLICALLY_LINKED', - 'OF_YOUR', - 'OF_THIS', - 'HAVE_AN_UPDATE_AVAILABLE', - 'UPDATE_AVAILABLE', - 'UPDATES_AVAILABLE', - 'FULLY_UPDATED', - 'DAYS']; - - foreach($strings as $string) { - $translations .= 'translations.PLUGIN_ADMIN.' . $string .' = "' . $this->admin->translate('PLUGIN_ADMIN.' . $string) . '"; ' . PHP_EOL;; - } - - $assets->addInlineJs($translations); - } - - /** - * Add Twig Extensions - */ - public function onTwigExtensions() - { - require_once(__DIR__.'/twig/AdminTwigExtension.php'); - $this->grav['twig']->twig->addExtension(new AdminTwigExtension()); - } -} diff --git a/src/user/plugins/admin/admin.yaml b/src/user/plugins/admin/admin.yaml deleted file mode 100644 index 004fe14..0000000 --- a/src/user/plugins/admin/admin.yaml +++ /dev/null @@ -1,20 +0,0 @@ -enabled: true -route: '/admin' -theme: grav -dashboard: - days_of_stats: 7 -session: - timeout: 1800 -warnings: - delete_page: true -edit_mode: normal -show_beta_msg: true -google_fonts: true -enable_auto_updates_check: true -popularity: - enabled: true - ignore: ['/test*','/modular'] - history: - daily: 30 - monthly: 12 - visitors: 20 diff --git a/src/user/plugins/admin/assets/admin-dashboard.png b/src/user/plugins/admin/assets/admin-dashboard.png deleted file mode 100644 index e379ba5d43b998d11adb8df5e7c571d7cc7fcbce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180920 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 Jj(a?>(J!;pg;x*5=14p|&}oeks{WezhtL>Id* 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 diff --git a/src/user/plugins/admin/blueprints.yaml b/src/user/plugins/admin/blueprints.yaml deleted file mode 100644 index c73bd2e..0000000 --- a/src/user/plugins/admin/blueprints.yaml +++ /dev/null @@ -1,166 +0,0 @@ -name: Admin Panel -version: 1.0.0-rc.4 -description: Adds an advanced administration panel to manage your site -icon: empire -author: - name: Team Grav - email: devs@getgrav.org - url: http://getgrav.org -homepage: https://github.com/getgrav/grav-plugin-admin -keywords: admin, plugin, manager, panel -bugs: https://github.com/getgrav/grav-plugin-admin/issues -readme: https://github.com/getgrav/grav-plugin-admin/blob/develop/README.md -license: MIT - -dependencies: - - form - - email - - login - -form: - validation: loose - fields: - Basics: - type: section - title: Basics - underline: false - - enabled: - type: hidden - label: Plugin status - highlight: 1 - default: 0 - options: - 1: Enabled - 0: Disabled - validate: - type: bool - - route: - type: text - label: Administrator path - size: medium - placeholder: "Default route for administrator (relative to base)" - help: If you want to change the URL for the administrator, you can provide a path here - - theme: - type: hidden - label: Theme - default: grav - - edit_mode: - type: select - label: Edit mode - size: small - default: normal - options: - normal: Normal - expert: Expert - help: Auto will use blueprint if available, if none found, it will use "Expert" mode. - - google_fonts: - type: toggle - label: Use Google Fonts - highlight: 1 - default: 1 - options: - 1: Enabled - 0: Disabled - validate: - type: bool - help: Use Google custom fonts. Disable this to use Helvetica. Useful when using Cyrillic and other languages with unsupported characters. - - show_beta_msg: - type: toggle - label: Show Beta Message - highlight: 1 - default: 1 - options: - 1: Enabled - 0: Disabled - validate: - type: bool - help: Show the beta warning message on the dashboard - - enable_auto_updates_check: - type: toggle - label: Automatically check for updates - highlight: 1 - default: 1 - options: - 1: Enabled - 0: Disabled - validate: - type: bool - help: Shows an informative message, in the admin panel, when an update is available. - - session.timeout: - type: text - size: small - label: Session Timeout - help: "Sets the session timeout in seconds" - validate: - type: number - min: 1 - - warnings.delete_page: - type: toggle - label: Warn on page delete - highlight: 1 - default: 1 - options: - 1: Enabled - 0: Disabled - validate: - type: bool - help: Ask the user confirmation when deleting a page - - Popularity: - type: section - title: Popularity - underline: true - - popularity.enabled: - type: toggle - label: Visitor tracking - highlight: 1 - default: 1 - options: - 1: Enabled - 0: Disabled - validate: - type: bool - help: Enable the visitors stats collecting feature - - dashboard.days_of_stats: - type: text - label: Days of stats - size: x-small - default: 7 - help: Keep stats for the specified number of days, then drop them - validate: - type: int - - popularity.ignore: - type: array - label: Ignore - size: large - help: "URLs to ignore" - default: ['/test*','/modular'] - value_only: true - placeholder_value: /ignore-this-route - - popularity.history.daily: - type: hidden - label: Daily history - default: 30 - - popularity.history.monthly: - type: hidden - label: Monthly history - default: 12 - - popularity.history.visitors: - type: hidden - label: Visitors history - default: 20 diff --git a/src/user/plugins/admin/classes/admin.php b/src/user/plugins/admin/classes/admin.php deleted file mode 100644 index 3c97f5b..0000000 --- a/src/user/plugins/admin/classes/admin.php +++ /dev/null @@ -1,867 +0,0 @@ -grav = $grav; - $this->base = $base; - $this->location = $location; - $this->route = $route; - $this->uri = $this->grav['uri']; - $this->session = $this->grav['session']; - $this->user = $this->grav['user']; - $language = $this->grav['language']; - - if ($language->enabled()) { - $this->multilang = true; - $this->languages_enabled = $this->grav['config']->get('system.languages.supported', []); - - //Set the currently active language for the admin - $language = $this->grav['uri']->param('lang'); - if (!$language) { - if (!$this->session->admin_lang) $this->session->admin_lang = 'en'; - $language = $this->session->admin_lang; - } - $this->grav['language']->setActive($language ?: 'en'); - } else { - $this->grav['language']->setActive('en'); - $this->multilang = false; - } - - } - - /** - * Get current session. - * - * @return Session - */ - public function session() - { - return $this->session; - } - - /** - * Add message into the session queue. - * - * @param string $msg - * @param string $type - */ - public function setMessage($msg, $type = 'info') - { - /** @var Message $messages */ - $messages = $this->grav['messages']; - $messages->add($msg, $type); - } - - /** - * Fetch and delete messages from the session queue. - * - * @param string $type - * - * @return array - */ - public function messages($type = null) - { - /** @var Message $messages */ - $messages = $this->grav['messages']; - - return $messages->fetch($type); - } - - /** - * Authenticate user. - * - * @param array $form Form fields. - * - * @return bool - */ - public function authenticate($form) - { - if (!$this->user->authenticated && isset($form['username']) && isset($form['password'])) { - $user = User::load($form['username']); - - //default to english if language not set - if (empty($user->language)) { - $user->set('language', 'en'); - } - - if ($user->exists()) { - $user->authenticated = true; - - // Authenticate user. - $result = $user->authenticate($form['password']); - - if ($result) { - $this->user = $this->session->user = $user; - - /** @var Grav $grav */ - $grav = $this->grav; - - $this->setMessage($this->translate('PLUGIN_ADMIN.LOGIN_LOGGED_IN', [$this->user->language]), 'info'); - - $redirect_route = $this->uri->route(); - $grav->redirect($redirect_route); - } - } - } - - return $this->authorize(); - } - - /** - * Checks user authorisation to the action. - * - * @param string $action - * - * @return bool - */ - public function authorize($action = 'admin.login') - { - $action = (array)$action; - - foreach ($action as $a) { - if ($this->user->authorize($a)) { - return true; - } - } - - return false; - } - - /** - * Returns edited page. - * - * @param bool $route - * - * @return Page - */ - public function page($route = false) - { - $path = $this->route; - - if ($route && !$path) { - $path = '/'; - } - - if (!isset($this->pages[$path])) { - $this->pages[$path] = $this->getPage($path); - } - - return $this->pages[$path]; - } - - /** - * Returns blueprints for the given type. - * - * @param string $type - * - * @return Data\Blueprint - */ - public function blueprints($type) - { - if ($this->blueprints === null) { - $this->blueprints = new Data\Blueprints('blueprints://'); - } - - return $this->blueprints->get($type); - } - - /** - * Gets configuration data. - * - * @param string $type - * @param array $post - * - * @return Data\Data|null - * @throws \RuntimeException - */ - public function data($type, $post = array()) - { - static $data = []; - - if (isset($data[$type])) { - return $data[$type]; - } - - if (!$post) { - $post = isset($_POST) ? $_POST : []; - } - - switch ($type) { - case 'configuration': - case 'system': - $type = 'system'; - $blueprints = $this->blueprints("config/{$type}"); - $config = $this->grav['config']; - $obj = new Data\Data($config->get('system'), $blueprints); - $obj->merge($post); - $file = CompiledYamlFile::instance($this->grav['locator']->findResource("config://{$type}.yaml")); - $obj->file($file); - $data[$type] = $obj; - break; - - case 'settings': - case 'site': - $type = 'site'; - $blueprints = $this->blueprints("config/{$type}"); - $config = $this->grav['config']; - $obj = new Data\Data($config->get('site'), $blueprints); - $obj->merge($post); - $file = CompiledYamlFile::instance($this->grav['locator']->findResource("config://{$type}.yaml")); - $obj->file($file); - $data[$type] = $obj; - break; - - case 'login': - $data[$type] = null; - break; - - default: - /** @var UniformResourceLocator $locator */ - $locator = $this->grav['locator']; - $filename = $locator->findResource("config://{$type}.yaml", true, true); - $file = CompiledYamlFile::instance($filename); - - if (preg_match('|plugins/|', $type)) { - /** @var Plugins $plugins */ - $plugins = $this->grav['plugins']; - $obj = $plugins->get(preg_replace('|plugins/|', '', $type)); - $obj->merge($post); - $obj->file($file); - - $data[$type] = $obj; - } elseif (preg_match('|themes/|', $type)) { - /** @var Themes $themes */ - $themes = $this->grav['themes']; - $obj = $themes->get(preg_replace('|themes/|', '', $type)); - $obj->merge($post); - $obj->file($file); - - $data[$type] = $obj; - } elseif (preg_match('|users/|', $type)) { - $obj = User::load(preg_replace('|users/|', '', $type)); - $obj->merge($post); - - $data[$type] = $obj; - } else { - throw new \RuntimeException("Data type '{$type}' doesn't exist!"); - } - } - - return $data[$type]; - } - - /** - * Get the GPM instance - * - * @return GPM The GPM instance - */ - public function gpm() - { - if (!$this->gpm) { - try { - $this->gpm = new GPM(); - } catch (\Exception $e) {} - } - - return $this->gpm; - } - - /** - * Converts dot notation to array notation. - * - * @param string $name - * - * @return string - */ - public function field($name) - { - $path = explode('.', $name); - - return array_shift($path) . ($path ? '[' . implode('][', $path) . ']' : ''); - } - - /** - * Get all routes. - * - * @return array - */ - public function routes($unique = false) - { - /** @var Pages $pages */ - $pages = $this->grav['pages']; - - if ($unique) { - $routes = array_unique($pages->routes()); - } else { - $routes = $pages->routes(); - } - return $routes; - } - - /** - * Count the pages - * - * @return array - */ - public function countPages() - { - $routable = $this->grav['pages']->all()->routable(); - $modular = $this->grav['pages']->all()->modular(); - - return count($routable) + count($modular); - } - - /** - * Get All template types - * - * @return array - */ - public function types() - { - return Pages::types(); - } - - /** - * Get All modular template types - * - * @return array - */ - public function modularTypes() - { - return Pages::modularTypes(); - } - - /** - * Get all plugins. - * - * @return array - */ - public function plugins($local = true) - { - $gpm = $this->gpm(); - - if (!$gpm) { - return; - } - - return $local ? $gpm->getInstalledPlugins() : $gpm->getRepositoryPlugins()->filter(function ( - $package, - $slug - ) use ($gpm) { - return !$gpm->isPluginInstalled($slug); - }); - } - - /** - * Get all themes. - * - * @return array - */ - public function themes($local = true) - { - $gpm = $this->gpm(); - - if (!$gpm) { - return; - } - - return $local ? $gpm->getInstalledThemes() : $gpm->getRepositoryThemes()->filter(function ($package, $slug) use - ( - $gpm - ) { - return !$gpm->isThemeInstalled($slug); - }); - } - - /** - * Get log file for fatal errors. - * - * @return string - */ - public function logs() - { - if (!isset($this->logs)) { - $file = LogFile::instance($this->grav['locator']->findResource('log://exception.log')); - - $content = $file->content(); - - $this->logs = array_reverse($content); - } - - return $this->logs; - } - - /** - * Used by the Dashboard in the admin to display the X latest pages - * that have been modified - * - * @param integer $count number of pages to pull back - * - * @return array - */ - public function latestPages($count = 10) - { - /** @var Pages $pages */ - $pages = $this->grav['pages']; - - $latest = array(); - - foreach ($pages->routes() as $url => $path) { - $page = $pages->dispatch($url, true); - if ($page && $page->routable()) { - $latest[$page->route()] = ['modified' => $page->modified(), 'page' => $page]; - } - } - - // sort based on modified - uasort($latest, function ($a, $b) { - if ($a['modified'] == $b['modified']) { - return 0; - } - - return ($a['modified'] > $b['modified']) ? -1 : 1; - }); - - // build new array with just pages in it - $list = array(); - foreach ($latest as $item) { - $list[] = $item['page']; - } - - return array_slice($list, 0, $count); - } - - /** - * Get log file for fatal errors. - * - * @return string - */ - public function logEntry() - { - $file = File::instance($this->grav['locator']->findResource("log://{$this->route}.html")); - $content = $file->content(); - - return $content; - } - - /** - * Search in the logs when was the latest backup made - * - * @return array Array containing the latest backup information - */ - public function lastBackup() - { - $file = JsonFile::instance($this->grav['locator']->findResource("log://backup.log")); - $content = $file->content(); - if (empty($content)) { - return [ - 'days' => '∞', - 'chart_fill' => 100, - 'chart_empty' => 0 - ]; - } - - $backup = new \DateTime(); - $backup->setTimestamp($content['time']); - $diff = $backup->diff(new \DateTime()); - - $days = $diff->days; - $chart_fill = $days > 30 ? 100 : round($days / 30 * 100); - - return [ - 'days' => $days, - 'chart_fill' => $chart_fill, - 'chart_empty' => 100 - $chart_fill - ]; - } - - /** - * Returns the page creating it if it does not exist. - * - * @param $path - * - * @return Page - */ - public function getPage($path) - { - /** @var Pages $pages */ - $pages = $this->grav['pages']; - - if ($path && $path[0] != '/') { - $path = "/{$path}"; - } - - $page = $path ? $pages->dispatch($path, true) : $pages->root(); - - if (!$page) { - $slug = basename($path); - - if ($slug == '') { - return null; - } - - $ppath = str_replace('\\', '/' , dirname($path)); - - // Find or create parent(s). - $parent = $this->getPage($ppath != '/' ? $ppath : ''); - - // Create page. - $page = new Page; - $page->parent($parent); - $page->filePath($parent->path() . '/' . $slug . '/' . $page->name()); - - // Add routing information. - $pages->addPage($page, $path); - - // Set if Modular - $page->modularTwig($slug[0] == '_'); - - // Determine page type. - if (isset($this->session->{$page->route()})) { - // Found the type and header from the session. - $data = $this->session->{$page->route()}; - - $header = ['title' => $data['title']]; - - if (isset($data['visible'])) { - if ($data['visible'] == '' || $data['visible']) { - // if auto (ie '') - $children = $page->parent()->children(); - foreach ($children as $child) { - if ($child->order()) { - // set page order - $page->order(1000); - break; - } - } - } - - } - - if ($data['name'] == 'modular') { - $header['body_classes'] = 'modular'; - } - - $name = $page->modular() ? str_replace('modular/', '', $data['name']) : $data['name']; - $page->name($name . '.md'); - $page->header($header); - $page->frontmatter(Yaml::dump((array)$page->header(), 10, 2, false)); - } else { - // Find out the type by looking at the parent. - $type = $parent->childType() ? $parent->childType() : $parent->blueprints()->get('child_type', - 'default'); - $page->name($type . CONTENT_EXT); - $page->header(); - } - $page->modularTwig($slug[0] == '_'); - } - - return $page; - } - - /** - * Return the languages available in the admin - * - * @return array - */ - public static function adminLanguages() - { - $languages = []; - $lang_data = Yaml::parse(file_get_contents(__DIR__ . '/../languages.yaml')); - foreach ($lang_data as $lang => $values) { - $languages[$lang] = LanguageCodes::getNativeName($lang); - } - return $languages; - } - - /** - * Return the languages available in the site - * - * @return array - */ - public static function siteLanguages() - { - $languages = []; - $lang_data = Grav::instance()['config']->get('system.languages.supported', []); - - foreach ($lang_data as $index => $lang) { - $languages[$lang] = LanguageCodes::getNativeName($lang); - } - return $languages; - } - - /** - * Static helper method to return current route. - * - * @return string - */ - public static function route() - { - $pages = Grav::instance()['pages']; - $route = '/' . ltrim(Grav::instance()['admin']->route, '/'); - - $page = $pages->dispatch($route); - $parent_route = null; - if ($page) { - $parent = $page->parent(); - $parent_route = $parent->rawRoute(); - } - - return $parent_route; - } - - /** - * Static helper method to return the last used page name - * - * @return string - */ - public static function getLastPageName() - { - return Grav::instance()['session']->lastPageName ?: 'default'; - } - - /** - * Static helper method to return the last used page route - * - * @return string - */ - public static function getLastPageRoute() - { - return Grav::instance()['session']->lastPageRoute ?: self::route(); - } - - /** - * Determine if the plugin or theme info passed is from Team Grav - * - * @param object $info Plugin or Theme info object - * - * @return bool - */ - public function isTeamGrav($info) - { - if (isset($info['author']['name']) && $info['author']['name'] == 'Team Grav') { - return true; - } else { - return false; - } - } - - /** - * Renders phpinfo - * - * @return string The phpinfo() output - */ - function phpinfo() { - - if (function_exists('phpinfo')) { - ob_start(); - phpinfo(); - $pinfo = ob_get_contents(); - ob_end_clean(); - - $pinfo = preg_replace('%^.*(.*).*$%ms', '$1', $pinfo); - return $pinfo; - } else { - return 'phpinfo() method is not available on this server.'; - } - } - - /** - * Translate a string to the user-defined language - * - * @param $string the string to translate - */ - public function translate($string) { - return $this->_translate($string, [$this->grav['user']->authenticated ? $this->grav['user']->language : 'en']); - } - - public function _translate($args, Array $languages = null, $array_support = false, $html_out = false) - { - if (is_array($args)) { - $lookup = array_shift($args); - } else { - $lookup = $args; - $args = []; - } - - if ($lookup) { - if (empty($languages) || reset($languages) == null) { - if ($this->grav['config']->get('system.languages.translations_fallback', true)) { - $languages = $this->grav['language']->getFallbackLanguages(); - } else { - $languages = (array)$this->grav['language']->getDefault(); - } - } - } else { - $languages = ['en']; - } - - - foreach ((array)$languages as $lang) { - $translation = $this->grav['language']->getTranslation($lang, $lookup, $array_support); - - if (!$translation) { - $language = $this->grav['language']->getDefault() ?: 'en'; - $translation = $this->grav['language']->getTranslation($language, $lookup, $array_support); - } - - if ($translation) { - if (count($args) >= 1) { - return vsprintf($translation, $args); - } else { - return $translation; - } - } - } - - return $lookup; - } - - function dateformat2Kendo($php_format) - { - $SYMBOLS_MATCHING = array( - // Day - 'd' => 'dd', - 'D' => 'ddd', - 'j' => 'd', - 'l' => 'dddd', - 'N' => '', - 'S' => '', - 'w' => '', - 'z' => '', - // Week - 'W' => '', - // Month - 'F' => 'MMMM', - 'm' => 'MM', - 'M' => 'MMM', - 'n' => 'M', - 't' => '', - // Year - 'L' => '', - 'o' => '', - 'Y' => 'yyyy', - 'y' => 'yy', - // Time - 'a' => 'tt', - 'A' => 'tt', - 'B' => '', - 'g' => 'h', - 'G' => 'H', - 'h' => 'hh', - 'H' => 'HH', - 'i' => 'mm', - 's' => 'ss', - 'u' => '' - ); - $js_format = ""; - $escaping = false; - for($i = 0; $i < strlen($php_format); $i++) - { - $char = $php_format[$i]; - if($char === '\\') // PHP date format escaping character - { - $i++; - if($escaping) $js_format .= $php_format[$i]; - else $js_format .= '\'' . $php_format[$i]; - $escaping = true; - } - else - { - if($escaping) { $js_format .= "'"; $escaping = false; } - if(isset($SYMBOLS_MATCHING[$char])) - $js_format .= $SYMBOLS_MATCHING[$char]; - else - $js_format .= $char; - } - } - return $js_format; - } -} diff --git a/src/user/plugins/admin/classes/controller.php b/src/user/plugins/admin/classes/controller.php deleted file mode 100644 index a11a1d0..0000000 --- a/src/user/plugins/admin/classes/controller.php +++ /dev/null @@ -1,1453 +0,0 @@ -grav = $grav; - $this->view = $view; - $this->task = $task ? $task : 'display'; - $this->post = $this->getPost($post); - $this->route = $route; - $this->admin = $this->grav['admin']; - } - - /** - * Performs a task. - * - * @return bool True if the action was performed successfully. - */ - public function execute() - { - $success = false; - $method = 'task' . ucfirst($this->task); - if (method_exists($this, $method)) { - try { - $success = call_user_func(array($this, $method)); - } catch (\RuntimeException $e) { - $success = true; - $this->admin->setMessage($e->getMessage(), 'error'); - } - - // Grab redirect parameter. - $redirect = isset($this->post['_redirect']) ? $this->post['_redirect'] : null; - unset($this->post['_redirect']); - - // Redirect if requested. - if ($redirect) { - $this->setRedirect($redirect); - } - } - return $success; - } - - /** - * Redirect to the route stored in $this->redirect - */ - public function redirect() - { - if (!$this->redirect) { - return; - } - - $base = $this->admin->base; - $this->redirect = '/' . ltrim($this->redirect, '/'); - $multilang = $this->isMultilang(); - - $redirect = ''; - if ($multilang) { - // if base path does not already contain the lang code, add it - $langPrefix = '/' . $this->grav['session']->admin_lang; - if (!Utils::startsWith($base, $langPrefix . '/')) { - $base = $langPrefix . $base; - } - - // now the first 4 chars of base contain the lang code. - // if redirect path already contains the lang code, and is != than the base lang code, then use redirect path as-is - if (Utils::pathPrefixedByLangCode($base) && - Utils::pathPrefixedByLangCode($this->redirect) && - substr($base, 0, 4) != substr($this->redirect, 0, 4)) { - $redirect = $this->redirect; - } else { - if (!Utils::startsWith($this->redirect, $base)) { - $this->redirect = $base . $this->redirect; - } - } - - } else { - if (!Utils::startsWith($this->redirect, $base)) { - $this->redirect = $base . $this->redirect; - } - } - - if (!$redirect) { - $redirect = $this->redirect; - } - - $this->grav->redirect($redirect, $this->redirectCode); - } - - /** - * Return true if multilang is active - * - * @return bool True if multilang is active - */ - protected function isMultilang() { - return count($this->grav['config']->get('system.languages.supported', [])) > 1; - } - - /** - * Handle login. - * - * @return bool True if the action was performed. - */ - protected function taskLogin() - { - if ($this->admin->authenticate($this->post)) { - // should never reach here, redirects first - } else { - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.LOGIN_FAILED'), 'error'); - } - - return true; - } - - /** - * Handle logout. - * - * @return bool True if the action was performed. - */ - protected function taskLogout() - { - $this->admin->session()->invalidate()->start(); - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.LOGGED_OUT'), 'info'); - $this->setRedirect('/logout'); - - return true; - } - - /** - * Handle logout. - * - * @return bool True if the action was performed. - */ - protected function taskKeepAlive() - { - exit(); - } - - /** - * Handle the email password recovery procedure. - * - * @return bool True if the action was performed. - */ - protected function taskForgot() - { - $param_sep = $this->grav['config']->get('system.param_sep', ':'); - $data = $this->post; - - $username = isset($data['username']) ? $data['username'] : ''; - $user = !empty($username) ? User::load($username) : null; - - if (!isset($this->grav['Email'])) { - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.FORGOT_EMAIL_NOT_CONFIGURED'), 'error'); - $this->setRedirect('/'); - return true; - } - - if (!$user || !$user->exists()) { - $this->admin->setMessage($this->admin->translate(['PLUGIN_ADMIN.FORGOT_USERNAME_DOES_NOT_EXIST', $username]), 'error'); - $this->setRedirect('/forgot'); - return true; - } - - if (empty($user->email)) { - $this->admin->setMessage($this->admin->translate(['PLUGIN_ADMIN.FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL', $username]), 'error'); - $this->setRedirect('/forgot'); - return true; - } - - $token = md5(uniqid(mt_rand(), true)); - $expire = time() + 604800; // next week - - $user->reset = $token . '::' . $expire; - $user->save(); - - $author = $this->grav['config']->get('site.author.name', ''); - $fullname = $user->fullname ?: $username; - $reset_link = rtrim($this->grav['uri']->rootUrl(true), '/') . '/' . trim($this->admin->base, '/') . '/reset/task' . $param_sep . 'reset/user'. $param_sep . $username . '/token' . $param_sep . $token; - - $sitename = $this->grav['config']->get('site.title', 'Website'); - $from = $this->grav['config']->get('plugins.email.from', 'noreply@getgrav.org'); - $to = $user->email; - - $subject = $this->admin->translate(['PLUGIN_ADMIN.FORGOT_EMAIL_SUBJECT', $sitename]); - $content = $this->admin->translate(['PLUGIN_ADMIN.FORGOT_EMAIL_BODY', $fullname, $reset_link, $author, $sitename]); - - $body = $this->grav['twig']->processTemplate('email/base.html.twig', ['content' => $content]); - - $message = $this->grav['Email']->message($subject, $body, 'text/html') - ->setFrom($from) - ->setTo($to); - - $sent = $this->grav['Email']->send($message); - - if ($sent < 1) { - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.FORGOT_FAILED_TO_EMAIL'), 'error'); - } else { - $this->admin->setMessage($this->admin->translate(['PLUGIN_ADMIN.FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL', $to]), 'info'); - } - - $this->setRedirect('/'); - return true; - } - - /** - * Handle the reset password action. - * - * @return bool True if the action was performed. - */ - public function taskReset() - { - $data = $this->post; - - if (isset($data['password'])) { - $username = isset($data['username']) ? $data['username'] : null; - $user = !empty($username) ? User::load($username) : null; - $password = isset($data['password']) ? $data['password'] : null; - $token = isset($data['token']) ? $data['token'] : null; - - if (!empty($user) && $user->exists() && !empty($user->reset)) { - list($good_token, $expire) = explode('::', $user->reset); - - if ($good_token === $token) { - if (time() > $expire) { - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.RESET_LINK_EXPIRED'), 'error'); - $this->setRedirect('/forgot'); - return true; - } - - unset($user->hashed_password); - unset($user->reset); - $user->password = $password; - - $user->validate(); - $user->filter(); - $user->save(); - - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.RESET_PASSWORD_RESET'), 'info'); - $this->setRedirect('/'); - return true; - } - } - - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.RESET_INVALID_LINK'), 'error'); - $this->setRedirect('/forgot'); - return true; - - } else { - $user = $this->grav['uri']->param('user'); - $token = $this->grav['uri']->param('token'); - - if (empty($user) || empty($token)) { - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.RESET_INVALID_LINK'), 'error'); - $this->setRedirect('/forgot'); - return true; - } - - $this->admin->forgot = [ 'username' => $user, 'token' => $token ]; - } - - return true; - } - - /** - * Clear the cache. - * - * @return bool True if the action was performed. - */ - protected function taskClearCache() - { - if (!$this->authorizeTask('clear cache', ['admin.cache', 'admin.super'])) { - return; - } - - // get optional cleartype param - $clear_type = $this->grav['uri']->param('cleartype'); - - if ($clear_type) { - $clear = $clear_type; - } else { - $clear = 'standard'; - } - - $results = Cache::clearCache($clear); - if (count($results) > 0) { - $this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate('PLUGIN_ADMIN.CACHE_CLEARED') . '
' . $this->admin->translate('PLUGIN_ADMIN.METHOD') . ': ' . $clear . '']; - } else { - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.ERROR_CLEARING_CACHE')]; - } - - return true; - } - - /** - * Handle the backup action - * - * @return bool True if the action was performed. - */ - protected function taskBackup() - { - $param_sep = $this->grav['config']->get('system.param_sep', ':'); - if (!$this->authorizeTask('backup', ['admin.maintenance', 'admin.super'])) { - return; - } - - $download = $this->grav['uri']->param('download'); - - if ($download) { - Utils::download(base64_decode(urldecode($download)), true); - } - - $log = JsonFile::instance($this->grav['locator']->findResource("log://backup.log", true, true)); - - try { - $backup = ZipBackup::backup(); - } catch (\Exception $e) { - $this->admin->json_response = [ - 'status' => 'error', - 'message' => $this->admin->translate('PLUGIN_ADMIN.AN_ERROR_OCCURRED') . '. '. $e->getMessage() - ]; - - return true; - } - - $download = urlencode(base64_encode($backup)); - $url = rtrim($this->grav['uri']->rootUrl(true), '/') . '/' . trim($this->admin->base, '/') . '/task' . $param_sep . 'backup/download' . $param_sep . $download; - - $log->content([ - 'time' => time(), - 'location' => $backup - ]); - $log->save(); - - $this->admin->json_response = [ - 'status' => 'success', - 'message' => $this->admin->translate('PLUGIN_ADMIN.YOUR_BACKUP_IS_READY_FOR_DOWNLOAD') . '. ' . $this->admin->translate('PLUGIN_ADMIN.DOWNLOAD_BACKUP') .'', - 'toastr' => [ - 'timeOut' => 0, - 'closeButton' => true - ] - ]; - - return true; - } - - /** - * Handles filtering the page by modular/visible/routable in the pages list. - */ - protected function taskFilterPages() - { - if (!$this->authorizeTask('filter pages', ['admin.pages', 'admin.super'])) { - return; - } - - $data = $this->post; - - $flags = !empty($data['flags']) ? array_map('strtolower', explode(',', $data['flags'])) : []; - $queries = !empty($data['query']) ? explode(',', $data['query']) : []; - - /** @var Collection $collection */ - $collection = $this->grav['pages']->all(); - - if (count($flags)) { - // Filter by state - $pageStates = array('modular', 'nonmodular', 'visible', 'nonvisible', 'routable', 'nonroutable', 'published', 'nonpublished'); - - if (count(array_intersect($pageStates, $flags)) > 0) { - if (in_array('modular', $flags)) - $collection = $collection->modular(); - - if (in_array('nonmodular', $flags)) - $collection = $collection->nonModular(); - - if (in_array('visible', $flags)) - $collection = $collection->visible(); - - if (in_array('nonvisible', $flags)) - $collection = $collection->nonVisible(); - - if (in_array('routable', $flags)) - $collection = $collection->routable(); - - if (in_array('nonroutable', $flags)) - $collection = $collection->nonRoutable(); - - if (in_array('published', $flags)) - $collection = $collection->published(); - - if (in_array('nonpublished', $flags)) - $collection = $collection->nonPublished(); - } - foreach ($pageStates as $pageState) { - if (($pageState = array_search($pageState, $flags)) !== false) { - unset($flags[$pageState]); - } - } - - // Filter by page type - if (count($flags)) { - $types = $flags; - $collection = $collection->ofOneOfTheseTypes($types); - } - } - - if (!empty($queries)) { - foreach ($collection as $page) { - foreach ($queries as $query) { - $query = trim($query); - - // $page->content(); - if (stripos($page->getRawContent(), $query) === false && stripos($page->title(), $query) === false) { - $collection->remove($page); - } - } - } - } - - $results = []; - foreach ($collection as $path => $page) { - $results[] = $page->route(); - } - - $this->admin->json_response = [ - 'status' => 'success', - 'message' => $this->admin->translate('PLUGIN_ADMIN.PAGES_FILTERED'), - 'results' => $results - ]; - $this->admin->collection = $collection; - } - - /** - * Determines the file types allowed to be uploaded - * - * @return bool True if the action was performed. - */ - protected function taskListmedia() - { - if (!$this->authorizeTask('list media', ['admin.pages', 'admin.super'])) { - return; - } - - $page = $this->admin->page(true); - - if (!$page) { - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.NO_PAGE_FOUND')]; - return false; - } - - $media_list = array(); - foreach ($page->media()->all() as $name => $media) { - $media_list[$name] = ['url' => $media->cropZoom(150, 100)->url(), 'size' => $media->get('size')]; - } - $this->admin->json_response = ['status' => 'ok', 'results' => $media_list]; - - return true; - } - - /** - * Handles adding a media file to a page - */ - protected function taskAddmedia() - { - if (!$this->authorizeTask('add media', ['admin.pages', 'admin.super'])) { - return; - } - - $page = $this->admin->page(true); - - /** @var Config $config */ - $config = $this->grav['config']; - - if (!isset($_FILES['file']['error']) || is_array($_FILES['file']['error'])) { - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.INVALID_PARAMETERS')]; - return; - } - - // Check $_FILES['file']['error'] value. - switch ($_FILES['file']['error']) { - case UPLOAD_ERR_OK: - break; - case UPLOAD_ERR_NO_FILE: - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.NO_FILES_SENT')]; - return; - case UPLOAD_ERR_INI_SIZE: - case UPLOAD_ERR_FORM_SIZE: - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.EXCEEDED_FILESIZE_LIMIT')]; - return; - default: - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.UNKNOWN_ERRORS')]; - return; - } - - $grav_limit = $config->get('system.media.upload_limit', 0); - // You should also check filesize here. - if ($grav_limit > 0 && $_FILES['file']['size'] > $grav_limit) { - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.EXCEEDED_GRAV_FILESIZE_LIMIT')]; - return; - } - - - // Check extension - $fileParts = pathinfo($_FILES['file']['name']); - $fileExt = strtolower($fileParts['extension']); - - // If not a supported type, return - if (!$config->get("media.{$fileExt}")) { - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.UNSUPPORTED_FILE_TYPE') . ': '.$fileExt]; - return; - } - - - // Upload it - if (!move_uploaded_file($_FILES['file']['tmp_name'], sprintf('%s/%s', $page->path(), $_FILES['file']['name']))) { - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.FAILED_TO_MOVE_UPLOADED_FILE')]; - return; - } - - $this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate('PLUGIN_ADMIN.FILE_UPLOADED_SUCCESSFULLY')]; - - return; - } - - /** - * Handles deleting a media file from a page - * - * @return bool True if the action was performed. - */ - protected function taskDelmedia() - { - if (!$this->authorizeTask('delete media', ['admin.pages', 'admin.super'])) { - return; - } - - $page = $this->admin->page(true); - - if (!$page) { - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.NO_PAGE_FOUND')]; - return false; - } - - $filename = !empty($this->post['filename']) ? $this->post['filename'] : null; - if ($filename) { - $targetPath = $page->path().'/'.$filename; - - if (file_exists($targetPath)) { - if (unlink($targetPath)) { - $this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate('PLUGIN_ADMIN.FILE_DELETED') . ': '.$filename]; - } else { - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.FILE_COULD_NOT_BE_DELETED') . ': '.$filename]; - } - } else { - //Try with responsive images @1x, @2x, @3x - $ext = pathinfo($targetPath, PATHINFO_EXTENSION); - $filename = $page->path() . '/'. basename($targetPath, ".$ext"); - $responsiveTargetPath = $filename . '@1x.' . $ext; - $deletedResponsiveImage = false; - if (file_exists($responsiveTargetPath) && unlink($responsiveTargetPath)) { - $deletedResponsiveImage = true; - } - - $responsiveTargetPath = $filename . '@2x.' . $ext; - if (file_exists($responsiveTargetPath) && unlink($responsiveTargetPath)) { - $deletedResponsiveImage = true; - } - $responsiveTargetPath = $filename . '@3x.' . $ext; - if (file_exists($responsiveTargetPath) && unlink($responsiveTargetPath)) { - $deletedResponsiveImage = true; - } - - if ($deletedResponsiveImage) { - $this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate('PLUGIN_ADMIN.FILE_DELETED') . ': '.$filename]; - } else { - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.FILE_NOT_FOUND') . ': '.$filename]; - } - - } - } else { - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.NO_FILE_FOUND')]; - } - - return true; - } - - /** - * Process the page Markdown - */ - protected function taskProcessMarkdown() - { -// if (!$this->authorizeTask('process markdown', ['admin.pages', 'admin.super'])) { -// return; -// } - - try { - $page = $this->admin->page(true); - - if (!$page) { - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.NO_PAGE_FOUND')]; - return false; - } - - $this->preparePage($page, true); - $page->header(); - - // Add theme template paths to Twig loader - $template_paths = $this->grav['locator']->findResources('theme://templates'); - $loader_chain = $this->grav['twig']->twig->getLoader()->addLoader(new \Twig_Loader_Filesystem($template_paths)); - - $html = $page->content(); - - $this->admin->json_response = ['status' => 'success', 'message' => $html]; - return true; - } catch (\Exception $e) { - $this->admin->json_response = ['status' => 'error', 'message' => $e->getMessage()]; - return false; - } - } - - /** - * Enable a plugin. - * - * @return bool True if the action was performed. - */ - public function taskEnable() - { - if (!$this->authorizeTask('enable plugin', ['admin.plugins', 'admin.super'])) { - return; - } - - if ($this->view != 'plugins') { - return false; - } - - // Filter value and save it. - $this->post = array('enabled' => 1, '_redirect' => 'plugins'); - $obj = $this->prepareData(); - $obj->save(); - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_ENABLED_PLUGIN'), 'info'); - - return true; - } - - /** - * Disable a plugin. - * - * @return bool True if the action was performed. - */ - public function taskDisable() - { - if (!$this->authorizeTask('disable plugin', ['admin.plugins', 'admin.super'])) { - return; - } - - if ($this->view != 'plugins') { - return false; - } - - // Filter value and save it. - $this->post = array('enabled' => 0, '_redirect' => 'plugins'); - $obj = $this->prepareData(); - $obj->save(); - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_DISABLED_PLUGIN'), 'info'); - - return true; - } - - /** - * Set the default theme. - * - * @return bool True if the action was performed. - */ - public function taskActivate() - { - if (!$this->authorizeTask('activate theme', ['admin.themes', 'admin.super'])) { - return; - } - - if ($this->view != 'themes') { - return false; - } - - $this->post = array('_redirect' => 'themes'); - - // Make sure theme exists (throws exception) - $name = $this->route; - $this->grav['themes']->get($name); - - // Store system configuration. - $system = $this->admin->data('system'); - $system->set('pages.theme', $name); - $system->save(); - - // Force configuration reload and save. - /** @var Config $config */ - $config = $this->grav['config']; - $config->reload()->save(); - - $config->set('system.pages.theme', $name); - - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_CHANGED_THEME'), 'info'); - - return true; - } - - /** - * Handles installing plugins and themes - * - * @return bool True is the action was performed - */ - public function taskInstall() - { - $type = $this->view === 'plugins' ? 'plugins' : 'themes'; - if (!$this->authorizeTask('install ' . $type, ['admin.' . $type, 'admin.super'])) { - return; - } - - require_once __DIR__ . '/gpm.php'; - - $package = $this->route; - - $result = \Grav\Plugin\Admin\Gpm::install($package, ['theme' => ($type == 'themes')]); - - if ($result) { - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.INSTALLATION_SUCCESSFUL'), 'info'); - } else { - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.INSTALLATION_FAILED'), 'error'); - } - - $this->post = array('_redirect' => $this->view . '/' . $this->route); - - return true; - } - - /** - * Handles updating Grav - * - * @return bool True is the action was performed - */ - public function taskUpdategrav() - { - require_once __DIR__ . '/gpm.php'; - - if (!$this->authorizeTask('install grav', ['admin.super'])) { - return; - } - - $result = \Grav\Plugin\Admin\Gpm::selfupgrade(); - - if ($result) { - $this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate('PLUGIN_ADMIN.GRAV_WAS_SUCCESSFULLY_UPDATED_TO') . ' ']; - } else { - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.GRAV_UPDATE_FAILED') . '
' . Installer::lastErrorMsg()]; - } - - return true; - } - - /** - * Handles updating plugins and themes - * - * @return bool True is the action was performed - */ - public function taskUpdate() - { - require_once __DIR__ . '/gpm.php'; - - $package = $this->route; - $permissions = []; - - $type = $this->view === 'plugins' ? 'plugins' : 'themes'; - - // Update multi mode - if (!$package) { - $package = []; - - if ($this->view === 'plugins' || $this->view === 'update') { - $package = $this->admin->gpm()->getUpdatablePlugins(); - $permissions['plugins'] = ['admin.super', 'admin.plugins']; - } - - if ($this->view === 'themes' || $this->view === 'update') { - $package = array_merge($package, $this->admin->gpm()->getUpdatableThemes()); - $permissions['themes'] = ['admin.super', 'admin.themes']; - } - } - - foreach ($permissions as $type => $p) { - if (!$this->authorizeTask('update ' . $type , $p)) { - return; - } - } - - $result = \Grav\Plugin\Admin\Gpm::update($package, ['theme' => ($type == 'themes')]); - - if ($this->view === 'update') { - - if ($result) { - $this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate('PLUGIN_ADMIN.EVERYTHING_UPDATED')]; - } else { - $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.UPDATES_FAILED')]; - } - - } else { - if ($result) { - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.INSTALLATION_SUCCESSFUL'), 'info'); - } else { - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.INSTALLATION_FAILED'), 'error'); - } - - $this->post = array('_redirect' => $this->view . '/' . $this->route); - } - - return true; - } - - /** - * Handles uninstalling plugins and themes - * - * @return bool True is the action was performed - */ - public function taskUninstall() - { - $type = $this->view === 'plugins' ? 'plugins' : 'themes'; - if (!$this->authorizeTask('uninstall ' . $type, ['admin.' . $type, 'admin.super'])) { - return; - } - - require_once __DIR__ . '/gpm.php'; - - $package = $this->route; - - $result = \Grav\Plugin\Admin\Gpm::uninstall($package, []); - - if ($result) { - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.UNINSTALL_SUCCESSFUL'), 'info'); - } else { - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.UNINSTALL_FAILED'), 'error'); - } - - $this->post = array('_redirect' => $this->view); - - return true; - } - - /** - * Handles form and saves the input data if its valid. - * - * @return bool True if the action was performed. - */ - public function taskSave() - { - if (!$this->authorizeTask('save', $this->dataPermissions())) { - return; - } - - $reorder = false; - $data = $this->post; - - // Special handler for pages data. - if ($this->view == 'pages') { - /** @var Page\Pages $pages */ - $pages = $this->grav['pages']; - - // Find new parent page in order to build the path. - $route = !isset($data['route']) ? dirname($this->admin->route) : $data['route']; - $parent = $route && $route != '/' ? $pages->dispatch($route, true) : $pages->root(); - - $obj = $this->admin->page(true); - - $original_slug = $obj->slug(); - $original_order = intval(trim($obj->order(), '.')); - - // Change parent if needed and initialize move (might be needed also on ordering/folder change). - $obj = $obj->move($parent); - $this->preparePage($obj, false, $obj->language()); - - // Reset slug and route. For now we do not support slug twig variable on save. - $obj->slug($original_slug); - - $obj->validate(); - $obj->filter(); - - // rename folder based on visible - if ($original_order == 1000) { - // increment order to force reshuffle - $obj->order($original_order + 1); - } - - // add or remove numeric prefix based on ordering value - if (isset($data['ordering'])) { - if ($data['ordering'] && !$obj->order()) { - $obj->order(1001); - } elseif (!$data['ordering'] && $obj->order()) { - $obj->folder($obj->slug()); - } - } - - - } else { - // Handle standard data types. - $obj = $this->prepareData(); - $obj->validate(); - $obj->filter(); - } - - if ($obj) { - $obj->save(true); - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_SAVED'), 'info'); - } - - if ($this->view != 'pages') { - // Force configuration reload. - /** @var Config $config */ - $config = $this->grav['config']; - $config->reload(); - - if ($this->view === 'users') { - $this->grav['user']->merge(User::load($this->admin->route)->toArray()); - } - } - - // Always redirect if a page route was changed, to refresh it - if ($obj instanceof Page\Page) { - if (method_exists($obj, 'unsetRouteSlug')) { - $obj->unsetRouteSlug(); - } - - $multilang = $this->isMultilang(); - - if ($multilang) { - if (!$obj->language()) { - $obj->language($this->grav['session']->admin_lang); - } - } - $admin_route = $this->grav['config']->get('plugins.admin.route'); - $redirect_url = '/' . ($multilang ? ($obj->language()) : '') . $admin_route . '/' . $this->view . $obj->route(); - - $this->setRedirect($redirect_url); - } - - return true; - } - - /** - * Continue to the new page. - * - * @return bool True if the action was performed. - */ - public function taskContinue() - { - if ($this->view == 'users') { - $this->setRedirect("{$this->view}/{$this->post['username']}"); - return true; - } - - if ($this->view != 'pages') { - return false; - } - - $data = $this->post; - $route = $data['route'] != '/' ? $data['route'] : ''; - $folder = ltrim($data['folder'], '_'); - if (!empty($data['modular'])) { - $folder = '_' . $folder; - } - $path = $route . '/' . $folder; - - $this->admin->session()->{$path} = $data; - - // Store the name and route of a page, to be used prefilled defaults of the form in the future - $this->admin->session()->lastPageName = $data['name']; - $this->admin->session()->lastPageRoute = $data['route']; - - $this->setRedirect("{$this->view}/". ltrim($path, '/')); - - return true; - } - - /** - * Save page as a new copy. - * - * @return bool True if the action was performed. - * @throws \RuntimeException - */ - protected function taskCopy() - { - if (!$this->authorizeTask('copy page', ['admin.pages', 'admin.super'])) { - return; - } - - // Only applies to pages. - if ($this->view != 'pages') { - return false; - } - - try { - /** @var Page\Pages $pages */ - $pages = $this->grav['pages']; - $data = $this->post; - - // And then get the current page. - $page = $this->admin->page(true); - - // Find new parent page in order to build the path. - $parent = $page->parent() ?: $pages->root(); - - // Make a copy of the current page and fill the updated information into it. - $page = $page->copy($parent); - $this->preparePage($page); - - // Make sure the header is loaded in case content was set through raw() (expert mode) - $page->header(); - - // Deal with folder naming conflicts, but limit number of searches to 99. - $break = 99; - while ($break > 0 && file_exists($page->filePath())) { - $break--; - $match = preg_split('/-(\d+)$/', $page->path(), 2, PREG_SPLIT_DELIM_CAPTURE); - $page->path($match[0] . '-' . (isset($match[1]) ? (int) $match[1] + 1 : 2)); - // Reset slug and route. For now we do not support slug twig variable on save. - $page->slug(''); - } - - $page->save(); - - // Enqueue message and redirect to new location. - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_COPIED'), 'info'); - $parent_route = $parent->route() ? '/' . ltrim($parent->route(), '/') : ''; - $this->setRedirect($this->view . $parent_route . '/'. $page->slug()); - - } catch (\Exception $e) { - throw new \RuntimeException('Copying page failed on error: ' . $e->getMessage()); - } - - return true; - } - - /** - * Reorder pages. - * - * @return bool True if the action was performed. - */ - protected function taskReorder() - { - if (!$this->authorizeTask('reorder pages', ['admin.pages', 'admin.super'])) { - return; - } - - // Only applies to pages. - if ($this->view != 'pages') { - return false; - } - - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.REORDERING_WAS_SUCCESSFUL'), 'info'); - return true; - } - - /** - * Delete page. - * - * @return bool True if the action was performed. - * @throws \RuntimeException - */ - protected function taskDelete() - { - if (!$this->authorizeTask('delete page', ['admin.pages', 'admin.super'])) { - return; - } - - // Only applies to pages. - if ($this->view != 'pages') { - return false; - } - - /** @var Uri $uri */ - $uri = $this->grav['uri']; - - try { - $page = $this->admin->page(); - - if (count($page->translatedLanguages()) > 1) { - $page->file()->delete(); - } else { - Folder::delete($page->path()); - } - - - $results = Cache::clearCache('standard'); - - // Set redirect to either referrer or pages list. - $redirect = 'pages'; - - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_DELETED'), 'info'); - $this->setRedirect($redirect); - - } catch (\Exception $e) { - throw new \RuntimeException('Deleting page failed on error: ' . $e->getMessage()); - } - - return true; - } - - /** - * Switch the content language. Optionally redirect to a different page. - * - * @return bool True if the action was performed. - */ - protected function taskSwitchlanguage() { - $data = $this->post; - - if (isset($data['lang'])) { - $language = $data['lang']; - } else { - $language = $this->grav['uri']->param('lang'); - } - - if (isset($data['redirect'])) { - $redirect = 'pages/' . $data['redirect']; - } else { - $redirect = 'pages'; - } - - - if ($language) { - $this->grav['session']->admin_lang = $language ?: 'en'; - } - - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_SWITCHED_LANGUAGE'), 'info'); - - $admin_route = $this->grav['config']->get('plugins.admin.route'); - $this->setRedirect('/' . $language . $admin_route . '/' . $redirect); - - } - - /** - * Save the current page in a different language. Automatically switches to that language. - * - * @return bool True if the action was performed. - */ - protected function taskSaveas() { - if (!$this->authorizeTask('save', $this->dataPermissions())) { - return; - } - - // $reorder = false; - $data = $this->post; - $language = $data['lang']; - - if ($language) { - $this->grav['session']->admin_lang = $language ?: 'en'; - } - - // /** @var Page\Pages $pages */ - $pages = $this->grav['pages']; - - $uri = $this->grav['uri']; - $obj = $this->admin->page($uri->route()); - $this->preparePage($obj, false, $language); - - $file = $obj->file(); - if ($file) { - $filename = substr($obj->name(), 0, -(strlen('.' . $language . '.md'))); - - if (substr($filename, -3, 1) == '.') { - if (substr($filename, -2) == substr($language, 0, 2)) { - $filename = str_replace(substr($filename, -2), $language, $filename); - } - } elseif (substr($filename, -6, 1) == '.') { - if (substr($filename, -5) == substr($language, 0, 5)) { - $filename = str_replace(substr($filename, -5), $language, $filename); - } - } else { - $filename .= '.' . $language; - } - - $path = $obj->path() . DS . $filename . '.md'; - $aFile = File::instance($path); - $aFile->save(); - - $aPage = new Page\Page(); - $aPage->init(new \SplFileInfo($path), $language .'.md'); - $aPage->header($obj->header()); - $aPage->rawMarkdown($obj->rawMarkdown()); - $aPage->validate(); - $aPage->filter(); - $aPage->save(); - } - - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_SWITCHED_LANGUAGE'), 'info'); - $this->setRedirect('/' . $language . $uri->route()); - - return true; - } - - /** - * Prepare and return POST data. - * - * @param array $post - * @return array - */ - protected function &getPost($post) - { - unset($post['task']); - - // Decode JSON encoded fields and merge them to data. - if (isset($post['_json'])) { - $post = array_merge_recursive($post, $this->jsonDecode($post['_json'])); - unset($post['_json']); - } - return $post; - } - - /** - * Recursively JSON decode data. - * - * @param array $data - * @return array - */ - protected function jsonDecode(array $data) - { - foreach ($data as &$value) { - if (is_array($value)) { - $value = $this->jsonDecode($value); - } else { - $value = json_decode($value, true); - } - } - return $data; - } - - /** - * Sets the page redirect. - * - * @param string $path The path to redirect to - * @param int $code The HTTP redirect code - */ - protected function setRedirect($path, $code = 303) - { - $this->redirect = $path; - $this->code = $code; - } - - /** - * Gets the configuration data for a given view & post - * - * @return object - */ - protected function prepareData() - { - $type = trim("{$this->view}/{$this->admin->route}", '/'); - $data = $this->admin->data($type, $this->post); - - return $data; - } - - /** - * Gets the permissions needed to access a given view - * - * @return array An array of permissions - */ - protected function dataPermissions() - { - $type = $this->view; - $permissions = ['admin.super']; - - switch ($type) { - case 'configuration': - case 'system': - $permissions[] = 'admin.configuration'; - break; - case 'settings': - case 'site': - $permissions[] = 'admin.settings'; - break; - case 'plugins': - $permissions[] = 'admin.plugins'; - break; - case 'themes': - $permissions[] = 'admin.themes'; - break; - case 'users': - $permissions[] = 'admin.users'; - break; - case 'pages': - $permissions[] = 'admin.pages'; - break; - } - - return $permissions; - } - - /** - * Prepare a page to be stored: update its folder, name, template, header and content - * - * @param \Grav\Common\Page\Page $page - * @param bool $clean_header - */ - protected function preparePage(\Grav\Common\Page\Page $page, $clean_header = false, $language = null) - { - $input = $this->post; - - if (isset($input['order'])) { - $order = max(0, (int) isset($input['order']) ? $input['order'] : $page->value('order')); - $ordering = $order ? sprintf('%02d.', $order) : ''; - $slug = empty($input['folder']) ? $page->value('folder') : (string) $input['folder']; - $page->folder($ordering . $slug); - } - - if (isset($input['name']) && !empty($input['name'])) { - $type = (string) strtolower($input['name']); - $name = preg_replace('|.*/|', '', $type); - if ($language) { - $name .= '.' . $language; - } else { - $language = $this->grav['language']; - if ($language->enabled()) { - $name .= '.' . $language->getLanguage(); - } - } - $name .= '.md'; - $page->name($name); - $page->template($type); - } - - // Special case for Expert mode: build the raw, unset content - if (isset($input['frontmatter']) && isset($input['content'])) { - $page->raw("---\n" . (string) $input['frontmatter'] . "\n---\n" . (string) $input['content']); - unset($input['content']); - } - - if (isset($input['header'])) { - $header = $input['header']; - - foreach($header as $key => $value) { - if ($key == 'metadata') { - foreach ($header['metadata'] as $key2 => $value2) { - if (isset($input['toggleable_header']['metadata'][$key2]) && !$input['toggleable_header']['metadata'][$key2]) { - $header['metadata'][$key2] = ''; - } - } - } elseif ($key == 'taxonomy') { - foreach ($header[$key] as $taxkey => $taxonomy) { - if (is_array($taxonomy) && count($taxonomy) == 1 && trim($taxonomy[0]) == '') { - unset($header[$key][$taxkey]); - } - } - } else { - if (isset($input['toggleable_header'][$key]) && !$input['toggleable_header'][$key]) { - $header[$key] = null; - } - } - } - if ($clean_header) { - $header = Utils::arrayFilterRecursive($header, function($k, $v) { - return !(is_null($v) || $v === ''); - }); - } - $page->header((object) $header); - $page->frontmatter(Yaml::dump((array) $page->header())); - } - // Fill content last because it also renders the output. - if (isset($input['content'])) { - $page->rawMarkdown((string) $input['content']); - } - } - - /** - * Checks if the user is allowed to perform the given task with its associated permissions - * - * @param string $task The task to execute - * @param array $permissions The permissions given - * @return bool True if authorized. False if not. - */ - protected function authorizeTask($task = '', $permissions = []) - { - if (!$this->admin->authorize($permissions)) { - if ($this->grav['uri']->extension() === 'json') - $this->admin->json_response = ['status' => 'unauthorized', 'message' => $this->admin->translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK') . ' ' . $task . '.']; - else - $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK') . ' ' . $task . '.', 'error'); - - return false; - } - - return true; - } -} diff --git a/src/user/plugins/admin/classes/gpm.php b/src/user/plugins/admin/classes/gpm.php deleted file mode 100644 index 1cac1d9..0000000 --- a/src/user/plugins/admin/classes/gpm.php +++ /dev/null @@ -1,199 +0,0 @@ - GRAV_ROOT, - 'overwrite' => true, - 'ignore_symlinks' => true, - 'skip_invalid' => true, - 'install_deps' => true, - 'theme' => false - ]; - - public static function install($packages, $options) - { - $options = array_merge(self::$options, $options); - - if ( - !Installer::isGravInstance($options['destination']) || - !Installer::isValidDestination($options['destination'], [Installer::EXISTS, Installer::IS_LINK]) - ) { - return false; - } - - $packages = is_array($packages) ? $packages : [ $packages ]; - $count = count($packages); - - $packages = array_filter(array_map(function ($p) { - return !is_string($p) ? $p instanceof Package ? $p : false : self::GPM()->findPackage($p); - }, $packages)); - - if (!$options['skip_invalid'] && $count !== count($packages)) { - return false; - } - - foreach ($packages as $package) { - if (isset($package->dependencies) && $options['install_deps']) { - $result = static::install($package->dependencies, $options); - - if (!$result) { - return false; - } - } - - // Check destination - Installer::isValidDestination($options['destination'] . DS . $package->install_path); - - if (Installer::lastErrorCode() === Installer::EXISTS && !$options['overwrite']) { - return false; - } - - if (Installer::lastErrorCode() === Installer::IS_LINK && !$options['ignore_symlinks']) { - return false; - } - - $local = static::download($package); - - Installer::install($local, $options['destination'], ['install_path' => $package->install_path, 'theme' => $options['theme']]); - Folder::delete(dirname($local)); - - $errorCode = Installer::lastErrorCode(); - - if (Installer::lastErrorCode() & (Installer::ZIP_OPEN_ERROR | Installer::ZIP_EXTRACT_ERROR)) { - return false; - } - } - - return true; - } - - public static function update($packages, $options) - { - $options['overwrite'] = true; - return static::install($packages, $options); - } - - public static function uninstall($packages, $options) - { - $options = array_merge(self::$options, $options); - - $packages = is_array($packages) ? $packages : [ $packages ]; - $count = count($packages); - - $packages = array_filter(array_map(function ($p) { - - if (is_string($p)) { - $p = strtolower($p); - $plugin = static::GPM()->getInstalledPlugin($p); - $p = $plugin ?: static::GPM()->getInstalledTheme($p); - } - - return $p instanceof Package ? $p : false; - - }, $packages)); - - if (!$options['skip_invalid'] && $count !== count($packages)) { - return false; - } - - foreach ($packages as $package) { - - $location = self::getGrav()['locator']->findResource($package->package_type . '://' . $package->slug); - - // Check destination - Installer::isValidDestination($location); - - if (Installer::lastErrorCode() === Installer::IS_LINK && !$options['ignore_symlinks']) { - return false; - } - - Installer::uninstall($location); - - $errorCode = Installer::lastErrorCode(); - if ($errorCode && $errorCode !== Installer::IS_LINK && $errorCode !== Installer::EXISTS) { - return false; - } - } - - return true; - } - - private static function download($package) - { - $contents = Response::get($package->zipball_url, []); - - $cache_dir = self::getGrav()['locator']->findResource('cache://', true); - $cache_dir = $cache_dir . DS . 'tmp/Grav-' . uniqid(); - Folder::mkdir($cache_dir); - - $filename = $package->slug . basename($package->zipball_url); - - file_put_contents($cache_dir . DS . $filename, $contents); - - return $cache_dir . DS . $filename; - } - - private static function _downloadSelfupgrade($package, $tmp) - { - $output = Response::get($package['download'], []); - Folder::mkdir($tmp); - file_put_contents($tmp . DS . $package['name'], $output); - return $tmp . DS . $package['name']; - } - - public static function selfupgrade() { - $upgrader = new Upgrader(); - - if (!Installer::isGravInstance(GRAV_ROOT)) { - return false; - } - - if (is_link(GRAV_ROOT . DS . 'index.php')) { - Installer::setError(Installer::IS_LINK); - return false; - } - - $update = $upgrader->getAssets()['grav-update']; - $tmp = CACHE_DIR . 'tmp/Grav-' . uniqid(); - $file = self::_downloadSelfupgrade($update, $tmp); - - Installer::install($file, GRAV_ROOT, - ['sophisticated' => true, 'overwrite' => true, 'ignore_symlinks' => true]); - - $errorCode = Installer::lastErrorCode(); - - Folder::delete($tmp); - - if ($errorCode & (Installer::ZIP_OPEN_ERROR | Installer::ZIP_EXTRACT_ERROR)) { - return false; - } - - return true; - } -} diff --git a/src/user/plugins/admin/classes/popularity.php b/src/user/plugins/admin/classes/popularity.php deleted file mode 100644 index aa16eda..0000000 --- a/src/user/plugins/admin/classes/popularity.php +++ /dev/null @@ -1,262 +0,0 @@ -config = self::getGrav()['config']; - - $this->data_path = self::$grav['locator']->findResource('log://popularity', true, true); - $this->daily_file = $this->data_path.'/'.self::DAILY_FILE; - $this->monthly_file = $this->data_path.'/'.self::MONTHLY_FILE; - $this->totals_file = $this->data_path.'/'.self::TOTALS_FILE; - $this->visitors_file = $this->data_path.'/'.self::VISITORS_FILE; - - } - - public function trackHit() - { - // Don't track bot or crawler requests - if (!self::getGrav()['browser']->isHuman()) { - return; - } - - /** @var Page $page */ - $page = self::getGrav()['page']; - $relative_url = str_replace(self::getGrav()['base_url_relative'], '', $page->url()); - - // Don't track error pages or pages that have no route - if ($page->template() == 'error' || !$page->route()) { - return; - } - - // Make sure no 'widcard-style' ignore matches this url - foreach ((array) $this->config->get('plugins.admin.popularity.ignore') as $ignore) { - if (fnmatch($ignore, $relative_url)) { - return; - } - } - - // initial creation if it doesn't exist - if (!file_exists($this->data_path)) { - mkdir($this->data_path); - $this->flushPopularity(); - } - - // Update the data we want to track - $this->updateDaily(); - $this->updateMonthly(); - $this->updateTotals($page->route()); - $this->updateVisitors(self::getGrav()['uri']->ip()); - - } - - protected function updateDaily() - { - - if (!$this->daily_data) { - $this->daily_data = $this->getData($this->daily_file); - } - - $day_month_year = date(self::DAILY_FORMAT); - - // get the daily access count - if (array_key_exists($day_month_year, $this->daily_data)) { - $this->daily_data[$day_month_year] = intval($this->daily_data[$day_month_year]) + 1; - } else { - $this->daily_data[$day_month_year] = 1; - } - - // keep correct number as set by history - $count = intval($this->config->get('plugins.admin.popularity.history.daily', 30)); - $total = count($this->daily_data); - - if ($total > $count) { - $this->daily_data = array_slice($this->daily_data, -$count, $count, true); - } - - file_put_contents($this->daily_file, json_encode($this->daily_data)); - } - - public function getDailyChartData() - { - if (!$this->daily_data) { - $this->daily_data = $this->getData($this->daily_file); - } - - $limit = intval($this->config->get('plugins.admin.popularity.dashboard.days_of_stats', 7)); - $chart_data = array_slice($this->daily_data, -$limit, $limit); - - $labels = array(); - $data = array(); - - foreach ($chart_data as $date => $count) { - $labels[] = self::getGrav()['grav']['admin']->translate(['PLUGIN_ADMIN.' . strtoupper(date('D', strtotime($date)))]); - $data[] = $count; - } - - return array('labels' => json_encode($labels), 'data' => json_encode($data)); - } - - public function getDailyTotal() - { - if (!$this->daily_data) { - $this->daily_data = $this->getData($this->daily_file); - } - - if (isset($this->daily_data[date(self::DAILY_FORMAT)])) { - return $this->daily_data[date(self::DAILY_FORMAT)]; - } else { - return 0; - } - } - - public function getWeeklyTotal() - { - if (!$this->daily_data) { - $this->daily_data = $this->getData($this->daily_file); - } - - $day = 0; - $total = 0; - foreach (array_reverse($this->daily_data) as $daily) { - $total += $daily; - $day++; - if ($day == 7) break; - } - - return $total; - } - - public function getMonthlyTotal() - { - if (!$this->monthly_data) { - $this->monthly_data = $this->getData($this->monthly_file); - } - if (isset($this->monthly_data[date(self::MONTHLY_FORMAT)])) { - return $this->monthly_data[date(self::MONTHLY_FORMAT)]; - } else { - return 0; - } - } - - protected function updateMonthly() - { - - if (!$this->monthly_data) { - $this->monthly_data = $this->getData($this->monthly_file); - } - - $month_year = date(self::MONTHLY_FORMAT); - - // get the monthly access count - if (array_key_exists($month_year, $this->monthly_data)) { - $this->monthly_data[$month_year] = intval($this->monthly_data[$month_year]) + 1; - } else { - $this->monthly_data[$month_year] = 1; - } - - // keep correct number as set by history - $count = intval($this->config->get('plugins.admin.popularity.history.monthly', 12)); - $total = count($this->monthly_data); - $this->monthly_data = array_slice($this->monthly_data, $total - $count, $count); - - - file_put_contents($this->monthly_file, json_encode($this->monthly_data)); - } - - protected function getMonthyChartData() - { - if (!$this->monthly_data) { - $this->monthly_data = $this->getData($this->monthly_file); - } - - $labels = array(); - $data = array(); - - foreach ($this->monthly_data as $date => $count) { - $labels[] = date('M', strtotime($date)); - $data[] = $count; - } - return array('labels' => $labels, 'data' => $data); - } - - protected function updateTotals($url) - { - if (!$this->totals_data) { - $this->totals_data = $this->getData($this->totals_file); - } - - // get the totals for this url - if (array_key_exists($url, $this->totals_data)) { - $this->totals_data[$url] = intval($this->totals_data[$url]) + 1; - } else { - $this->totals_data[$url] = 1; - } - - file_put_contents($this->totals_file, json_encode($this->totals_data)); - } - - protected function updateVisitors($ip) - { - if (!$this->visitors_data) { - $this->visitors_data = $this->getData($this->visitors_file); - } - - // update with current timestamp - $this->visitors_data[$ip] = time(); - $visitors = $this->visitors_data; - arsort($visitors); - - $count = intval($this->config->get('plugins.admin.popularity.history.visitors', 20)); - $this->visitors_data = array_slice($visitors, 0, $count, true); - - file_put_contents($this->visitors_file, json_encode($this->visitors_data)); - } - - protected function getData($path) - { - return (array) @json_decode(file_get_contents($path), true); - } - - - public function flushPopularity() - { - file_put_contents($this->daily_file, array()); - file_put_contents($this->monthly_file, array()); - file_put_contents($this->totals_file, array()); - file_put_contents($this->visitors_file, array()); - } -} diff --git a/src/user/plugins/admin/languages.yaml b/src/user/plugins/admin/languages.yaml deleted file mode 100644 index 2f63c73..0000000 --- a/src/user/plugins/admin/languages.yaml +++ /dev/null @@ -1,2583 +0,0 @@ -en: - PLUGIN_ADMIN: - ADMIN_BETA_MSG: "This is a Beta release! Use this in production at your own risk..." - ADMIN_REPORT_ISSUE: "Found an issue? Please report it on GitHub." - EMAIL_FOOTER: "Powered by Grav - The Modern Flat File CMS" - LOGIN_BTN: "Login" - LOGIN_BTN_FORGOT: "Forgot" - LOGIN_BTN_RESET: "Reset Password" - LOGIN_BTN_SEND_INSTRUCTIONS: "Send Reset Instructions" - LOGIN_LOGGED_IN: "You have been successfully logged in" - LOGIN_FAILED: "Login failed" - LOGGED_OUT: "You have been logged out" - RESET_LINK_EXPIRED: "Reset link has expired, please try again" - RESET_PASSWORD_RESET: "Password has been reset" - RESET_INVALID_LINK: "Invalid reset link used, please try again" - FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Instructions to reset your password have been sent via email to %s" - FORGOT_FAILED_TO_EMAIL: "Failed to email instructions, please try again later" - FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Cannot reset password for %s, no email address is set" - FORGOT_USERNAME_DOES_NOT_EXIST: "User with username %s does not exist" - FORGOT_EMAIL_NOT_CONFIGURED: "Cannot reset password. This site is not configured to send emails" - FORGOT_EMAIL_SUBJECT: "%s Password Reset Request" - FORGOT_EMAIL_BODY: "

Password Reset

Dear %1$s,

A request was made on %4$s to reset your password.


Click this to reset your password

Alternatively, copy the following URL into your browser's address bar:

%2$s


Kind regards,

%3$s

" - MANAGE_PAGES: "Manage Pages" - CONFIGURATION: "Configuration" - PAGES: "Pages" - PLUGINS: "Plugins" - PLUGIN: "Plugin" - THEMES: "Themes" - LOGOUT: "Logout" - BACK: "Back" - ADD_PAGE: "Add Page" - ADD_MODULAR: "Add Modular" - MOVE: "Move" - DELETE: "Delete" - SAVE: "Save" - NORMAL: "Normal" - EXPERT: "Expert" - EXPAND_ALL: "Expand All" - COLLAPSE_ALL: "Collapse All" - ERROR: "Error" - CLOSE: "Close" - CANCEL: "Cancel" - CONTINUE: "Continue" - MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "Confirmation Required" - MODAL_CHANGED_DETECTED_TITLE: "Changes Detected" - MODAL_CHANGED_DETECTED_DESC: "You have unsaved changes. Are you sure you want to leave without saving?" - MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Confirmation Required" - MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Are you sure you want to delete this file? This action cannot be undone." - ADD_FILTERS: "Add Filters" - SEARCH_PAGES: "Search Pages" - VERSION: "Version" - WAS_MADE_WITH: "Was made with" - BY: "By" - UPDATE_THEME: "Update Theme" - UPDATE_PLUGIN: "Update Plugin" - OF_THIS_THEME_IS_NOW_AVAILABLE: "of this theme is now available" - OF_THIS_PLUGIN_IS_NOW_AVAILABLE: "of this plugin is now available" - AUTHOR: "Author" - HOMEPAGE: "Homepage" - DEMO: "Demo" - BUG_TRACKER: "Bug Tracker" - KEYWORDS: "Keywords" - LICENSE: "License" - DESCRIPTION: "Description" - README: "Readme" - REMOVE_THEME: "Remove Theme" - INSTALL_THEME: "Install Theme" - THEME: "Theme" - BACK_TO_THEMES: "Back to Themes" - BACK_TO_PLUGINS: "Back to Plugins" - CHECK_FOR_UPDATES: "Check for Updates" - ADD: "Add" - CLEAR_CACHE: "Clear Cache" - CLEAR_CACHE_ALL_CACHE: "All Cache" - CLEAR_CACHE_ASSETS_ONLY: "Assets Only" - CLEAR_CACHE_IMAGES_ONLY: "Images Only" - CLEAR_CACHE_CACHE_ONLY: "Cache Only" - DASHBOARD: "Dashboard" - UPDATES_AVAILABLE: "Updates Available" - DAYS: "Days" - UPDATE: "Update" - BACKUP: "Backup" - STATISTICS: "Statistics" - TODAY: "Today" - WEEK: "Week" - MONTH: "Month" - LATEST_PAGE_UPDATES: "Latest Page Updates" - MAINTENANCE: "Maintenance" - UPDATED: "Updated" - MON: "Mon" - TUE: "Tue" - WED: "Wed" - THU: "Thu" - FRI: "Fri" - SAT: "Sat" - SUN: "Sun" - COPY: "Copy" - EDIT: "Edit" - CREATE: "Create" - GRAV_ADMIN: "Grav Admin" - GRAV_OFFICIAL_PLUGIN: "Grav Official Plugin" - GRAV_OFFICIAL_THEME: "Grav Official Theme" - PLUGIN_SYMBOLICALLY_LINKED: "This plugin is symbolically linked. Updates won't be detected." - THEME_SYMBOLICALLY_LINKED: "This theme is symbolically linked. Updates won't be detected" - REMOVE_PLUGIN: "Remove Plugin" - INSTALL_PLUGIN: "Install Plugin" - AVAILABLE: "Available" - INSTALLED: "Installed" - INSTALL: "Install" - ACTIVE_THEME: "Active Theme" - SWITCHING_TO: "Switching to" - SWITCHING_TO_DESCRIPTION: "By switching to a different theme, there is no guarantee that all the layout pages are supported, potentially causing errors when trying to load said pages." - SWITCHING_TO_CONFIRMATION: "Do you want to continue and switch to the theme" - CREATE_NEW_USER: "Create New User" - REMOVE_USER: "Remove User" - ACCESS_DENIED: "Access denied" - ACCOUNT_NOT_ADMIN: "your account does not have administrator permissions" - PHP_INFO: "PHP Info" - INSTALLER: "Installer" - AVAILABLE_THEMES: "Available Themes" - AVAILABLE_PLUGINS: "Available Plugins" - INSTALLED_THEMES: "Installed Themes" - INSTALLED_PLUGINS: "Installed Plugins" - BROWSE_ERROR_LOGS: "Browse Error Logs" - SITE: "Site" - INFO: "Info" - SYSTEM: "System" - USER: "User" - ADD_ACCOUNT: "Add Account" - SWITCH_LANGUAGE: "Switch Language" - SUCCESSFULLY_ENABLED_PLUGIN: "Successfully enabled plugin" - SUCCESSFULLY_DISABLED_PLUGIN: "Successfully disabled plugin" - SUCCESSFULLY_CHANGED_THEME: "Successfully changed default theme" - INSTALLATION_FAILED: "Installation failed" - INSTALLATION_SUCCESSFUL: "Installation successful" - UNINSTALL_FAILED: "Uninstall failed" - UNINSTALL_SUCCESSFUL: "Uninstall successful" - SUCCESSFULLY_SAVED: "Successfully saved" - SUCCESSFULLY_COPIED: "Successfully copied" - REORDERING_WAS_SUCCESSFUL: "Reordering was successful" - SUCCESSFULLY_DELETED: "Successfully deleted" - SUCCESSFULLY_SWITCHED_LANGUAGE: "Successfully switched language" - INSUFFICIENT_PERMISSIONS_FOR_TASK: "You have insufficient permissions for task" - CACHE_CLEARED: "Cache cleared" - METHOD: "Method" - ERROR_CLEARING_CACHE: "Error clearing cache" - AN_ERROR_OCCURRED: "An error occurred" - YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: "Your backup is ready for download" - DOWNLOAD_BACKUP: "Download backup" - PAGES_FILTERED: "Pages filtered" - NO_PAGE_FOUND: "No Page found" - INVALID_PARAMETERS: "Invalid Parameters" - NO_FILES_SENT: "No files sent" - EXCEEDED_FILESIZE_LIMIT: "Exceeded filesize limit" - UNKNOWN_ERRORS: "Unkown errors" - EXCEEDED_GRAV_FILESIZSE_LIMIT: "Exceeded Grav filesize limit." - UNSUPPORTED_FILE_TYPE: "Unsupported file type" - FAILED_TO_MOVE_UPLOADED_FILE: "Failed to move uploaded file." - FILE_UPLOADED_SUCCESSFULLY: "File uploaded successfully" - FILE_DELETED: "File deleted" - FILE_COULD_NOT_BE_DELETED: "File could not be deleted" - FILE_NOT_FOUND: "File not found" - NO_FILE_FOUND: "No file found" - GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "Grav was successfully updated to" - GRAV_UPDATE_FAILED: "Grav update failed" - EVERYTHING_UPDATED: "Everything updated" - UPDATES_FAILED: "Updates failed" - AVATAR_BY: "Avatar by" - LAST_BACKUP: "Last Backup" - FULL_NAME: "Full name" - USERNAME: "Username" - EMAIL: "Email" - PASSWORD: "Password" - TITLE: "Title" - LANGUAGE: "Language" - ACCOUNT: "Account" - EMAIL_VALIDATION_MESSAGE: "Must be a valid email address" - PASSWORD_VALIDATION_MESSAGE: "Password must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters" - LANGUAGE_HELP: "Set the favorite language" - MEDIA: "Media" - DEFAULTS: "Defaults" - SITE_TITLE: "Site Title" - SITE_TITLE_PLACEHOLDER: "Site wide title" - SITE_TITLE_HELP: "Default title for your site, often used in themes" - DEFAULT_AUTHOR: "Default Author" - DEFAULT_AUTHOR_HELP: "A default author name, often used in themes or page content" - DEFAULT_EMAIL: "Default Email" - DEFAULT_EMAIL_HELP: "A default email to reference in themes or pages" - TAXONOMY_TYPES: "Taxonomy Types" - TAXONOMY_TYPES_HELP: "Taxonomy types must be defined here if you wish to use them in pages" - PAGE_SUMMARY: "Page Summary" - ENABLED: "Enabled" - ENABLED_HELP: "Enable page summary (the summary returns the same as the page content)" - 'YES': "Yes" - 'NO': "No" - SUMMARY_SIZE: "Summary Size" - SUMMARY_SIZE_HELP: "The amount of characters of a page to use as a content summary" - FORMAT: "Format" - FORMAT_HELP: "short = use the first occurrence of delimiter or size; long = summary delimiter will be ignored" - SHORT: "Short" - LONG: "Long" - DELIMITER: "Delimiter" - DELIMITER_HELP: "The summary delimiter (default '===')" - METADATA: "Metadata" - METADATA_HELP: "Default metadata values that will be displayed on every page unless overridden by the page" - NAME: "Name" - CONTENT: "Content" - REDIRECTS_AND_ROUTES: "Redirects & Routes" - CUSTOM_REDIRECTS: "Custom Redirects" - CUSTOM_REDIRECTS_HELP: "routes to redirect to other pages. Standard Regex replacement is valid" - CUSTOM_REDIRECTS_PLACEHOLDER_KEY: "/your/alias" - CUSTOM_REDIRECTS_PLACEHOLDER_VALUE: "/your/redirect" - CUSTOM_ROUTES: "Custom Routes" - CUSTOM_ROUTES_HELP: "routes to alias to other pages. Standard Regex replacement is valid" - CUSTOM_ROUTES_PLACEHOLDER_KEY: "/your/alias" - CUSTOM_ROUTES_PLACEHOLDER_VALUE: "/your/route" - FILE_STREAMS: "File Streams" - DEFAULT: "Default" - PAGE_MEDIA: "Page Media" - OPTIONS: "Options" - PUBLISHED: "Published" - PUBLISHED_HELP: "By default, a page is published unless you explicitly set published: false or via a publish_date being in the future, or unpublish_date in the past" - DATE: "Date" - DATE_HELP: "The date variable allows you to specifically set a date associated with this page." - PUBLISHED_DATE: "Published Date" - PUBLISHED_DATE_HELP: "Can provide a date to automatically trigger publication." - UNPUBLISHED_DATE: "Unpublished Date" - UNPUBLISHED_DATE_HELP: "can provide a date to automatically trigger un-publication." - ROBOTS: "Robots" - TAXONOMIES: "Taxonomies" - TAXONOMY: "Taxonomy" - ADVANCED: "Advanced" - SETTINGS: "Settings" - FOLDER_NUMERIC_PREFIX: "Folder Numeric Prefix" - FOLDER_NUMERIC_PREFIX_HELP: "Numeric prefix that provides manual ordering and implies visibility" - FOLDER_NAME: "Folder Name" - FOLDER_NAME_HELP: "The folder name that will be stored in the filesystem for this page" - PARENT: "Parent" - DEFAULT_OPTION_ROOT: "- Root -" - DEFAULT_OPTION_SELECT: "- Select -" - DISPLAY_TEMPLATE: "Display Template" - DISPLAY_TEMPLATE_HELP: "The page type that translates into which twig template renders the page" - BODY_CLASSES: "Body Classes" - ORDERING: "Ordering" - PAGE_ORDER: "Page Order" - OVERRIDES: "Overrides" - MENU: "Menu" - MENU_HELP: "The string to be used in a menu. If not set, Title will be used." - SLUG: "Slug" - SLUG_HELP: "The slug variable allows you to specifically set the page's portion of the URL" - SLUG_VALIDATE_MESSAGE: "A slug must contain only lowercase alphanumeric characters and dashes" - PROCESS: "Process" - PROCESS_HELP: "Control how pages are processed. Can be set per-page rather than globally" - DEFAULT_CHILD_TYPE: "Default Child Type" - USE_GLOBAL: "Use Global" - ROUTABLE: "Routable" - ROUTABLE_HELP: "If this page is reachable by a URL" - CACHING: "Caching" - VISIBLE: "Visible" - VISIBLE_HELP: "Determines if a page is visible in the navigation." - DISABLED: "Disabled" - ITEMS: "Items" - ORDER_BY: "Order By" - ORDER: "Order" - FOLDER: "Folder" - ASCENDING: "Ascending" - DESCENDING: "Descending" - ADD_MODULAR_CONTENT: "Add Modular Content" - PAGE_TITLE: "Page Title" - PAGE_TITLE_HELP: "The title of the page" - PAGE: "Page" - MODULAR_TEMPLATE: "Modular Template" - FRONTMATTER: "Frontmatter" - FILENAME: "Filename" - PARENT_PAGE: "Parent Page" - HOME_PAGE: "Home page" - HOME_PAGE_HELP: "The page that Grav will use as the default landing page" - DEFAULT_THEME: "Default theme" - DEFAULT_THEME_HELP: "Set the default theme for Grav to use (default is Antimatter)" - TIMEZONE: "Timezone" - TIMEZONE_HELP: "Override the default timezone the server" - SHORT_DATE_FORMAT: "Short display date format" - SHORT_DATE_FORMAT_HELP: "Set the short date format that can be used by themes" - LONG_DATE_FORMAT: "Long display date format" - LONG_DATE_FORMAT_HELP: "Set the long date format that can be used by themes" - DEFAULT_ORDERING: "Default ordering" - DEFAULT_ORDERING_HELP: "Pages in a list will render using this order unless it is overridden" - DEFAULT_ORDERING_DEFAULT: "Default - based on folder name" - DEFAULT_ORDERING_FOLDER: "Folder - based on prefix-less folder name" - DEFAULT_ORDERING_TITLE: "Title - based on title field in header" - DEFAULT_ORDERING_DATE: "Date - based on date field in header" - DEFAULT_ORDER_DIRECTION: "Default order direction" - DEFAULT_ORDER_DIRECTION_HELP: "The direction of pages in a list" - DEFAULT_PAGE_COUNT: "Default page count" - DEFAULT_PAGE_COUNT_HELP: "Default maximum pages count in a list" - DATE_BASED_PUBLISHING: "Date-based publishing" - DATE_BASED_PUBLISHING_HELP: "Automatically (un)publish posts based on their date" - EVENTS: "Events" - EVENTS_HELP: "Enable or Disable specific events. Disabling these can break plugins" - REDIRECT_DEFAULT_ROUTE: "Redirect default route" - REDIRECT_DEFAULT_ROUTE_HELP: "Automatically redirect to a page's default route" - LANGUAGES: "Languages" - SUPPORTED: "Supported" - SUPPORTED_HELP: "Comma separated list of 2 letter language codes (for example 'en,fr,de')" - TRANSLATIONS_ENABLED: "Translations enabled" - TRANSLATIONS_ENABLED_HELP: "Support translations in Grav, plugins and extensions" - TRANSLATIONS_FALLBACK: "Translations fallback" - TRANSLATIONS_FALLBACK_HELP: "Fallback through supported translations if active language doesn't exist" - ACTIVE_LANGUAGE_IN_SESSION: "Active language in session" - ACTIVE_LANGUAGE_IN_SESSION_HELP: "Store the active language in the session" - HTTP_HEADERS: "HTTP Headers" - EXPIRES: "Expires" - EXPIRES_HELP: "Sets the expires header. The value is in seconds." - LAST_MODIFIED: "Last modified" - LAST_MODIFIED_HELP: "Sets the last modified header that can help optimize proxy and browser caching" - ETAG: "ETag" - ETAG_HELP: "Sets the etag header to help identify when a page has been modified" - VARY_ACCEPT_ENCODING: "Vary accept encoding" - VARY_ACCEPT_ENCODING_HELP: "Sets the `Vary: Accept Encoding` header to help with proxy and CDN caching" - MARKDOWN_EXTRA_HELP: "Enable default support for Markdown Extra - https://michelf.ca/projects/php-markdown/extra/" - AUTO_LINE_BREAKS: "Auto line breaks" - AUTO_LINE_BREAKS_HELP: "Enable support for automatic line breaks in markdown" - AUTO_URL_LINKS: "Auto URL links" - AUTO_URL_LINKS_HELP: "Enable automatic conversion of URLs into HTML hyperlinks" - ESCAPE_MARKUP: "Escape markup" - ESCAPE_MARKUP_HELP: "Escape markup tags into HTML entities" - CACHING_HELP: "Global ON/OFF switch to enable/disable Grav caching" - CACHE_CHECK_METHOD: "Cache check method" - CACHE_CHECK_METHOD_HELP: "Select the method that Grav uses to check if page files have been modified." - CACHE_DRIVER: "Cache driver" - CACHE_DRIVER_HELP: "Choose which cache driver Grav should use. 'Auto Detect' attempts to find the best for you" - CACHE_PREFIX: "Cache prefix" - CACHE_PREFIX_HELP: "An identifier for part of the Grav key. Don't change unless you know what your doing." - CACHE_PREFIX_PLACEHOLDER: "Derived from base URL (override by entering random string)" - LIFETIME: "Lifetime" - LIFETIME_HELP: "Sets the cache lifetime in seconds. 0 = infinite" - GZIP_COMPRESSION: "Gzip compression" - GZIP_COMPRESSION_HELP: "Enable GZip compression of the Grav page for increased performance." - TWIG_TEMPLATING: "Twig Templating" - TWIG_CACHING: "Twig caching" - TWIG_CACHING_HELP: "Control the Twig caching mechanism. Leave this enabled for best performance." - TWIG_DEBUG: "Twig debug" - TWIG_DEBUG_HELP: "Allows the option of not loading the Twig Debugger extension" - DETECT_CHANGES: "Detect changes" - DETECT_CHANGES_HELP: "Twig will automatically recompile the Twig cache if it detects any changes in Twig templates" - AUTOESCAPE_VARIABLES: "Autoescape variables" - AUTOESCAPE_VARIABLES_HELP: "Autoescapes all variables. This will break your site most likely" - ASSETS: "Assets" - CSS_PIPELINE: "CSS pipeline" - CSS_PIPELINE_HELP: "The CSS pipeline is the unification of multiple CSS resources into one file" - CSS_MINIFY: "CSS minify" - CSS_MINIFY_HELP: "Minify the CSS during pipelining" - CSS_MINIFY_WINDOWS_OVERRIDE: "CSS minify Windows override" - CSS_MINIFY_WINDOWS_OVERRIDE_HELP: "Minify Override for Windows platforms. False by default due to ThreadStackSize" - CSS_REWRITE: "CSS rewrite" - CSS_REWRITE_HELP: "Rewrite any CSS relative URLs during pipelining" - JAVASCRIPT_PIPELINE: "JavaScript pipeline" - JAVASCRIPT_PIPELINE_HELP: "The JS pipeline is the unification of multiple JS resources into one file" - JAVASCRIPT_MINIFY: "JavaScript minify" - JAVASCRIPT_MINIFY_HELP: "Minify the JS during pipelining" - ENABLED_TIMESTAMPS_ON_ASSETS: "Enable timestamps on assets" - ENABLED_TIMESTAMPS_ON_ASSETS_HELP: "Enable asset timestamps" - COLLECTIONS: "Collections" - ERROR_HANDLER: "Error handler" - DISPLAY_ERRORS: "Display errors" - DISPLAY_ERRORS_HELP: "Display full backtrace-style error page" - LOG_ERRORS: "Log errors" - LOG_ERRORS_HELP: "Log errors to /logs folder" - DEBUGGER: "Debugger" - DEBUGGER_HELP: "Enable Grav debugger and following settings" - DEBUG_TWIG: "Debug Twig" - DEBUG_TWIG_HELP: "Enable debugging of Twig templates" - SHUTDOWN_CLOSE_CONNECTION: "Shutdown close connection" - SHUTDOWN_CLOSE_CONNECTION_HELP: "Close the connection before calling onShutdown(). false for debugging" - DEFAULT_IMAGE_QUALITY: "Default image quality" - DEFAULT_IMAGE_QUALITY_HELP: "Default image quality to use when resampling or caching images (85%)" - CACHE_ALL: "Cache all images" - CACHE_ALL_HELP: "Run all images through Grav's cache system even if they have no media manipulations" - IMAGES_DEBUG: "Image debug watermark" - IMAGES_DEBUG_HELP: "Show an overlay over images indicating the pixel depth of the image when working with retina for example" - UPLOAD_LIMIT: "File upload limit" - UPLOAD_LIMIT_HELP: "Set maximum upload size in bytes (0 is unlimited)" - ENABLE_MEDIA_TIMESTAMP: "Enable timestamps on media" - ENABLE_MEDIA_TIMESTAMP_HELP: "Appends a timestamp based on last modified date to each media item" - SESSION: "Session" - SESSION_ENABLED_HELP: "Enable session support within Grav" - TIMEOUT: "Timeout" - TIMEOUT_HELP: "Sets the session timeout in seconds" - SESSION_NAME_HELP: "An identifier used to form the name of the session cookie" - ABSOLUTE_URLS: "Absolute URLs" - ABSOLUTE_URLS_HELP: "Absolute or relative URLs for `base_url`" - PARAMETER_SEPARATOR: "Parameter separator" - PARAMETER_SEPARATOR_HELP: "Separater for passed parameters that can be changed for Apache on Windows" - TASK_COMPLETED: "Task completed" - EVERYTHING_UP_TO_DATE: "Everything is up to date" - UPDATES_ARE_AVAILABLE: "updates are available" - IS_AVAILABLE_FOR_UPDATE: "is available for update" - IS_NOW_AVAILABLE: "is now available" - CURRENT: "Current" - UPDATE_GRAV_NOW: "Update Grav Now" - GRAV_SYMBOLICALLY_LINKED: "Grav is symbolically linked. Upgrade won\'t be available" - UPDATING_PLEASE_WAIT: "Updating... please wait, downloading" - OF_THIS: "of this" - OF_YOUR: "of your" - HAVE_AN_UPDATE_AVAILABLE: "have an update available" - SAVE_AS: "Save as" - MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_DESC: "Are you sure you want to delete this page and all it's children? If the page is translated in other languages, those translations will be kept and must be deleted separately. Otherwise the page folder will be deleted along with its subpages. This action cannot be undone." - AND: "and" - UPDATE_AVAILABLE: "Update available" - METADATA_KEY: "Key (e.g. 'Keywords')" - METADATA_VALUE: "Value (e.g. 'Blog, Grav')" - USERNAME_HELP: "Username should be between 3 and 16 characters, including lowercase letters, numbers, underscores, and hyphens. Uppercase letters, spaces, and special characters are not allowed" - FULLY_UPDATED: "Fully Updated" - SAVE_LOCATION: "Save location" - PAGE_FILE: "Page File" - PAGE_FILE_HELP: "Page file name, and by default the display template for this page" - NO_USER_ACCOUNTS: "No user accounts found, please create one first..." - REDIRECT_TRAILING_SLASH: "Redirect trailing slash" - REDIRECT_TRAILING_SLASH_HELP: "Perform a 301 redirect rather than transparently handling trailing slash URIs." - DEFAULT_DATE_FORMAT: "Page date format" - DEFAULT_DATE_FORMAT_HELP: "Page date format used by Grav. By default, Grav attempts to guess your date format, however you can specifiy a format using PHP's date syntax (e.g.: Y-m-d H:i)" - DEFAULT_DATE_FORMAT_PLACEHOLDER: "Guess automatically if blank" - IGNORE_FILES: "Ignore files" - IGNORE_FILES_HELP: "Specific files to ignore when processing pages" - IGNORE_FOLDERS: "Ignore folders" - IGNORE_FOLDERS_HELP: "Specific folders to ignore when processing pages" - HTTP_ACCEPT_LANGUAGE: "Set language from browser" - HTTP_ACCEPT_LANGUAGE_HELP: "You can opt to try to set the language based on `http_accept_language` header tag in the browser" - OVERRIDE_LOCALE: "Override locale" - OVERRIDE_LOCALE_HELP: "Override the locale setting in PHP based on the current language" - REDIRECT: "Page redirect" - REDIRECT_HELP: "Enter a page route or external URL for this page to redirect to. e.g. `/some/route` or `http://somesite.com`" - PLUGIN_STATUS: "Plugin status" - INCLUDE_DEFAULT_LANG: "Include default language" - INCLUDE_DEFAULT_LANG_HELP: "This will prepend all URLs in the default language with the default language. e.g. `/en/blog/my-post`" - ALLOW_URL_TAXONOMY_FILTERS: "URL Taxonomy Filters" - ALLOW_URL_TAXONOMY_FILTERS_HELP: "Page-based collections allow you to filter via `/taxonomy:value`." - REDIRECT_DEFAULT_CODE: "Default redirect code" - REDIRECT_DEFAULT_CODE_HELP: "The HTTP status code to use for redirects" - IGNORE_HIDDEN: "Ignore hidden" - IGNORE_HIDDEN_HELP: "Ignore all files and folders that being with a DOT" - WRAPPED_SITE: "Wrapped site" - WRAPPED_SITE_HELP: "For themes/plugins to know if Grav is wrapped by another platform" - FALLBACK_TYPES: "Allowed fallback types" - FALLBACK_TYPES_HELP: "Allowed file types that can be found if accessed via Page route" -es: - PLUGIN_ADMIN: - ADMIN_BETA_MSG: "¡Está es una versión Beta! Utilízala bajo tu propio riesgo..." - ADMIN_REPORT_ISSUE: "¿Encontraste algún problema de funcionamiento? Por favor, repórtalo en GitHub." - EMAIL_FOOTER: "Funcionando con Grav - El CMS de archivos planos moderno" - LOGIN_BTN: "Login" - LOGIN_BTN_FORGOT: "Me olvidé" - LOGIN_BTN_RESET: "Restablecer contraseña" - LOGIN_BTN_SEND_INSTRUCTIONS: "Enviar instrucciones de restablecimiento" - LOGIN_LOGGED_IN: "Has conseguido iniciar sesión con éxito" - LOGIN_FAILED: "El inicio de sesión falló" - LOGGED_OUT: "Te has desconectado" - RESET_LINK_EXPIRED: "El enlace de restablecimiento ha caducado, por favor, inténtalo de nuevo" - RESET_PASSWORD_RESET: "La contraseña ha sido restablecida" - RESET_INVALID_LINK: "El enlace de restablecimiento no es válido, por favor, inténtalo otra vez" - FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Las instrucciones para restablecer tu contraseña han sido enviadas por email a %s" - FORGOT_FAILED_TO_EMAIL: "Fallo al enviar las instrucciones por email, por favor inténtalo de nuevo más tarde" - FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "No se puede restablecer la contraseña para %s, no se ha establecido una dirección de email" - FORGOT_USERNAME_DOES_NOT_EXIST: "El usuario %s no existe" - FORGOT_EMAIL_NOT_CONFIGURED: "No se puede restablecer contraseña. Este sitio no está configurado para enviar emails" - FORGOT_EMAIL_SUBJECT: "%s Petición de restablecimiento de contraseña" - FORGOT_EMAIL_BODY: "

Restablecimiento de contraseña

Estimado %1$s,

Se ha realizado una petición el %4$s para restablecer tu contraseña.


Pincha aquí para restablecer tu contraseña

Alternativamente, copia la siguiente URL en la barra de direcciones de tu navegador:

%2$s


Atentamente,

%3$s

" - MANAGE_PAGES: "Adminitrar páginas" - CONFIGURATION: "Configuración" - PAGES: "Páginas" - PLUGINS: "Plugins" - PLUGIN: "Plugin" - THEMES: "Temas" - LOGOUT: "Logout" - BACK: "Atrás" - ADD_PAGE: "Agregar Página" - ADD_MODULAR: "Agregar Módulo" - MOVE: "Mover" - DELETE: "Borrar" - SAVE: "Guardar" - NORMAL: "Normal" - EXPERT: "Experto" - EXPAND_ALL: "Expandir Todo" - COLLAPSE_ALL: "Cerrar Todo" - ERROR: "Error" - CLOSE: "Cerrar" - CANCEL: "Cancelar" - CONTINUE: "Continuar" - MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "Confirmación Requerida" - MODAL_CHANGED_DETECTED_TITLE: "Cambios elminados" - MODAL_CHANGED_DETECTED_DESC: "Usted tiene cambios sin guardar. Está seguro que desea irse sin guardar?" - MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Confirmación Requerida" - MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Está seguro que desea eliminar este archivo? Está acción no se puede deshacer." - ADD_FILTERS: "Agregar Filtros" - SEARCH_PAGES: "Buscar Páginas" - VERSION: "Versión" - WAS_MADE_WITH: "Fue hecho por" - BY: "Por" - UPDATE_THEME: "Actualizar Tema" - UPDATE_PLUGIN: "Actualizar Plugin" - OF_THIS_THEME_IS_NOW_AVAILABLE: "de este tema ya está disponible" - OF_THIS_PLUGIN_IS_NOW_AVAILABLE: "de este plugin ya está disponible" - AUTHOR: "Autor" - HOMEPAGE: "Página de inicio" - DEMO: "Demo" - BUG_TRACKER: "Bug Tracker" - KEYWORDS: "Palabras Clave" - LICENSE: "Licencia" - DESCRIPTION: "Descripción" - README: "Léame" - REMOVE_THEME: "Eliminar Tema" - INSTALL_THEME: "Instalar Tema" - THEME: "Tema" - BACK_TO_THEMES: "Volver a Temas" - BACK_TO_PLUGINS: "Volver a Plugins" - CHECK_FOR_UPDATES: "Buscar Actualizaciones" - ADD: "Agregar" - CLEAR_CACHE: "Limpiar Cache" - CLEAR_CACHE_ALL_CACHE: "Limpiar Toda la Cache" - CLEAR_CACHE_ASSETS_ONLY: "Solo Assets" - CLEAR_CACHE_IMAGES_ONLY: "Solo Images" - CLEAR_CACHE_CACHE_ONLY: "Solo Cache" - DASHBOARD: "Dashboard" - UPDATES_AVAILABLE: "Actualizaciones disponibles" - DAYS: "Días" - UPDATE: "Actualizar" - BACKUP: "Respaldo" - STATISTICS: "Estadisticas" - TODAY: "Hoy" - WEEK: "Semana" - MONTH: "Mes" - LATEST_PAGE_UPDATES: "Última Página de Actualizaciones" - MAINTENANCE: "Mantenimiento" - UPDATED: "Actualizado" - MON: "Lun" - TUE: "Mar" - WED: "Mie" - THU: "Jue" - FRI: "Vie" - SAT: "Sab" - SUN: "Dom" - COPY: "Copiar" - EDIT: "Editar" - CREATE: "Crear" - GRAV_ADMIN: "Grav Admin" - GRAV_OFFICIAL_PLUGIN: "Grav Plugin Oficial" - GRAV_OFFICIAL_THEME: "Grav Tema Oficial" - PLUGIN_SYMBOLICALLY_LINKED: "Este plugin esta simbólicamente vinculado. No se podrá actualizar." - THEME_SYMBOLICALLY_LINKED: "Este tema esta simbólicamente vinculado. Las actualizaciones no se podrán eliminar." - REMOVE_PLUGIN: "Eliminar Plugin" - INSTALL_PLUGIN: "Instalar Plugin" - AVAILABLE: "Disponibile" - INSTALLED: "Instalado" - INSTALL: "Instalar" - ACTIVE_THEME: "Tema activo" - SWITCHING_TO: "Cambiando a" - SWITCHING_TO_DESCRIPTION: "By switching to a different theme, there is no guarantee that all the layout pages are supported, potentially causing errors when trying to load said pages." - SWITCHING_TO_CONFIRMATION: "Desea continuar y cambiar el tema" - CREATE_NEW_USER: "Crear nuevo usuario" - REMOVE_USER: "Eliminar usuario" - ACCESS_DENIED: "Acceso denegado" - ACCOUNT_NOT_ADMIN: "su cuenta no posee privilegios de administrador" - PHP_INFO: "PHP Info" - INSTALLER: "Instalador" - AVAILABLE_THEMES: "Temas Disponibiles" - AVAILABLE_PLUGINS: "Plugins Disponibiles" - INSTALLED_THEMES: "Temas Intalados" - INSTALLED_PLUGINS: "Plugins Intalados" - BROWSE_ERROR_LOGS: "Verregistros de errores" - SITE: "Sitio" - INFO: "Info" - SYSTEM: "Sistema" - USER: "Usuario" - ADD_ACCOUNT: "Añadir cuenta" - SWITCH_LANGUAGE: "Cambiar idioma" - SUCCESSFULLY_ENABLED_PLUGIN: "Plugin activado exitosamente" - SUCCESSFULLY_DISABLED_PLUGIN: "Plugin activado exitosamente" - SUCCESSFULLY_CHANGED_THEME: "Tema por defecto exitosamente modificado" - INSTALLATION_FAILED: "Installación fallida" - INSTALLATION_SUCCESSFUL: "Installación exitosa" - UNINSTALL_FAILED: "Desinstalación fallida" - UNINSTALL_SUCCESSFUL: "Desinstalación exitosa" - SUCCESSFULLY_SAVED: "Successfully saved" - SUCCESSFULLY_COPIED: "Successfully copied" - REORDERING_WAS_SUCCESSFUL: "Reordering was successful" - SUCCESSFULLY_DELETED: "Successfully deleted" - SUCCESSFULLY_SWITCHED_LANGUAGE: "Successfully switched language" - INSUFFICIENT_PERMISSIONS_FOR_TASK: "You have insufficient permissions for task" - CACHE_CLEARED: "Cache cleared" - METHOD: "Method" - ERROR_CLEARING_CACHE: "Error clearing cache" - AN_ERROR_OCCURRED: "An error occurred" - YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: "Your backup is ready for download" - DOWNLOAD_BACKUP: "Download backup" - PAGES_FILTERED: "Pages filtered" - NO_PAGE_FOUND: "No Page found" - INVALID_PARAMETERS: "Invalid Parameters" - NO_FILES_SENT: "No files sent" - EXCEEDED_FILESIZE_LIMIT: "Exceeded filesize limit" - UNKNOWN_ERRORS: "Unkown errors" - EXCEEDED_GRAV_FILESIZSE_LIMIT: "Exceeded Grav filesize limit." - UNSUPPORTED_FILE_TYPE: "Unsupported file type" - FAILED_TO_MOVE_UPLOADED_FILE: "Failed to move uploaded file." - FILE_UPLOADED_SUCCESSFULLY: "File uploaded successfully" - FILE_DELETED: "File deleted" - FILE_COULD_NOT_BE_DELETED: "File could not be deleted" - FILE_NOT_FOUND: "File not found" - NO_FILE_FOUND: "No file found" - GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "Grav was successfully updated to" - GRAV_UPDATE_FAILED: "Grav update failed" - EVERYTHING_UPDATED: "Everything updated" - UPDATES_FAILED: "Updates failed" - AVATAR_BY: "Avatar by" - LAST_BACKUP: "Last Backup" - FULL_NAME: "Full name" - USERNAME: "Username" - EMAIL: "Email" - PASSWORD: "Password" - TITLE: "Title" - LANGUAGE: "Language" - ACCOUNT: "Account" - EMAIL_VALIDATION_MESSAGE: "Must be a valid email address" - PASSWORD_VALIDATION_MESSAGE: "Password must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters" - LANGUAGE_HELP: "Set the favorite language" - MEDIA: "Media" - DEFAULTS: "Defaults" - SITE_TITLE: "Site Title" - SITE_TITLE_PLACEHOLDER: "Site wide title" - SITE_TITLE_HELP: "Default title for your site, often used in themes" - DEFAULT_AUTHOR: "Default Author" - DEFAULT_AUTHOR_HELP: "A default author name, often used in themes or page content" - DEFAULT_EMAIL: "Default Email" - DEFAULT_EMAIL_HELP: "A default email to reference in themes or pages" - TAXONOMY_TYPES: "Taxonomy Types" - TAXONOMY_TYPES_HELP: "Taxonomy types must be defined here if you wish to use them in pages" - PAGE_SUMMARY: "Page Summary" - ENABLED: "Enabled" - ENABLED_HELP: "Enable page summary (the summary returns the same as the page content)" - 'YES': "Yes" - 'NO': "No" - SUMMARY_SIZE: "Summary Size" - SUMMARY_SIZE_HELP: "The amount of characters of a page to use as a content summary" - FORMAT: "Format" - FORMAT_HELP: "short = use the first occurrence of delimiter or size; long = summary delimiter will be ignored" - SHORT: "Short" - LONG: "Long" - DELIMITER: "Delimiter" - DELIMITER_HELP: "The summary delimiter (default '===')" - METADATA: "Metadata" - METADATA_HELP: "Default metadata values that will be displayed on every page unless overridden by the page" - NAME: "Name" - CONTENT: "Content" - REDIRECTS_AND_ROUTES: "Redirects & Routes" - CUSTOM_REDIRECTS: "Custom Redirects" - CUSTOM_REDIRECTS_HELP: "routes to redirect to other pages. Standard Regex replacement is valid" - CUSTOM_REDIRECTS_PLACEHOLDER_KEY: "/your/alias" - CUSTOM_REDIRECTS_PLACEHOLDER_VALUE: "/your/redirect" - CUSTOM_ROUTES: "Custom Routes" - CUSTOM_ROUTES_HELP: "routes to alias to other pages. Standard Regex replacement is valid" - CUSTOM_ROUTES_PLACEHOLDER_KEY: "/your/alias" - CUSTOM_ROUTES_PLACEHOLDER_VALUE: "/your/route" - FILE_STREAMS: "File Streams" - DEFAULT: "Default" - PAGE_MEDIA: "Page Media" - OPTIONS: "Options" - PUBLISHED: "Published" - PUBLISHED_HELP: "By default, a page is published unless you explicitly set published: false or via a publish_date being in the future, or unpublish_date in the past" - DATE: "Date" - DATE_HELP: "The date variable allows you to specifically set a date associated with this page." - PUBLISHED_DATE: "Published Date" - PUBLISHED_DATE_HELP: "Can provide a date to automatically trigger publication." - UNPUBLISHED_DATE: "Unpublished Date" - UNPUBLISHED_DATE_HELP: "can provide a date to automatically trigger un-publication." - ROBOTS: "Robots" - TAXONOMIES: "Taxonomies" - TAXONOMY: "Taxonomy" - ADVANCED: "Advanced" - SETTINGS: "Settings" - FOLDER_NUMERIC_PREFIX: "Folder Numeric Prefix" - FOLDER_NUMERIC_PREFIX_HELP: "Numeric prefix that provides manual ordering and implies visibility" - FOLDER_NAME: "Folder Name" - FOLDER_NAME_HELP: "The folder name that will be stored in the filesystem for this page" - PARENT: "Parent" - DEFAULT_OPTION_ROOT: "- Root -" - DEFAULT_OPTION_SELECT: "- Select -" - DISPLAY_TEMPLATE: "Display Template" - DISPLAY_TEMPLATE_HELP: "The page type that translates into which twig template renders the page" - BODY_CLASSES: "Body Classes" - ORDERING: "Ordering" - PAGE_ORDER: "Page Order" - OVERRIDES: "Overrides" - MENU: "Menu" - MENU_HELP: "The string to be used in a menu. If not set, Title will be used." - SLUG: "Slug" - SLUG_HELP: "The slug variable allows you to specifically set the page's portion of the URL" - SLUG_VALIDATE_MESSAGE: "A slug must contain only lowercase alphanumeric characters and dashes" - PROCESS: "Process" - PROCESS_HELP: "Control how pages are processed. Can be set per-page rather than globally" - DEFAULT_CHILD_TYPE: "Default Child Type" - USE_GLOBAL: "Use Global" - ROUTABLE: "Routable" - ROUTABLE_HELP: "If this page is reachable by a URL" - CACHING: "Caching" - VISIBLE: "Visible" - VISIBLE_HELP: "Determines if a page is visible in the navigation." - DISABLED: "Disabled" - ITEMS: "Items" - ORDER_BY: "Order By" - ORDER: "Order" - FOLDER: "Folder" - ASCENDING: "Ascending" - DESCENDING: "Descending" - ADD_MODULAR_CONTENT: "Add Modular Content" - PAGE_TITLE: "Page Title" - PAGE_TITLE_HELP: "The title of the page" - PAGE: "Page" - MODULAR_TEMPLATE: "Modular Template" - FRONTMATTER: "Frontmatter" - FILENAME: "Filename" - PARENT_PAGE: "Parent Page" - HOME_PAGE: "Home page" - HOME_PAGE_HELP: "The page that Grav will use as the default landing page" - DEFAULT_THEME: "Default theme" - DEFAULT_THEME_HELP: "Set the default theme for Grav to use (default is Antimatter)" - TIMEZONE: "Timezone" - TIMEZONE_HELP: "Override the default timezone the server" - SHORT_DATE_FORMAT: "Short date format" - SHORT_DATE_FORMAT_HELP: "Set the short date format that can be used by themes" - LONG_DATE_FORMAT: "Long date format" - LONG_DATE_FORMAT_HELP: "Set the long date format that can be used by themes" - DEFAULT_ORDERING: "Default ordering" - DEFAULT_ORDERING_HELP: "Pages in a list will render using this order unless it is overridden" - DEFAULT_ORDERING_DEFAULT: "Default - based on folder name" - DEFAULT_ORDERING_FOLDER: "Folder - based on prefix-less folder name" - DEFAULT_ORDERING_TITLE: "Title - based on title field in header" - DEFAULT_ORDERING_DATE: "Date - based on date field in header" - DEFAULT_ORDER_DIRECTION: "Default order direction" - DEFAULT_ORDER_DIRECTION_HELP: "The direction of pages in a list" - DEFAULT_PAGE_COUNT: "Default page count" - DEFAULT_PAGE_COUNT_HELP: "Default maximum pages count in a list" - DATE_BASED_PUBLISHING: "Date-based publishing" - DATE_BASED_PUBLISHING_HELP: "Automatically (un)publish posts based on their date" - EVENTS: "Events" - EVENTS_HELP: "Enable or Disable specific events. Disabling these can break plugins" - REDIRECT_DEFAULT_ROUTE: "Redirect default route" - REDIRECT_DEFAULT_ROUTE_HELP: "Automatically redirect to a page's default route" - LANGUAGES: "Languages" - SUPPORTED: "Supported" - SUPPORTED_HELP: "Comma separated list of 2 letter language codes (for example 'en,fr,de')" - TRANSLATIONS_ENABLED: "Translations enabled" - TRANSLATIONS_ENABLED_HELP: "Support translations in Grav, plugins and extensions" - TRANSLATIONS_FALLBACK: "Translations fallback" - TRANSLATIONS_FALLBACK_HELP: "Fallback through supported translations if active language doesn't exist" - ACTIVE_LANGUAGE_IN_SESSION: "Active language in session" - ACTIVE_LANGUAGE_IN_SESSION_HELP: "Store the active language in the session" - HTTP_HEADERS: "HTTP Headers" - EXPIRES: "Expires" - EXPIRES_HELP: "Sets the expires header. The value is in seconds." - LAST_MODIFIED: "Last modified" - LAST_MODIFIED_HELP: "Sets the last modified header that can help optimize proxy and browser caching" - ETAG: "ETag" - ETAG_HELP: "Sets the etag header to help identify when a page has been modified" - VARY_ACCEPT_ENCODING: "Vary accept encoding" - VARY_ACCEPT_ENCODING_HELP: "Sets the `Vary: Accept Encoding` header to help with proxy and CDN caching" - MARKDOWN_EXTRA_HELP: "Enable default support for Markdown Extra - https://michelf.ca/projects/php-markdown/extra/" - AUTO_LINE_BREAKS: "Auto line breaks" - AUTO_LINE_BREAKS_HELP: "Enable support for automatic line breaks in markdown" - AUTO_URL_LINKS: "Auto URL links" - AUTO_URL_LINKS_HELP: "Enable automatic conversion of URLs into HTML hyperlinks" - ESCAPE_MARKUP: "Escape markup" - ESCAPE_MARKUP_HELP: "Escape markup tags into HTML entities" - CACHING_HELP: "Global ON/OFF switch to enable/disable Grav caching" - CACHE_CHECK_METHOD: "Cache check method" - CACHE_CHECK_METHOD_HELP: "Select the method that Grav uses to check if page files have been modified." - CACHE_DRIVER: "Cache driver" - CACHE_DRIVER_HELP: "Choose which cache driver Grav should use. 'Auto Detect' attempts to find the best for you" - CACHE_PREFIX: "Cache prefix" - CACHE_PREFIX_HELP: "An identifier for part of the Grav key. Don't change unless you know what your doing." - CACHE_PREFIX_PLACEHOLDER: "Derived from base URL (override by entering random string)" - LIFETIME: "Lifetime" - LIFETIME_HELP: "Sets the cache lifetime in seconds. 0 = infinite" - GZIP_COMPRESSION: "Gzip compression" - GZIP_COMPRESSION_HELP: "Enable GZip compression of the Grav page for increased performance." - TWIG_TEMPLATING: "Twig Templating" - TWIG_CACHING: "Twig caching" - TWIG_CACHING_HELP: "Control the Twig caching mechanism. Leave this enabled for best performance." - TWIG_DEBUG: "Twig debug" - TWIG_DEBUG_HELP: "Allows the option of not loading the Twig Debugger extension" - DETECT_CHANGES: "Detect changes" - DETECT_CHANGES_HELP: "Twig will automatically recompile the Twig cache if it detects any changes in Twig templates" - AUTOESCAPE_VARIABLES: "Autoescape variables" - AUTOESCAPE_VARIABLES_HELP: "Autoescapes all variables. This will break your site most likely" - ASSETS: "Assets" - CSS_PIPELINE: "CSS pipeline" - CSS_PIPELINE_HELP: "The CSS pipeline is the unification of multiple CSS resources into one file" - CSS_MINIFY: "CSS minify" - CSS_MINIFY_HELP: "Minify the CSS during pipelining" - CSS_MINIFY_WINDOWS_OVERRIDE: "CSS minify Windows override" - CSS_MINIFY_WINDOWS_OVERRIDE_HELP: "Minify Override for Windows platforms. False by default due to ThreadStackSize" - CSS_REWRITE: "CSS rewrite" - CSS_REWRITE_HELP: "Rewrite any CSS relative URLs during pipelining" - JAVASCRIPT_PIPELINE: "JavaScript pipeline" - JAVASCRIPT_PIPELINE_HELP: "The JS pipeline is the unification of multiple JS resources into one file" - JAVASCRIPT_MINIFY: "JavaScript minify" - JAVASCRIPT_MINIFY_HELP: "Minify the JS during pipelining" - ENABLED_TIMESTAMPS_ON_ASSETS: "Enable timestamps on assets" - ENABLED_TIMESTAMPS_ON_ASSETS_HELP: "Enable asset timestamps" - COLLECTIONS: "Collections" - ERROR_HANDLER: "Error handler" - DISPLAY_ERRORS: "Display errors" - DISPLAY_ERRORS_HELP: "Display full backtrace-style error page" - LOG_ERRORS: "Log errors" - LOG_ERRORS_HELP: "Log errors to /logs folder" - DEBUGGER: "Debugger" - DEBUGGER_HELP: "Enable Grav debugger and following settings" - DEBUG_TWIG: "Debug Twig" - DEBUG_TWIG_HELP: "Enable debugging of Twig templates" - SHUTDOWN_CLOSE_CONNECTION: "Shutdown close connection" - SHUTDOWN_CLOSE_CONNECTION_HELP: "Close the connection before calling onShutdown(). false for debugging" - DEFAULT_IMAGE_QUALITY: "Default image quality" - DEFAULT_IMAGE_QUALITY_HELP: "Default image quality to use when resampling or caching images (85%)" - CACHE_ALL: "Cache all images" - CACHE_ALL_HELP: "Run all images through Grav's cache system even if they have no media manipulations" - IMAGES_DEBUG: "Image debug watermark" - IMAGES_DEBUG_HELP: "Show an overlay over images indicating the pixel depth of the image when working with retina for example" - UPLOAD_LIMIT: "File upload limit" - UPLOAD_LIMIT_HELP: "Set maximum upload size in bytes (0 is unlimited)" - ENABLE_MEDIA_TIMESTAMP: "Enable timestamps on media" - ENABLE_MEDIA_TIMESTAMP_HELP: "Appends a timestamp based on last modified date to each media item" - SESSION: "Session" - SESSION_ENABLED_HELP: "Enable session support within Grav" - TIMEOUT: "Timeout" - TIMEOUT_HELP: "Sets the session timeout in seconds" - SESSION_NAME_HELP: "An identifier used to form the name of the session cookie" - ABSOLUTE_URLS: "Absolute URLs" - ABSOLUTE_URLS_HELP: "Absolute or relative URLs for `base_url`" - PARAMETER_SEPARATOR: "Parameter separator" - PARAMETER_SEPARATOR_HELP: "Separater for passed parameters that can be changed for Apache on Windows" - TASK_COMPLETED: "Tarea completada" - EVERYTHING_UP_TO_DATE: "Todo está actualizado" - UPDATES_ARE_AVAILABLE: "hay actualizaciones disponibles" - IS_AVAILABLE_FOR_UPDATE: "está disponible para su actualización" - IS_NOW_AVAILABLE: "está ahora disponible" - CURRENT: "Actual" - UPDATE_GRAV_NOW: "Actualizadr Grav Ahora" - GRAV_SYMBOLICALLY_LINKED: "Grav está symbolicamente vinculado. No podrá ser actualizado" - UPDATING_PLEASE_WAIT: "Actualizado... por favor espere, descargando" - OF_THIS: "de esta" - OF_YOUR: "de su" - HAVE_AN_UPDATE_AVAILABLE: "Tiene una actualización disponible" - SAVE_AS: "Guardar como" - MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_DESC: "¿Está seguro que desea borrar esta página y todos sus subpaginas? Si la página está traducida en otros idiomas, esas traducciones se mantendrán y se deberán eliminar por separado. De lo contrario se borrará la carpeta de esta página junto con sus subpáginas. Esta acción no se puede deshacer." - AND: "y" - UPDATE_AVAILABLE: "Actualización disponible" - METADATA_KEY: "Key (e.g. 'Palabra clave')" - METADATA_VALUE: "Valor (e.g. 'Blog, Grav')" - USERNAME_HELP: "El nombre de usuario debe tener entre 3 y 16, incluyendo letras en minúsculas, números, guiones bajos y guiones. Las mayusculas, espacios y careacteres especiales no están permitidos" - FULLY_UPDATED: "Totalmente Actualizado" - SAVE_LOCATION: "Guardar ubicación" - PAGE_FILE: "Archivo página" - PAGE_FILE_HELP: "Nombre de archivo de página, y por defecto la plantilla de visualización de esta página" - NO_USER_ACCOUNTS: "No se encuentraron cuentas de usuario, por favor crear una..." - REDIRECT_TRAILING_SLASH: "Redirigir barra final" - REDIRECT_TRAILING_SLASH_HELP: "Realice una redirección 301 en lugar de manejo transparente barra final" - PLUGIN_STATUS: "Estado plugin" - -it: - PLUGIN_ADMIN: - ADMIN_BETA_MSG: "Questa è una versione beta! Usare in produzione a proprio rischio e pericolo…" - ADMIN_REPORT_ISSUE: "Trovato un problema? Per favore, apri un ticket su GitHub" - EMAIL_FOOTER: "Powered by Grav - The Modern Flat File CMS" - LOGIN_BTN_SEND_INSTRUCTIONS: "Invia istruzioni di reset" - LOGIN_LOGGED_IN: "Login effettuato con successo" - LOGIN_FAILED: "Login fallito" - LOGGED_OUT: "Sei stato disconnesso" - RESET_LINK_EXPIRED: "Il link di reset è scaduto, ritenta per favore" - RESET_PASSWORD_RESET: "La password è stata resettata" - RESET_INVALID_LINK: "Il link di reset non è valido, ritenta per favore" - FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Le istruzioni per resettare la password sono state inviate via email a %s" - FORGOT_FAILED_TO_EMAIL: "Invio della email fallito, per favore ritenta più tardi" - FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Impossibile resettare la password per %s, nessun indirizzo email impostato" - FORGOT_USERNAME_DOES_NOT_EXIST: "L'utente con username %s non esiste" - FORGOT_EMAIL_NOT_CONFIGURED: "Impossibile resettare la password. Il sito non è configurato per inviare email" - FORGOT_EMAIL_SUBJECT: "%s Richiesta di reset password" - FORGOT_EMAIL_BODY: "

Reset password

Caro %1$s,

Una richiesta di reset password è stata effettuata su %4$s.


Clicca qui per resettare la tua password

In alternativa, copia il seguente URL nella barra indirizzi del tuo browser:

%2$s


Cordiali saluti,

%3$s

" - LOGIN_BTN: "Login" - LOGIN_BTN_FORGOT: "Reset password" - LOGIN_BTN_RESET: "Resetta la password" - MANAGE_PAGES: "Gestione Pagine" - CONFIGURATION: "Settaggi" - PAGES: "Pagine" - PLUGINS: "Plugin" - PLUGIN: "Plugin" - THEMES: "Temi" - LOGOUT: "Logout" - BACK: "Indietro" - ADD_PAGE: "Aggiungi Pagina" - ADD_MODULAR: "Aggiungi Modular" - MOVE: "Sposta" - DELETE: "Elimina" - SAVE: "Salva" - NORMAL: "Normale" - EXPERT: "Esperto" - EXPAND_ALL: "Espandi tutto" - COLLAPSE_ALL: "Comprimi tutto" - ERROR: "Errore" - CLOSE: "Chiudi" - CANCEL: "Cancella" - CONTINUE: "Continua" - MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "Conferma richiesta" - MODAL_CHANGED_DETECTED_TITLE: "Rilevate modifiche" - MODAL_CHANGED_DETECTED_DESC: "Vi sono cambiamenti non salvati. Sicuro di voler lasciare la pagina senza salvare?" - MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Conferma richiesta" - MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Sicuro di voler eliminare questo file? Questa azione non può essere annullata." - ADD_FILTERS: "Aggiungi filtro" - SEARCH_PAGES: "Cerca pagine" - VERSION: "Versione" - WAS_MADE_WITH: "Prodotta con il" - BY: "Da" - UPDATE_THEME: "Aggiorna tema" - OF_THIS_THEME_IS_NOW_AVAILABLE: "di questo tema è ora disponibile" - AUTHOR: "Autore" - HOMEPAGE: "Homepage" - DEMO: "Demo" - BUG_TRACKER: "Bug Tracker" - KEYWORDS: "Parole chiave" - LICENSE: "Licenza" - DESCRIPTION: "Descrizione" - README: "Readme" - REMOVE_THEME: "Rimuovo tema" - INSTALL_THEME: "Installa tema" - THEME: "Tema" - BACK_TO_THEMES: "Torna ai temi" - BACK_TO_PLUGINS: "Torna ai plugin" - CHECK_FOR_UPDATES: "Controlla aggiornamenti" - ADD: "Aggiungi" - CLEAR_CACHE: "Pulisci cache" - CLEAR_CACHE_ALL_CACHE: "Tutta la cache" - CLEAR_CACHE_ASSETS_ONLY: "Solo asset" - CLEAR_CACHE_IMAGES_ONLY: "Solo immagini" - CLEAR_CACHE_CACHE_ONLY: "Solo cache" - DASHBOARD: "Dashboard" - UPDATES_AVAILABLE: "Aggiornamenti disponibili" - DAYS: "Giorni" - UPDATE: "Aggiorna" - BACKUP: "Backup" - STATISTICS: "Statistiche" - TODAY: "Oggi" - WEEK: "Settimana" - MONTH: "Mese" - LATEST_PAGE_UPDATES: "Ultimi aggiornamenti pagine" - MAINTENANCE: "Manutenzione" - UPDATED: "Aggiornato" - MON: "Lun" - TUE: "Mar" - WED: "Mer" - THU: "Gio" - FRI: "Ven" - SAT: "Sab" - SUN: "Dom" - COPY: "Copia" - EDIT: "Modifica" - CREATE: "Crea" - GRAV_ADMIN: "Grav Admin" - GRAV_OFFICIAL_PLUGIN: "Plugin Ufficiale Grav" - GRAV_OFFICIAL_THEME: "Tema Ufficiale Grav" - PLUGIN_SYMBOLICALLY_LINKED: "Questo plugin ha un link simbolico. Gli aggiornamenti non possono essere installati da qui" - THEME_SYMBOLICALLY_LINKED: "Questo tema ha un link simbolico. Gli aggiornamenti non possono essere installati da qui" - REMOVE_PLUGIN: "Rimuovi Plugin" - INSTALL_PLUGIN: "Installa Plugin" - AVAILABLE: "Disponibile" - INSTALLED: "Installato" - INSTALL: "Installa" - ACTIVE_THEME: "Tema attivo" - SWITCHING_TO: "Passare a" - SWITCHING_TO_DESCRIPTION: "Cambiando il tema, non è garantito che tutti i layout di pagina siano supportati, potenzialmente causando errori quando si tenta di caricare tali pagine." - SWITCHING_TO_CONFIRMATION: "Vuoi continuare e passare al tema" - CREATE_NEW_USER: "Crea nuovo utente" - REMOVE_USER: "Rimuovi utente" - ACCESS_DENIED: "Accesso negato" - ACCOUNT_NOT_ADMIN: "il tuo account non ha permessi di amministratore" - PHP_INFO: "PHP Info" - INSTALLER: "Installazione" - AVAILABLE_THEMES: "Temi disponibili" - AVAILABLE_PLUGINS: "Plugin disponibili" - INSTALLED_THEMES: "Temi installati" - INSTALLED_PLUGINS: "Plugin installati" - BROWSE_ERROR_LOGS: "Vedi log errori" - SITE: "Sito" - INFO: "Info" - SYSTEM: "Sistema" - USER: "Utente" - ADD_ACCOUNT: "Aggiungi utente" - SWITCH_LANGUAGE: "Cambia lingua" - SUCCESSFULLY_ENABLED_PLUGIN: "Plugin abilitato con successo" - SUCCESSFULLY_DISABLED_PLUGIN: "Plugin disabilitato con successo" - SUCCESSFULLY_CHANGED_THEME: "Tema cambiato con successo" - INSTALLATION_FAILED: "Intallazione fallita" - INSTALLATION_SUCCESSFUL: "Installazione avvenuta con successo" - SUCCESSFULLY_SAVED: "Salvato con successo" - SUCCESSFULLY_COPIED: "Copiato con successo" - REORDERING_WAS_SUCCESSFUL: "Riordinato con successo" - SUCCESSFULLY_DELETED: "Eliminato con successo" - SUCCESSFULLY_SWITCHED_LANGUAGE: "Lingua cambiata con successo" - INSUFFICIENT_PERMISSIONS_FOR_TASK: "Permissi insufficenti per l'operazione" - CACHE_CLEARED: "Cache pulita" - METHOD: "Metodo" - ERROR_CLEARING_CACHE: "Errore nella pulizia della cache" - AN_ERROR_OCCURRED: "Errore rilevato" - YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: "Il tuo backup è pronto per il download" - DOWNLOAD_BACKUP: "Scarica backup" - PAGES_FILTERED: "Pagine filtrate" - NO_PAGE_FOUND: "Nessuna pagina trovata" - INVALID_PARAMETERS: "Parametri invalidi" - NO_FILES_SENT: "Nessun file inviato" - EXCEEDED_FILESIZE_LIMIT: "Superati i limiti di dimensione file" - UNKNOWN_ERRORS: "Errore sconosciuto" - EXCEEDED_GRAV_FILESIZE_LIMIT: "Superato il limite di upload file" - UNSUPPORTED_FILE_TYPE: "Tipo di file non supportato" - FAILED_TO_MOVE_UPLOADED_FILE: "Fallito lo spostamento del file caricato" - FILE_UPLOADED_SUCCESSFULLY: "File caricato con successo" - FILE_DELETED: "File eliminato" - FILE_COULD_NOT_BE_DELETED: "Il file non può essere eliminato" - FILE_NOT_FOUND: "File non trovato" - NO_FILE_FOUND: "Nessun file trovato" - GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "Grav è stato correttamente aggiornato a" - GRAV_UPDATE_FAILED: "Aggiornamento di Grav fallito" - EVERYTHING_UPDATED: "Tutto aggiornato" - UPDATES_FAILED: "Aggiornamento fallito" - AVATAR_BY: "Avatar da" - LAST_BACKUP: "Ultimo Backup" - FULL_NAME: "Nome completo" - USERNAME: "Nome utente" - EMAIL: "Email" - PASSWORD: "Password" - TITLE: "Titolo" - LANGUAGE: "Lingua" - ACCOUNT: "Account" - EMAIL_VALIDATION_MESSAGE: "Deve essere un indirizzo email valido" - PASSWORD_VALIDATION_MESSAGE: "La password deve contenere almeno un numero, una lettera maiuscola e una minuscola, ed essere lunga almeno 8 caratteri" - LANGUAGE_HELP: "Imposta la lingua preferita" - DEFAULTS: "Defaults" - SITE_TITLE: "Titolo del sito" - SITE_TITLE_PLACEHOLDER: "Titolo di tutto il sito" - SITE_TITLE_HELP: "Il titolo di default per il tuo sito, usato soprattutto dai temi" - DEFAULT_AUTHOR: "Autore predefinito" - DEFAULT_AUTHOR_HELP: "Un nome autore di default, usato dai temi o dal contenuto delle pagine" - DEFAULT_EMAIL: "Email predefinita" - DEFAULT_EMAIL_HELP: "Una email predefinita, usata dal tema o dalle pagine" - TAXONOMY_TYPES: "Tassonomie" - TAXONOMY_TYPES_HELP: "Le tassonomie devono essere definite qui per essere utilizzate nelle pagine" - PAGE_SUMMARY: "Sommario pagina" - ENABLED: "Abilitato" - ENABLED_HELP: "Abilita il sommario pagina (il sommario viene preso dal contenuto della pagina)" - 'YES': "Si" - 'NO': "No" - SUMMARY_SIZE: "Dimensione del sommario" - SUMMARY_SIZE_HELP: "Il numero di caratteri del contenuto della pagina da usare come sommario" - FORMAT: "Formato" - FORMAT_HELP: "corto = usa la prima occorrenza di un delimitatore o strings; lungo = il delimitatore di sommario verrà ignorato" - SHORT: "Corto" - LONG: "Lungo" - DELIMITER: "Delimitatore" - DELIMITER_HELP: "Il delimitatore di sommario (default '===')" - METADATA: "Metadata" - METADATA_HELP: "I valori metadata di default che saranno mostrati in ogni pagina se non vi è un override nella pagina" - NAME: "Nome" - CONTENT: "Contenuto" - REDIRECTS_AND_ROUTES: "Redirect & Route" - CUSTOM_REDIRECTS: "Redirect custom" - CUSTOM_REDIRECTS_HELP: "route impostate per redirigere gli alias indicati verso altre pagine. Regex accettate." - CUSTOM_REDIRECTS_PLACEHOLDER_KEY: "/il-tuo/alias" - CUSTOM_REDIRECTS_PLACEHOLDER_VALUE: "/il-tuo/redirect" - CUSTOM_ROUTES: "Route custom" - CUSTOM_ROUTES_HELP: "route impostate per essere alias di altre pagine. Regex accettate." - CUSTOM_ROUTES_PLACEHOLDER_KEY: "/il-tuo/alias" - CUSTOM_ROUTES_PLACEHOLDER_VALUE: "/la-tua/route" - FILE_STREAMS: "File Streams" - PAGE_MEDIA: "Media della pagina" - OPTIONS: "Opzioni" - PUBLISHED: "Pubblicato" - PUBLISHED_HELP: "Per default una pagina è pubblicata a meno che sia esplicitamente impostata published: false o con una publish_date settata nel futuro, oppure unpublish_date settata nel passato." - DATE: "Data" - DATE_HELP: "La variabile data permette di specificare una data associata alla pagina" - PUBLISHED_DATE: "Data di pubblicazione" - PUBLISHED_DATE_HELP: "Può fornire una data di pubblicazione automatica della pagina" - UNPUBLISHED_DATE: "Data di rimozione pubblicazione" - UNPUBLISHED_DATE_HELP: "Può fornire una data di rimozione della pubblicazione automatica della pagina" - ROBOTS: "Robot" - TAXONOMIES: "Tassonomie" - TAXONOMY: "Tassonomia" - ADVANCED: "Avanzati" - SETTINGS: "Settaggi" - FOLDER_NUMERIC_PREFIX: "Prefisso numerico della cartella" - FOLDER_NUMERIC_PREFIX_HELP: "Prefisso numerico che fornisce ordinamento manuale ed implica visibilità" - FOLDER_NAME: "Nome Cartella" - FOLDER_NAME_HELP: "Il nome della cartella che sarà memorizzato nel filesystem per questa pagina" - PARENT: "Padre" - DEFAULT_OPTION_ROOT: "- Root -" - DEFAULT_OPTION_SELECT: "- Seleziona -" - DISPLAY_TEMPLATE: "Template di visualizzazione" - DISPLAY_TEMPLATE_HELP: "Il tipo di pagina si traduce in quale template Twig genera la pagina" - BODY_CLASSES: "Classi body" - ORDERING: "Ordinamento" - PAGE_ORDER: "Ordine pagina" - OVERRIDES: "Override" - MENU: "Menu" - MENU_HELP: "La stringa da usare nel menu. Se non impostato viene usato il titolo" - SLUG: "Slug" - SLUG_HELP: "La variabile slug permette di specificare la porzione di URL associato alla pagina" - SLUG_VALIDATE_MESSAGE: "Lo slug deve contenere solo caratteri alfanumerici minuscoli o trattini" - PROCESS: "Processa" - PROCESS_HELP: "Controlla come sono processate le pagine. Può essere impostato per pagina anzichè globale" - DEFAULT_CHILD_TYPE: "Child Type di default" - USE_GLOBAL: "Usa globali" - ROUTABLE: "Routabile" - ROUTABLE_HELP: "Se questa pagina è raggiungibile tramite URL" - CACHING: "Caching" - VISIBLE: "Visibile" - VISIBLE_HELP: "Determina se una pagina è visible nella navigazione" - DISABLED: "Disabilitata" - ITEMS: "Elementi" - ORDER_BY: "Ordina per" - FOLDER: "Cartella" - DEFAULT: "Default" - ORDER: "Ordine" - ASCENDING: "Ascendente" - DESCENDING: "Discendente" - ADD_MODULAR_CONTENT: "Aggiungi contenuto modulare" - PAGE_TITLE: "Titolo pagina" - PAGE_TITLE_HELP: "Il titolo della pagina" - PAGE: "Pagina" - MODULAR_TEMPLATE: "Template modulare" - FRONTMATTER: "Frontmatter" - FILENAME: "Nome del file" - PARENT_PAGE: "Pagina padre" - HOME_PAGE: "Home page" - HOME_PAGE_HELP: "La pagina che Grav userà come pagina landing di default" - DEFAULT_THEME: "Tema di default" - DEFAULT_THEME_HELP: "Imposta il tema di default utilizzato da Grav (il predefinito è Antimatter)" - TIMEZONE: "Fuso orario" - TIMEZONE_HELP: "Sovrascrivi il fuso orario predefinito del server" - SHORT_DATE_FORMAT: "Formato di data corto" - SHORT_DATE_FORMAT_HELP: "Imposta il formato di data corto che può essere usato dai temi" - LONG_DATE_FORMAT: "Formato di data lungo" - LONG_DATE_FORMAT_HELP: "Imposta il formato di data lungo che può essere usato dai temi" - DEFAULT_ORDERING: "Ordine predefinito" - DEFAULT_ORDERING_HELP: "Le pagine in una lista saranno disposte in questo ordine a meno che sia sovrascritto" - DEFAULT_ORDERING_DEFAULT: "Predefinito - basato sul nome della cartella" - DEFAULT_ORDERING_FOLDER: "Cartella - basato su nome della cartella senza prefisso" - DEFAULT_ORDERING_TITLE: "Titolo - basato sul campo titolo nell'intestazione della pagina" - DEFAULT_ORDERING_DATE: "Data - basato sul campo 'date' nell'intestazione della pagina" - DEFAULT_ORDER_DIRECTION: "Direzione ordinamento predefinita" - DEFAULT_ORDER_DIRECTION_HELP: "La direzione dell'ordine delle pagine in una lista" - DEFAULT_PAGE_COUNT: "Numero di pagine predefinito" - DEFAULT_PAGE_COUNT_HELP: "Il numero massimo predefinito di pagine elencate in una lista" - DATE_BASED_PUBLISHING: "Pubblicazione basata sulla data" - DATE_BASED_PUBLISHING_HELP: "Rimuovi dalla pubblicazione automaticamente i post in base alla data" - EVENTS: "Eventi" - EVENTS_HELP: "Abilita o disabilita specifici eventi. Disabitando questo campo può causare problemi nei plugin" - REDIRECT_DEFAULT_ROUTE: "Redirect alla route predefinita" - REDIRECT_DEFAULT_ROUTE_HELP: "Esegui il redirect automatico di una pagina verso la sua route predefinita" - LANGUAGES: "Linguaggi" - SUPPORTED: "Supportati" - SUPPORTED_HELP: "Lista separata da virgole dei codici di linguaggio a 2 caratteri supportati (ad esempio en,fr,de)" - TRANSLATIONS_ENABLED: "Abilita traduzioni" - TRANSLATIONS_ENABLED_HELP: "Supporta le traduzioni in Grav, plugin e temi" - TRANSLATIONS_FALLBACK: "Fallback delle traduzioni" - TRANSLATIONS_FALLBACK_HELP: "Esegui il fallback delle traduzioni se la lingua attiva non ha una traduzione disponibile" - ACTIVE_LANGUAGE_IN_SESSION: "Linguaggio attivo nella sessione" - ACTIVE_LANGUAGE_IN_SESSION_HELP: "Memorizza il linguaggio attivo nella sessione" - HTTP_HEADERS: "Intestazioni HTTP" - EXPIRES: "Expires" - EXPIRES_HELP: "Imposta l'header expires. Il valore è espresso in secondi" - LAST_MODIFIED: "Last modified" - LAST_MODIFIED_HELP: "Imposta l'header di ultima modifica che può aiutare ad ottimizzare caching proxy e browser" - ETAG: "ETag" - ETAG_HELP: "Imposta l'header etag per aiutare ad identificare quanto è stata modificata una pagina" - VARY_ACCEPT_ENCODING: "Vary accept encoding" - VARY_ACCEPT_ENCODING_HELP: "Imposta l'header `Vary: Accept Encoding` per aiutare con caching proxy e CDN" - MARKDOWN_EXTRA_HELP: "Abilita il supporto predefinito per Markdown Extra - https://michelf.ca/projects/php-markdown/extra/" - AUTO_LINE_BREAKS: "Line break automatici" - AUTO_LINE_BREAKS_HELP: "Abilita il supporto per nuove linee automatiche in markdown" - AUTO_URL_LINKS: "Link URL automatici" - AUTO_URL_LINKS_HELP: "Abilita la conversione automatica di URL in link HTML" - ESCAPE_MARKUP: "Escape del markup" - ESCAPE_MARKUP_HELP: "Abilita l'escape automatico di tags di markup in entità HTML" - CACHING_HELP: "Switch globale per abilitare o disabilitare la cache di Grav" - CACHE_CHECK_METHOD: "Metodo controllo cache" - CACHE_CHECK_METHOD_HELP: "Seleziona il metodo usato da Grav per controllare che i file di una pagina siano stati modificati" - CACHE_DRIVER: "Driver di cache" - CACHE_DRIVER_HELP: "Scegli quale driver di cache deve essere usato da Grav. 'Auto Detect' troverà il migliore automaticamente" - CACHE_PREFIX: "Prefisso cache" - CACHE_PREFIX_HELP: "Un identificatore per parte della chiave cache di Grav. Non cambiare a meno di essere sicuri di quello che si sta facendo" - CACHE_PREFIX_PLACEHOLDER: "Derivato dal base URL (sovrascrivere con una stringa random)" - LIFETIME: "Scadenza" - LIFETIME_HELP: "Imposta la scadenza della cache in secondi. 0 = infinita" - GZIP_COMPRESSION: "Compressione GZip" - GZIP_COMPRESSION_HELP: "Abilita la compressione GZip per incrementare la performance della pagina" - TWIG_TEMPLATING: "Template Twig" - TWIG_CACHING: "Cache di Twig" - TWIG_CACHING_HELP: "Controlla il sistema di caching di Twig. Abilitare per una migliore prestazione" - TWIG_DEBUG: "Twig debug" - TWIG_DEBUG_HELP: "Abilita o meno l'estensione Debugger di Twig" - DETECT_CHANGES: "Rileva cambiamenti" - DETECT_CHANGES_HELP: "Ricompila automaticamente la cache Twig se vengono rilevati cambiamenti nei template Twig" - AUTOESCAPE_VARIABLES: "Autoescape variabili" - AUTOESCAPE_VARIABLES_HELP: "Autoescape tutte le variabili. Questo potrebbe facilmente causare errori nel sito" - ASSETS: "Asset" - CSS_PIPELINE: "CSS pipeline" - CSS_PIPELINE_HELP: "La pipeline CSS è l'unificazione di più file CSS in uno solo" - CSS_MINIFY: "Minify CSS" - CSS_MINIFY_HELP: "Minify il CSS durante il pipelining" - CSS_MINIFY_WINDOWS_OVERRIDE: "Override CSS minify su Windows" - CSS_MINIFY_WINDOWS_OVERRIDE_HELP: "Override minify su piattaforma Windows. Falso di default a causa di ThreadStackSize" - CSS_REWRITE: "Riscrivi URL CSS" - CSS_REWRITE_HELP: "Riscrivi tutti gli URL relativi contenuti nei file CSS durante il pipelining" - JAVASCRIPT_PIPELINE: "JavaScript pipeline" - JAVASCRIPT_PIPELINE_HELP: "La pipeline di JavaScript è l'unificazione di più file JS in uno solo" - JAVASCRIPT_MINIFY: "Minify JavaScript" - JAVASCRIPT_MINIFY_HELP: "Attiva il minify di JavaScript durante il pipelining" - ENABLED_TIMESTAMPS_ON_ASSETS: "Abilita timestamp sugli asset" - ENABLED_TIMESTAMPS_ON_ASSETS_HELP: "Abilita timestamp sugli asset" - COLLECTIONS: "Collezioni" - ERROR_HANDLER: "Gestione degli errori" - DISPLAY_ERRORS: "Mostra errori" - DISPLAY_ERRORS_HELP: "Mostra l'output completo degli errori" - LOG_ERRORS: "Log errori" - LOG_ERRORS_HELP: "Logga gli errori nella cartella /logs" - DEBUGGER: "Debugger" - DEBUGGER_HELP: "Abilita il debugger di Grav ed i seguenti settaggi" - DEBUG_TWIG: "Debug Twig" - DEBUG_TWIG_HELP: "Abilita il debug dei template Twig" - SHUTDOWN_CLOSE_CONNECTION: "Chiudi la connessione in onShutdown" - SHUTDOWN_CLOSE_CONNECTION_HELP: "Chiudi la connessione prima di chiamare onShutdown(). Disabilita in fase di debug." - DEFAULT_IMAGE_QUALITY: "Qualità delle immagini predefinita" - DEFAULT_IMAGE_QUALITY_HELP: "La qualità predefinita per le immagini, utilizzata durante resampling o caching delle immagini (85%)" - CACHE_ALL: "Attiva la cache su tutte le immagini" - CACHE_ALL_HELP: "Attiva la cache su tutte le immagini, anche quelle che non subiscono manipolazioni da parte di Grav" - IMAGES_DEBUG: "Debug immagini" - IMAGES_DEBUG_HELP: "Mostra un overlay sopra le immagini riportante ad esempio la densità di pixel" - UPLOAD_LIMIT: "Limite di upload dei file" - UPLOAD_LIMIT_HELP: "Imposta la dimensione di massimo upload dei file, in byte (0 = illimitato)" - ENABLE_MEDIA_TIMESTAMP: "Abilita timestamps sui media" - ENABLE_MEDIA_TIMESTAMP_HELP: "Aggiunge un identificativo basato sulla data di ultima modifica di ogni media file" - SESSION: "Sessione" - SESSION_ENABLED_HELP: "Abilita il supporto alle sessioni in Grav" - TIMEOUT: "Timeout" - TIMEOUT_HELP: "Imposta il timeout di sessione, espresso in secondi" - SESSION_NAME_HELP: "Indentificatore usato per formare il nome del cookie di sessione" - ABSOLUTE_URLS: "URL assoluti" - ABSOLUTE_URLS_HELP: "URL assoluti o relativi per `base_url`" - PARAMETER_SEPARATOR: "Separatore dei parametri" - PARAMETER_SEPARATOR_HELP: "Separatore dei parametri passati, che può essere cambiato per Apache su Windows" - TASK_COMPLETED: "Operazione completata" - EVERYTHING_UP_TO_DATE: "Tutto aggiornato" - UPDATES_ARE_AVAILABLE: "aggiornamenti disponibili" - IS_AVAILABLE_FOR_UPDATE: "è disponibile per aggiornamento" - IS_NOW_AVAILABLE: "è ora disponibile" - CURRENT: "Corrente" - UPDATE_GRAV_NOW: "Aggiorna Grav adesso" - GRAV_SYMBOLICALLY_LINKED: "Grav è linkato simbolicamente, non è possibile aggiornare da qui" - UPDATING_PLEASE_WAIT: "Aggiornando... attendi per favore, sto scaricando" - OF_THIS: "di questo" - OF_YOUR: "del tuo" - HAVE_AN_UPDATE_AVAILABLE: "ha un aggiornamento disponibile" - SAVE_AS: "Salva come" - MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_DESC: "Sicuro di voler cancellare questa pagina? Se la pagina è tradotta in altre lingue, tali lingue verranno preservate e dovranno essere cancellate a parte. Altrimenti verrà cancellata la pagina e tutte le sottopagine. Questa azione non può essere annullata." - AND: "e" - UPDATE_AVAILABLE: "Aggiornamento disponibile" - METADATA_KEY: "Key (e.g. 'Keywords')" - METADATA_VALUE: "Value (e.g. 'Blog, Grav')" - USERNAME_HELP: "Il nome utente deve essere compreso tra 3 e 16 caratteri, composti da lettere minuscole, numeri, trattini o il carattere di sottolineatura. Lettere maiuscole, spazi e caratteri speciali non sono consentiti" - FULLY_UPDATED: "Tutto aggiornato" - SAVE_LOCATION: "Salvato in" - PAGE_FILE: "Pagina File" - PAGE_FILE_HELP: "Nome pagina per il file e visualizza come template predefinita per questa pagina" - NO_USER_ACCOUNTS: "Nessun utente trovato, per cortesia creane uno prima..." - REDIRECT_TRAILING_SLASH: "Redirect trailing slash" - REDIRECT_TRAILING_SLASH_HELP: "Eseguire un redirect 301 piuttosto che utilizzare la gestione delle URI." - DEFAULT_DATE_FORMAT: "Formato data pagina" - DEFAULT_DATE_FORMAT_HELP: "Formato data della pagina utilizzata da Grav. Come impostazione predefinita Grav cerca di utilizzare il tuo formato data, oppure puoi utilizzare un formato personalizzato seguendo la sintassi di PHP (esempio: Y-m-d H:i)" - DEFAULT_DATE_FORMAT_PLACEHOLDER: "Rileva automaticamente se vuoto" - IGNORE_FILES: "Ignora i files" - IGNORE_FILES_HELP: "Files da ignorare quando le pagine vengono processate" - IGNORE_FOLDERS: "Ignora le cartelle" - IGNORE_FOLDERS_HELP: "Cartelle ignorate quando le pagine vengono processate" - HTTP_ACCEPT_LANGUAGE: "Importa la lingua dal Browser" - HTTP_ACCEPT_LANGUAGE_HELP: "Si può scegliere di tentare di impostare la lingua sulla base del tag utilizzato in `http_accept_language` nel browser" - OVERRIDE_LOCALE: "Sovrascrivi locale" - OVERRIDE_LOCALE_HELP: "Sovrascrivi l'impostazione locale in PHP basato sulla tua lingua corrente" - REDIRECT: "Pagina di reindirizzamento" - REDIRECT_HELP: "Inserisci la route alla pagina oppure un URL esterno per questa pagina. Esempio: `/some/route` or `http://somesite.com`" - PLUGIN_STATUS: "Stato plugin" - -de: - PLUGIN_ADMIN: - ADMIN_BETA_MSG: "Dies ist eine Beta-Version! Benutzung auf eigene Gefahr..." - ADMIN_REPORT_ISSUE: "Fehler gefunden? Bitte melden Sie ihn auf GitHub." - EMAIL_FOOTER: "Powered by Grav - The Modern Flat File CMS" - LOGIN_BTN: "Login" - LOGIN_BTN_FORGOT: "Passwort vergessen" - LOGIN_BTN_RESET: "Passwort zurücksetzen" - LOGIN_BTN_SEND_INSTRUCTIONS: "Neues Passwort anfordern" - LOGIN_LOGGED_IN: "Anmeldung erfolgreich" - LOGIN_FAILED: "Anmeldung fehlgeschlagen" - LOGGED_OUT: "Sie wurden abgemeldet" - RESET_LINK_EXPIRED: "Der Link zum Zurücksetzen Ihres Passwortes ist abgelaufen, bitte probieren Sie es erneut" - RESET_PASSWORD_RESET: "Das Passwort wurde zurückgesetzt" - RESET_INVALID_LINK: "Der Link zum Zurücksetzen Ihres Passwortes ist ungültig, bitte probieren Sie es erneut" - FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Anweisungen zum Zurücksetzen des Passwortes wurden an %s gesendet" - FORGOT_FAILED_TO_EMAIL: "Anweisungen zum Zurücksetzen des Passwortes konnten nicht versendet werden, bitte probieren Sie es erneut" - FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Das Passwort für %s kann nicht geändert werden, da keine E-Mail-Adresse hinterlegt ist" - FORGOT_USERNAME_DOES_NOT_EXIST: "Es existiert kein Benutzer mit dem Namen %s" - FORGOT_EMAIL_NOT_CONFIGURED: "Passwort konnte nicht zurückgesetzt werden, da diese Seite nicht zum Versenden von E-Mails konfiguriert worden ist" - FORGOT_EMAIL_SUBJECT: "Zurücksetzen des Passwortes von %s" - FORGOT_EMAIL_BODY: "

Passwort zurücksetzen

Hallo %1$s,

Auf %4$s wurde die Zurücksetzung Ihres Passwortes angefordert.


Klicken Sie hier um Ihr Passwort zurückzusetzen.

Alternativ können Sie auch die folgende Adresse in die Adresszeile Ihres Browsers kopieren:

%2$s


Viele Grüße,

%3$s

" - MANAGE_PAGES: "Seiten verwalten" - CONFIGURATION: "Konfiguration" - PAGES: "Seiten" - PLUGINS: "Plugins" - PLUGIN: "Plugin" - THEMES: "Themes" - LOGOUT: "Logout" - BACK: "Zurück" - ADD_PAGE: "Seite hinzufügen" - ADD_MODULAR: "Modulare Seite hinzufügen" - MOVE: "Verschieben" - DELETE: "Löschen" - SAVE: "Speichern" - NORMAL: "Normal" - EXPERT: "Expertenansicht" - EXPAND_ALL: "Alle ausklappen" - COLLAPSE_ALL: "Alle einklappen" - ERROR: "Fehler" - CLOSE: "Schließen" - CANCEL: "Abbrechen" - CONTINUE: "Weiter" - MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "Bestätigung erforderlich" - MODAL_CHANGED_DETECTED_TITLE: "Änderungen erkannt" - MODAL_CHANGED_DETECTED_DESC: "Einige Änderungen wurden noch nicht gespeichert. Wollen Sie diese Seite wirklich verlassen?" - MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Bestätigung erforderlich" - MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Wollen Sie diese Datei wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden." - ADD_FILTERS: "Filter hinzufügen" - SEARCH_PAGES: "Seiten durchsuchen" - VERSION: "Version" - WAS_MADE_WITH: "Erstellt mit" - BY: "Von" - UPDATE_THEME: "Update Theme" - UPDATE_PLUGIN: "Update Plugin" - OF_THIS_THEME_IS_NOW_AVAILABLE: "dieses Themes ist verfügbar" - OF_THIS_PLUGIN_IS_NOW_AVAILABLE: "dieses Plugins ist verfügbar" - AUTHOR: "Autor" - HOMEPAGE: "Homepage" - DEMO: "Demo" - BUG_TRACKER: "Bug Tracker" - KEYWORDS: "Schlagwörter" - LICENSE: "Lizenz" - DESCRIPTION: "Beschreibung" - README: "Readme" - REMOVE_THEME: "Theme löschen" - INSTALL_THEME: "Theme installieren" - THEME: "Theme" - BACK_TO_THEMES: "Zurück zu den Themes" - BACK_TO_PLUGINS: "Zurück zu den Plugins" - CHECK_FOR_UPDATES: "Updates suchen" - ADD: "Hinzufügen" - CLEAR_CACHE: "Cache leeren" - CLEAR_CACHE_ALL_CACHE: "Alle Caches" - CLEAR_CACHE_ASSETS_ONLY: "Nur Assets" - CLEAR_CACHE_IMAGES_ONLY: "Nur Bilder" - CLEAR_CACHE_CACHE_ONLY: "Nur Cache" - DASHBOARD: "Dashboard" - UPDATES_AVAILABLE: "Updates verfügbar" - DAYS: "Tage" - UPDATE: "Update" - BACKUP: "Backup" - STATISTICS: "Statistik" - TODAY: "Heute" - WEEK: "Woche" - MONTH: "Monat" - LATEST_PAGE_UPDATES: "Zuletzt bearbeitete Seiten" - MAINTENANCE: "Wartung" - UPDATED: "Aktualisiert" - MON: "Mo" - TUE: "Di" - WED: "Mi" - THU: "Do" - FRI: "Fr" - SAT: "Sa" - SUN: "So" - COPY: "Kopieren" - EDIT: "Bearbeiten" - CREATE: "Erstellen" - GRAV_ADMIN: "Grav Admin" - GRAV_OFFICIAL_PLUGIN: "Offizielles Grav Plugin" - GRAV_OFFICIAL_THEME: "Offizieller Grav Theme" - PLUGIN_SYMBOLICALLY_LINKED: "Dieses Plugin basiert auf einer symbolischen Verknüpfung. Updates werden daher nicht erkannt." - THEME_SYMBOLICALLY_LINKED: "Dieser Theme basiert auf einer symbolischen Verknüpfung. Updates werden daher nicht erkannt." - REMOVE_PLUGIN: "Plugin entfernen" - INSTALL_PLUGIN: "Plugin installieren" - AVAILABLE: "Verfügbar" - INSTALLED: "Installiert" - INSTALL: "Installieren" - ACTIVE_THEME: "Ausgewählter Theme" - SWITCHING_TO: "Wechseln zu" - SWITCHING_TO_DESCRIPTION: "Durch das Wechseln des Themes kann nicht garantiert werden, dass das Layout aller Seiten unterstützt wird. Daher können beim Aufrufen der Seiten Fehler entstehen." - SWITCHING_TO_CONFIRMATION: "Fortfahren und Theme wechseln" - CREATE_NEW_USER: "Neuen Benutzer erstellen" - REMOVE_USER: "Benutzer entfernen" - ACCESS_DENIED: "Zugriff verweigert" - ACCOUNT_NOT_ADMIN: "Ihr Account verfügt über keine Administrationsberechtigungen" - PHP_INFO: "PHP Info" - INSTALLER: "Installer" - AVAILABLE_THEMES: "Verfügbare Themes" - AVAILABLE_PLUGINS: "Verfügbare Plugins" - INSTALLED_THEMES: "Installierte Themes" - INSTALLED_PLUGINS: "Installierte Plugins" - BROWSE_ERROR_LOGS: "Error Logs anzeigen" - SITE: "Seite" - INFO: "Info" - SYSTEM: "System" - USER: "Benutzer" - ADD_ACCOUNT: "Benutzer hinzufügen" - SWITCH_LANGUAGE: "Sprache wechseln" - SUCCESSFULLY_ENABLED_PLUGIN: "Plugin erfolgreich aktiviert" - SUCCESSFULLY_DISABLED_PLUGIN: "Plugin erfolgreich deaktiviert" - SUCCESSFULLY_CHANGED_THEME: "Standard Theme erfolgreich geändert" - INSTALLATION_FAILED: "Installation fehlgeschlagen" - INSTALLATION_SUCCESSFUL: "Installation erfolgreich" - SUCCESSFULLY_SAVED: "Speichern erfolgreich" - SUCCESSFULLY_COPIED: "Kopieren erfolgreich" - REORDERING_WAS_SUCCESSFUL: "Neuanordnung erfolgreich" - SUCCESSFULLY_DELETED: "Erfolgreich gelöscht" - SUCCESSFULLY_SWITCHED_LANGUAGE: "Sprache erfolgreich gewechselt" - INSUFFICIENT_PERMISSIONS_FOR_TASK: "Sie haben nicht ausreichende Berechtigungen für diese Aktion" - CACHE_CLEARED: "Cache geleert" - METHOD: "Methode" - ERROR_CLEARING_CACHE: "Fehler beim leeren des Cache" - AN_ERROR_OCCURRED: "Ein Fehler ist aufgetreten" - YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: "Ihr Backup steht zum Download bereit" - DOWNLOAD_BACKUP: "Backup herunterladen" - PAGES_FILTERED: "Seiten sortiert" - NO_PAGE_FOUND: "Keine Seite gefunden" - INVALID_PARAMETERS: "Ungültige Eingabe" - NO_FILES_SENT: "Keine Dateien übertragen" - EXCEEDED_FILESIZE_LIMIT: "Maximale Dateigröße überschritten" - UNKNOWN_ERRORS: "Unbekannte Fehler" - EXCEEDED_GRAV_FILESIZSE_LIMIT: "Maximale Grav Dateigröße überschritten." - UNSUPPORTED_FILE_TYPE: "Dateityp nicht unterstützt" - FAILED_TO_MOVE_UPLOADED_FILE: "Hochgeladene Datei konnte nicht verschoben werden." - FILE_UPLOADED_SUCCESSFULLY: "Datei erfolgreich hochgeladen" - FILE_DELETED: "Datei gelöscht" - FILE_COULD_NOT_BE_DELETED: "Datei konnte nicht gelöscht werden" - FILE_NOT_FOUND: "Datei nicht gefunden" - NO_FILE_FOUND: "Keine Datei gefunden" - GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "Grav wurde erfolgreich aktualisiert auf" - GRAV_UPDATE_FAILED: "Grav Update fehlgeschlagen" - EVERYTHING_UPDATED: "Alles aktualisiert" - UPDATES_FAILED: "Updates fehlgeschlagen" - AVATAR_BY: "Avatar von" - LAST_BACKUP: "Letztes Backup" - FULL_NAME: "Voller Name" - USERNAME: "Benutzername" - EMAIL: "E-Mail" - PASSWORD: "Passwort" - TITLE: "Titel" - LANGUAGE: "Sprache" - ACCOUNT: "Benutzer" - EMAIL_VALIDATION_MESSAGE: "Muss eine gültige E-Mail Adresse sein" - PASSWORD_VALIDATION_MESSAGE: "Das Passwort muss mindestens eine Zahl, einen Groß- und einen Kleinbuchstaben enthalten sowie mindestens 8 Zeichen lang sein." - LANGUAGE_HELP: "Setzen der bevorzugten Sprache" - MEDIA: "Medien" - DEFAULTS: "Standards" - SITE_TITLE: "Seitentitel" - SITE_TITLE_PLACEHOLDER: "Seitentitel" - SITE_TITLE_HELP: "Titel der Seite. Wird häufig von Themes verwendet." - DEFAULT_AUTHOR: "Hauptautor" - DEFAULT_AUTHOR_HELP: "Name des Hauptautors, häufig verwendet in Themes und Inhalten" - DEFAULT_EMAIL: "Haupt-E-Mail" - DEFAULT_EMAIL_HELP: "Standard E-Mail Adresse, die in Plugins und Themes verwendet wird" - TAXONOMY_TYPES: "Tag-Typen" - TAXONOMY_TYPES_HELP: "Wenn sie verschiedene Tag-Typen verwenden wollen, müssen Sie hier die verschiedenen Typen angeben." - PAGE_SUMMARY: "Seitenzusammenfassung" - ENABLED: "Aktiviert" - ENABLED_HELP: "Aktiviert die Seitenzusammenfasung (die Seitenzusammenfassung entspricht dem Inhalt der Seite)" - 'YES': "Ja" - 'NO': "Nein" - SUMMARY_SIZE: "Zusammenfassungslänge" - SUMMARY_SIZE_HELP: "Länge der Zusammenfassung in Buchstaben" - FORMAT: "Format" - FORMAT_HELP: "kurz = Kürzung der Zusammenfassung bis zum Trennzeichen oder der Zusammenfassungslänge; lang = Trennzeichen wird ignoriert" - SHORT: "Kurz" - LONG: "Lang" - DELIMITER: "Trennzeichen" - DELIMITER_HELP: "Das Trennzeichen für die Zusammenfassung (Standard '===')" - METADATA: "Metadaten" - METADATA_HELP: "Standardmetadaten, die auf jeder Seite angezeigt werden, es sei denn sie werden von einer Seite überschrieben" - NAME: "Name" - CONTENT: "Inhalt" - REDIRECTS_AND_ROUTES: "Weiterleitungen & Routen" - CUSTOM_REDIRECTS: "Eigene Weiterleitungen" - CUSTOM_REDIRECTS_HELP: "Routen, die auf andere Seiten weiterleiten. Standard Regex Ersetzungen sind erlaubt" - CUSTOM_REDIRECTS_PLACEHOLDER_KEY: "/your/alias" - CUSTOM_REDIRECTS_PLACEHOLDER_VALUE: "/your/redirect" - CUSTOM_ROUTES: "Eigene Routen" - CUSTOM_ROUTES_HELP: "Routen, die auf andere Seiten verweisen. Standard Regex Ersetzungen sind erlaubt" - CUSTOM_ROUTES_PLACEHOLDER_KEY: "/your/alias" - CUSTOM_ROUTES_PLACEHOLDER_VALUE: "/your/route" - FILE_STREAMS: "Datei Streams" - DEFAULT: "Standard" - PAGE_MEDIA: "Seitenmedien" - OPTIONS: "Optionen" - PUBLISHED: "Veröffentlicht" - PUBLISHED_HELP: "Standardmäßig ist eine Seite veröffentlicht, es sei denn sie wird explizit auf nicht veröffentlicht gesetzt, das Veröffentlichungsdatum liegt in der Zukunft oder das Ablaufdatum wurde erreicht." - DATE: "Datum" - DATE_HELP: "Die Datumsangabe erlaubt es diese Seite mit einem Datum zu versehen." - PUBLISHED_DATE: "Veröffentlichungsdatum" - PUBLISHED_DATE_HELP: "Datum ab dem die Seite automatisch veröffentlicht wird." - UNPUBLISHED_DATE: "Ablaufdatum" - UNPUBLISHED_DATE_HELP: "Datum ab dem die Veröffentlichung der Seite zurückgenommen wird." - ROBOTS: "Robots" - TAXONOMIES: "Tags" - TAXONOMY: "Tag" - ADVANCED: "Erweitert" - SETTINGS: "Einstellungen" - FOLDER_NUMERIC_PREFIX: "Numerischer Ordnerprefix" - FOLDER_NUMERIC_PREFIX_HELP: "Numerischer Prefix der die Reihenfolge und Sichtbarkeit der Seiten beeinflusst" - FOLDER_NAME: "Ordnername" - FOLDER_NAME_HELP: "Name des Ordners, der für diese Seite angelegt werden sollen" - PARENT: "Übergeordnet" - DEFAULT_OPTION_ROOT: "- Ursprung -" - DEFAULT_OPTION_SELECT: "- Auswählen -" - DISPLAY_TEMPLATE: "Template anzeigen" - DISPLAY_TEMPLATE_HELP: "Der Seitentyp der zur Wahl des richtigen Twig Templates verwendet wird." - BODY_CLASSES: "Body Klassen" - ORDERING: "Sortierung" - PAGE_ORDER: "Seitensortierung" - OVERRIDES: "Überschreibungen" - MENU: "Menü" - MENU_HELP: "Beschriftung zur Anzeige im Menu. Als Standard wird der Titel genutzt." - SLUG: "Slug" - SLUG_HELP: "Der Slug bestimmt den Namen der Seite innerhalb der URL." - SLUG_VALIDATE_MESSAGE: "Ein Slug darf nur auf Kleinbuchstaben und Bindestrichen bestehen" - PROCESS: "Verarbeitung" - PROCESS_HELP: "Steuert die Verarbeitung einer Seite. Sollte pro Seite und nicht global gesetzt werden." - DEFAULT_CHILD_TYPE: "Standardtyp für Unterseiten" - USE_GLOBAL: "Globale Einstellungen verwenden" - ROUTABLE: "Aufrufbar" - ROUTABLE_HELP: "Diese Seite kann mit einer URL aufgerufen werden" - CACHING: "Caching" - VISIBLE: "Sichtbar" - VISIBLE_HELP: "Steuert die Sichtbarkeit einer Seite im Menu." - DISABLED: "Deaktiviert" - ITEMS: "Items" - ORDER_BY: "Sortieren" - FOLDER: "Ordner" - ORDER: "Sortierung" - ASCENDING: "Aufsteigend" - DESCENDING: "Absteigend" - ADD_MODULAR_CONTENT: "Modularen Inhalt hinzufügen" - PAGE_TITLE: "Seitentitel" - PAGE_TITLE_HELP: "Titel der Seite" - PAGE: "Seite" - MODULAR_TEMPLATE: "Modulares Template" - FRONTMATTER: "Frontmatter" - FILENAME: "Dateiname" - PARENT_PAGE: "Übergeordnete Seite" - HOME_PAGE: "Startseite" - HOME_PAGE_HELP: "Seite die von Grav als Startseite genutzt werden soll" - DEFAULT_THEME: "Standard Theme" - DEFAULT_THEME_HELP: "Setzt den Standard Theme von Grav (Standard ist Antimatter)" - TIMEZONE: "Zeitzone" - TIMEZONE_HELP: "Überschreibt die Zeitzone des Servers" - SHORT_DATE_FORMAT: "Kurzes Datumsformat" - SHORT_DATE_FORMAT_HELP: "Setzt das von Themes genutzte Kurzdatumsformat" - LONG_DATE_FORMAT: "Langes Datumsformat" - LONG_DATE_FORMAT_HELP: "Setzt das von Themes genutzte Langdatumsformat" - DEFAULT_ORDERING: "Standard Sortierung" - DEFAULT_ORDERING_HELP: "Seiten in einer Liste werden in der Standard Sortierung angezeigt, falls diese nicht überschrieben wird." - DEFAULT_ORDERING_DEFAULT: "Standard - basierend auf dem Ordnernamen" - DEFAULT_ORDERING_FOLDER: "Ordner - basierend auf dem Ordnernamen ohne Prefix" - DEFAULT_ORDERING_TITLE: "Titel - basieren auf dem Seitentitel" - DEFAULT_ORDERING_DATE: "Datum - basierend auf dem Datum der Seite" - DEFAULT_ORDER_DIRECTION: "Standard Sortierrichtung" - DEFAULT_ORDER_DIRECTION_HELP: "Sortierrichtung von Seiten in einer Liste" - DEFAULT_PAGE_COUNT: "Standard Seitenzahl" - DEFAULT_PAGE_COUNT_HELP: "Maximale Anzahl von Seiten in einer Liste" - DATE_BASED_PUBLISHING: "Datumsbasierte Veröffentlichungen" - DATE_BASED_PUBLISHING_HELP: "Seiten mit Veröffentlichungs- und Ablaufdatum automatisch veröffentlichen oder zurückziehen" - EVENTS: "Events" - EVENTS_HELP: "Von Grav gesteuerte Events aktivieren. Ein Deaktivieren kann Plugins in ihrer Funktionsweise stören." - REDIRECT_DEFAULT_ROUTE: "Weiterleiten auf Standardroute" - REDIRECT_DEFAULT_ROUTE_HELP: "Automatisches Weiterleiten auf die Route einer Seite" - LANGUAGES: "Sprachen" - SUPPORTED: "Untersützt" - SUPPORTED_HELP: "Durch Kommata getrennte Liste mit 2-stelligen Sprachcodes (zum Beispiel 'en,fr,de')" - TRANSLATIONS_ENABLED: "Übersetzungen aktivieren" - TRANSLATIONS_ENABLED_HELP: "Aktiviert Übersetzungen in Grav, Plugins und Erweiterungen" - TRANSLATIONS_FALLBACK: "Fallbacksprache" - TRANSLATIONS_FALLBACK_HELP: "Falls Übersetzungen in einer Sprache nicht vorhanden sind, wird auf diese Sprache zurückgegriffen" - ACTIVE_LANGUAGE_IN_SESSION: "Aktive Sprache in Session speichern" - ACTIVE_LANGUAGE_IN_SESSION_HELP: "Speichert die aktive Sprache in der Sessin" - HTTP_HEADERS: "HTTP Headers" - EXPIRES: "Läuft ab" - EXPIRES_HELP: "Ändert den Expires-Header (Cache-Ablaufdatum). Angabe in Sekunden" - LAST_MODIFIED: "Zuletzt geändert" - LAST_MODIFIED_HELP: "Setzt das Datum der letzten Änderung um Caching zu optimieren" - ETAG: "ETag" - ETAG_HELP: "Setzt den ETag-Header um Änderungen der Seite für Proxies erkenntlich zu machen" - VARY_ACCEPT_ENCODING: "Vary accept encoding" - VARY_ACCEPT_ENCODING_HELP: "Setzt den `Vary: Accept Encoding`-Header um Proxies und CDNs zu optimieren" - MARKDOWN_EXTRA_HELP: "Aktiviert Markdown Extra Unterstützung - https://michelf.ca/projects/php-markdown/extra/" - AUTO_LINE_BREAKS: "Automatische Zeilenumbrüche" - AUTO_LINE_BREAKS_HELP: "Aktiviert Unterstützung für automatische Zeilenumbrüche in Markdown" - AUTO_URL_LINKS: "URLs zu Links verwandeln" - AUTO_URL_LINKS_HELP: "Verwandelt jede URL in einen HTML-Link" - ESCAPE_MARKUP: "HTML Ausgabe unterdrücken" - ESCAPE_MARKUP_HELP: "Ersetzt Markup-Tags durch HTML-Zeichen" - CACHING_HELP: "Globaler an/aus Schalter um Caching in Grav zu aktivieren/deaktivieren" - CACHE_CHECK_METHOD: "Cacheprüfungsmethode" - CACHE_CHECK_METHOD_HELP: "Methode die Grav verwendet um den Cache zu prüfen." - CACHE_DRIVER: "Cache-Treiber" - CACHE_DRIVER_HELP: "Cachetreiber den Grav verwendet um Dateien vorzuhalten. 'Automatisch' versucht selbstständig den besten Treiber zu ermitteln" - CACHE_PREFIX: "Cache-Prefix" - CACHE_PREFIX_HELP: "Cacheprefix der verwendet wird um Dateien zu cachen. Sollte nicht verändert werden, wenn man nicht genau weiß, was man tut" - CACHE_PREFIX_PLACEHOLDER: "Abgeleitet von der Basis-URL (überschreiben durch einen zufälligen Text)" - LIFETIME: "Cache-Lebensdauer" - LIFETIME_HELP: "Setzt die Dauer des Caches in Sekunden. 0 = unendlich" - GZIP_COMPRESSION: "Gzip-Komprimierung" - GZIP_COMPRESSION_HELP: "Aktiviert Gzip-Komprimierung um Grav schneller an Browser senden zu können." - TWIG_TEMPLATING: "Twig Templates" - TWIG_CACHING: "Twig caching" - TWIG_CACHING_HELP: "Twig Cache-Einstellungen. Sollte aktiviert bleiben um die beste Performance zu gewährleisten" - TWIG_DEBUG: "Twig debug" - TWIG_DEBUG_HELP: "Deaktiviert die Twig-Debug-Extension" - DETECT_CHANGES: "Änderungen erkennen" - DETECT_CHANGES_HELP: "Twig erkennt automatisch, wenn Themes geändert werden und baut den Cache neu auf" - AUTOESCAPE_VARIABLES: "Variablen automatisch escapen" - AUTOESCAPE_VARIABLES_HELP: "Alle Veriablen escapen. Ihre Seite könnte dadurch nicht korrekt angezeigt werden" - ASSETS: "Assets" - CSS_PIPELINE: "CSS pipeline" - CSS_PIPELINE_HELP: "Die CSS pipline fasst alle Ihre CSS Dateien in einer Einzigen Datei zusammen" - CSS_MINIFY: "CSS minify" - CSS_MINIFY_HELP: "Komprimiert ihre CSS Dateien nach dem pipelining" - CSS_MINIFY_WINDOWS_OVERRIDE: "CSS minify Windows" - CSS_MINIFY_WINDOWS_OVERRIDE_HELP: "Verwendet eine andere minify Version, die auf Windows-Betriebssystemen besser funktioniert" - CSS_REWRITE: "CSS rewrite" - CSS_REWRITE_HELP: "Ersetze alle relativen CSS URLs beim pipelining" - JAVASCRIPT_PIPELINE: "JavaScript pipeline" - JAVASCRIPT_PIPELINE_HELP: "Kombiniert alle JavaScript Dateien in eine einzige" - JAVASCRIPT_MINIFY: "JavaScript minify" - JAVASCRIPT_MINIFY_HELP: "Komprimiert die JavaScript Dateien nach dem pipelining" - ENABLED_TIMESTAMPS_ON_ASSETS: "Zeitstempel für assets" - ENABLED_TIMESTAMPS_ON_ASSETS_HELP: "Aktviert die Zeitstempel für assets" - COLLECTIONS: "Sammlungen" - ERROR_HANDLER: "Fehlerbehandlung" - DISPLAY_ERRORS: "Fehler Anzeigen" - DISPLAY_ERRORS_HELP: "Volle Backtrace-Error-Seite anzeigen" - LOG_ERRORS: "Fehler Speichern" - LOG_ERRORS_HELP: "Fehler im /logs Ordner speichern" - DEBUGGER: "Debugger" - DEBUGGER_HELP: "Aktiviert den Grav Debugger und die folgenden Einstellungen" - DEBUG_TWIG: "Debug Twig" - DEBUG_TWIG_HELP: "Twig Templates debuggen" - SHUTDOWN_CLOSE_CONNECTION: "Verbindung trennen" - SHUTDOWN_CLOSE_CONNECTION_HELP: "Trent die Verbindung vor dem Aufruf von onShutdown(). Deaktivieren für Debugging" - DEFAULT_IMAGE_QUALITY: "Standard Bildqualität" - DEFAULT_IMAGE_QUALITY_HELP: "Standardbilqualität bei der Veränderung von Bildern (85%)" - CACHE_ALL: "Alle Bilder cachen" - CACHE_ALL_HELP: "Alle Bilder, auch ohne Bearbeitung, im Grav Cache ablegen" - IMAGES_DEBUG: "Image Debug Wasserzeichen" - IMAGES_DEBUG_HELP: "Wasserzeichen mit der Auflösung der Bilder anzeigen um Retina-Displays zu testen" - UPLOAD_LIMIT: "Datei Upload Limit" - UPLOAD_LIMIT_HELP: "Maximale Dateigröße in Bytes (0 = ohne Beschränkung)" - ENABLE_MEDIA_TIMESTAMP: "Zeitstempel für Mediadateien" - ENABLE_MEDIA_TIMESTAMP_HELP: "Fügt jedem Bild einen Zeitstempel der letzten Bearbeitung hinzu" - SESSION: "Session" - SESSION_ENABLED_HELP: "Sessions in Grav aktivieren" - TIMEOUT: "Timeout" - TIMEOUT_HELP: "Session Timeout in Sekunden" - SESSION_NAME_HELP: "Name für den Session-Cookie" - ABSOLUTE_URLS: "Absolute URLs" - ABSOLUTE_URLS_HELP: "Absolute oder Relative Pfadangaben für `base_url`" - PARAMETER_SEPARATOR: "Parameter Trennzeichen" - PARAMETER_SEPARATOR_HELP: "Trennzeichen für Parameter in der URL" - TASK_COMPLETED: "Aufgabe erledigt" - EVERYTHING_UP_TO_DATE: "Keine Aktualisierungen verfügbar" - UPDATES_ARE_AVAILABLE: "Aktualisierungen verfügbar" - IS_AVAILABLE_FOR_UPDATE: "ist zur Aktualisierung verfügbar" - IS_NOW_AVAILABLE: "ist jetzt verfügbar" - CURRENT: "Aktuell" - UPDATE_GRAV_NOW: "Grav jetzt aktualisieren" - GRAV_SYMBOLICALLY_LINKED: "Grav ist symbolisch Verknüpft und kann daher nicht aktualisiert werden" - UPDATING_PLEASE_WAIT: "Update, ... bitte warten" - OF_THIS: "von diesem" - OF_YOUR: "von deinem" - HAVE_AN_UPDATE_AVAILABLE: "hat ein Update verfügbar" - SAVE_AS: "Speichern als" - MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_DESC: "Sind Sie sicher, dass Sie diese Seite und all deren Kinder löschen wollen? Wenn diese Seite noch in anderen Sprachen vorliegt, werden diese Übersetzungen behalten & müssen seperat gelöscht werden. Diese Aktion kann nicht rückgängig gemacht werden." - AND: "und" - UPDATE_AVAILABLE: "Aktualisierung verfügbar" - METADATA_KEY: "Schlüssel (z.B. 'Stichwort')" - METADATA_VALUE: "Wert (z.B. 'Blog, Grav')" - USERNAME_HELP: "Der Nutzername sollte 3 bis 16 Zeichen besitzen, inklusive kleiner Buchstaben, Nummern, Unterstrichen und Bindestrichen. Große Buchstaben, Leerzeichen und Spezialzeichen sind nicht erlaubt." - FULLY_UPDATED: "Vollständig aktualisiert" - SAVE_LOCATION: "Lokal speichern" - PLUGIN_STATUS: "Plugin Status" -ja: - PLUGIN_ADMIN: - ADMIN_BETA_MSG: "これはベータ版です! 自己責任で使用してください..." - ADMIN_REPORT_ISSUE: "問題を見つけましたか? GitHubで報告してください" - EMAIL_FOOTER: "Powered by Grav - The Modern Flat File CMS" - LOGIN_BTN: "ログイン" - LOGIN_BTN_FORGOT: "忘れた" - LOGIN_BTN_RESET: "パスワードリセット" - LOGIN_BTN_SEND_INSTRUCTIONS: "リセット命令を送信" - LOGIN_LOGGED_IN: "正常にログインしました" - LOGIN_FAILED: "ログイン失敗" - LOGGED_OUT: "ログアウトしました" - RESET_LINK_EXPIRED: "リセットリンクの有効期限が切れています。 再度お試しください" - RESET_PASSWORD_RESET: "パスワードはリセットされています" - RESET_INVALID_LINK: "無効リセットリンク使用されました。再試行してください" - FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "パスワードのリセット方法は、 %s にメールで送りました" - FORGOT_FAILED_TO_EMAIL: "メール送信に失​​敗しました。 しばらくしてからもう一度お試しください" - FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "%s のパスワードはリセットできません。 メールアドレスが設定されていません" - FORGOT_USERNAME_DOES_NOT_EXIST: "ユーザ名 %s というユーザは存在しません" - FORGOT_EMAIL_NOT_CONFIGURED: "パスワードはリセットできません。このサイトはメールを送る設定がされていません" - FORGOT_EMAIL_SUBJECT: "%s のパスワードリセットのリクエスト" - FORGOT_EMAIL_BODY: "

パスワードリセット

%1$s 様,

%4$s であなたのパスワードリセット要求がありました。


パスワードをリセットするには、このボタンをクリックしてください

または、次のURLをブラウザのアドレスバーにコピーしてください。:

%2$s


よろしくお願いします。

%3$s

" - MANAGE_PAGES: "ページ管理" - CONFIGURATION: "構成" - PAGES: "ページ" - PLUGINS: "プラグイン" - PLUGIN: "プラグイン" - THEMES: "テーマ" - LOGOUT: "ログアウト" - BACK: "戻る" - ADD_PAGE: "ページ追加" - ADD_MODULAR: "モジュラ追加" - MOVE: "移動" - DELETE: "削除" - SAVE: "保存" - NORMAL: "ノーマル" - EXPERT: "エキスパート" - EXPAND_ALL: "すべて展開" - COLLAPSE_ALL: "すべて折りたたむ" - ERROR: "エラー" - CLOSE: "閉じる" - CANCEL: "キャンセル" - CONTINUE: "続行" - MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "確認してください" - MODAL_CHANGED_DETECTED_TITLE: "変更があります" - MODAL_CHANGED_DETECTED_DESC: "変更を保存していません。 保存しなくてよろしいですか?" - MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "確認してください" - MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "このファイルを削除してよろしいですか? この操作は戻せません" - ADD_FILTERS: "フィルタ追加" - SEARCH_PAGES: "ページ検索" - WAS_MADE_WITH: "Was made with" - BY: "By" - UPDATE_THEME: "テーマ更新" - UPDATE_PLUGIN: "プラグイン更新" - OF_THIS_THEME_IS_NOW_AVAILABLE: "件のテーマで現在更新があります" - OF_THIS_PLUGIN_IS_NOW_AVAILABLE: "件のプラグインで現在更新があります" - VERSION: "バージョン" - AUTHOR: "作者" - HOMEPAGE: "ホームページ" - DEMO: "デモ" - BUG_TRACKER: "バグトラッカ" - KEYWORDS: "キーワード" - LICENSE: "ライセンス" - DESCRIPTION: "説明" - README: "README" - REMOVE_THEME: "テーマ削除" - INSTALL_THEME: "テーマ追加" - THEME: "テーマ" - BACK_TO_THEMES: "テーマに戻る" - BACK_TO_PLUGINS: "プラグインに戻る" - CHECK_FOR_UPDATES: "更新確認" - ADD: "追加" - CLEAR_CACHE: "キャッシュクリア" - CLEAR_CACHE_ALL_CACHE: "すべてのキャッシュ" - CLEAR_CACHE_ASSETS_ONLY: "アセットのみ" - CLEAR_CACHE_IMAGES_ONLY: "画像のみ" - CLEAR_CACHE_CACHE_ONLY: "キャッシュのみ" - DASHBOARD: "ダッシュボード" - UPDATES_AVAILABLE: "利用可能な更新" - DAYS: "日" - UPDATE: "更新" - BACKUP: "バックアップ" - STATISTICS: "統計" - TODAY: "今日" - WEEK: "週" - MONTH: "月" - LATEST_PAGE_UPDATES: "最近のページ更新" - MAINTENANCE: "メンテナンス" - UPDATED: "更新済" - MON: "月" - TUE: "火" - WED: "水" - THU: "木" - FRI: "金" - SAT: "土" - SUN: "日" - COPY: "コピー" - EDIT: "編集" - CREATE: "作成" - GRAV_ADMIN: "GRAV管理" - GRAV_OFFICIAL_PLUGIN: "GRAV公式プラグイン" - GRAV_OFFICIAL_THEME: "GRAV公式テーマ" - PLUGIN_SYMBOLICALLY_LINKED: "このプラグインはシンボリックリンクです。 更新は検出されません" - THEME_SYMBOLICALLY_LINKED: "このテーマはシンボリックリンクです。更新は検出されません" - REMOVE_PLUGIN: "プラグイン削除" - INSTALL_PLUGIN: "プラグイン追加" - AVAILABLE: "利用可能" - INSTALLED: "インストール済" - INSTALL: "インストール" - ACTIVE_THEME: "使用中のテーマ" - SWITCHING_TO: "切替" - SWITCHING_TO_DESCRIPTION: "別のテーマに切り替えることにより、 すべてのページレイアウトが保証されておらず、 ロードする際に潜在的なエラーを引き起こす場合があります" - SWITCHING_TO_CONFIRMATION: "テーマの切替を続けますか" - CREATE_NEW_USER: "新規​​ユーザ作成" - REMOVE_USER: "ユーザ削除" - ACCESS_DENIED: "アクセス拒否" - ACCOUNT_NOT_ADMIN: "あなたのアカウントは管理者権限を持っていません" - PHP_INFO: "PHP 情報" - INSTALLER: "インストーラ" - AVAILABLE_THEMES: "利用可能なテーマ" - AVAILABLE_PLUGINS: "利用可能なプラグイン" - INSTALLED_THEMES: "インストール済テーマ" - INSTALLED_PLUGINS: "インストール済プラグイン" - BROWSE_ERROR_LOGS: "エラーログを見る" - SITE: "サイト" - INFO: "情報" - SYSTEM: "システム" - USER: "ユーザ" - ADD_ACCOUNT: "アカウント追加" - SWITCH_LANGUAGE: "言語切替" - SUCCESSFULLY_ENABLED_PLUGIN: "正常にプラグインを有効化しました" - SUCCESSFULLY_DISABLED_PLUGIN: "正常にプラグインを削除しました" - SUCCESSFULLY_CHANGED_THEME: "正常にデフォルトテーマをを変更しました" - INSTALLATION_FAILED: "インストール失敗" - INSTALLATION_SUCCESSFUL: "インストール成功" - UNINSTALL_FAILED: "アンインストール失敗" - UNINSTALL_SUCCESSFUL: "アンインストール成功" - SUCCESSFULLY_SAVED: "正常に保存されました" - SUCCESSFULLY_COPIED: "正常にコピーされました" - REORDERING_WAS_SUCCESSFUL: "正常に並び替えされました" - SUCCESSFULLY_DELETED: "正常に削除されました" - SUCCESSFULLY_SWITCHED_LANGUAGE: "正常に言語切替されました" - INSUFFICIENT_PERMISSIONS_FOR_TASK: "タクスのための十分な権限を持っています" - CACHE_CLEARED: "キャッシュクリア" - METHOD: "メソッド" - ERROR_CLEARING_CACHE: "キャッシュクリアエラー" - AN_ERROR_OCCURRED: "エラーが発生しました" - YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: "バックアップダウンロードの準備ができています" - DOWNLOAD_BACKUP: "バックアップダウンロード" - PAGES_FILTERED: "ページフィルタ" - NO_PAGE_FOUND: "ページが見つかりません" - INVALID_PARAMETERS: "無効なパラメータ" - NO_FILES_SENT: "ファイルが送れません" - EXCEEDED_FILESIZE_LIMIT: "ファイルサイズの制限を超えています" - UNKNOWN_ERRORS: "未知のエラー" - EXCEEDED_GRAV_FILESIZSE_LIMIT: "Gravのファイルサイズの制限を超えています" - UNSUPPORTED_FILE_TYPE: "対応してないファイルの種類です" - FAILED_TO_MOVE_UPLOADED_FILE: "アップロードファイルの移動に失敗しました" - FILE_UPLOADED_SUCCESSFULLY: "正常にファイルがアップロードされました" - FILE_DELETED: "ファイルは削除されました" - FILE_COULD_NOT_BE_DELETED: "ファイルは削除できませんでした" - FILE_NOT_FOUND: "ファイルが見つかりません" - NO_FILE_FOUND: "ファイルが見つかりません" - GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "Gravは正常に更新されました" - GRAV_UPDATE_FAILED: "Gravは更新に失敗しました" - EVERYTHING_UPDATED: "すべて更新されました" - UPDATES_FAILED: "更新に失敗しました" - AVATAR_BY: "Avatar by" - LAST_BACKUP: "最終バックアップ" - FULL_NAME: "名前" - USERNAME: "ユーザ名" - EMAIL: "Eメール" - PASSWORD: "パスワード" - TITLE: "タイトル" - LANGUAGE: "言語" - ACCOUNT: "アカウント" - EMAIL_VALIDATION_MESSAGE: "有効なメールアドレスでなければいけません" - PASSWORD_VALIDATION_MESSAGE: "パスワードは少なくとも数字・大文字・小文字を含む8文字以上である必要があります" - LANGUAGE_HELP: "好きな言語を設定してください" - MEDIA: "メディア" - DEFAULTS: "デフォルト" - SITE_TITLE: "サイト名" - SITE_TITLE_PLACEHOLDER: "長いサイト名" - SITE_TITLE_HELP: "サイト名はテーマで使用されます" - DEFAULT_AUTHOR: "著者名" - DEFAULT_AUTHOR_HELP: "著者名はテーマやページコンテンツで使用されます" - DEFAULT_EMAIL: "Eメール" - DEFAULT_EMAIL_HELP: "Eメールはテーマやベージで参照されます" - TAXONOMY_TYPES: "タクソノミ" - TAXONOMY_TYPES_HELP: "ページで使用したいタクソノミはここで定義する必要があります" - PAGE_SUMMARY: "ページ要約" - ENABLED: "有効" - ENABLED_HELP: "ページ要約を有効にします (要約はページコンテンツと同じです)" - 'YES': "はい" - 'NO': "いいえ" - SUMMARY_SIZE: "要約サイズ" - SUMMARY_SIZE_HELP: "要約する文字数" - FORMAT: "フォーマット" - FORMAT_HELP: "ショート = 最初に使用した区切り文字、 またはサイズ: ロング = 区切り文字は無視されます" - SHORT: "ショート" - LONG: "ロング" - DELIMITER: "区切り文字" - DELIMITER_HELP: "要約で使用する区切り文字 (デフォルト '===')" - METADATA: "メタデータ" - METADATA_HELP: "デフォルトのメタデータは、 ページで指定しない限りすべてのページで使用されます" - METADATA_KEY: "キー (例 'Keywords')" - METADATA_VALUE: "値 (例 'Blog, Grav')" - USERNAME_HELP: "ユーザ名は、数字・小文字・アンダーバー・ハイフンを含む3〜16文字にしてください。大文字、スペース、および特殊文字は使えません" - NAME: "キー" - CONTENT: "コンテンツ" - REDIRECTS_AND_ROUTES: "リダイレクト & ルート" - CUSTOM_REDIRECTS: "カスタムリダイレクト" - CUSTOM_REDIRECTS_HELP: "他のページにリダイレクトします。 標準的な正規表現が使えます" - CUSTOM_REDIRECTS_PLACEHOLDER_KEY: "/your/alias" - CUSTOM_REDIRECTS_PLACEHOLDER_VALUE: "/your/redirect" - CUSTOM_ROUTES: "カスタムルート" - CUSTOM_ROUTES_HELP: "他のページにエイリアスします。 標準的な正規表現が使えます" - CUSTOM_ROUTES_PLACEHOLDER_KEY: "/your/alias" - CUSTOM_ROUTES_PLACEHOLDER_VALUE: "/your/route" - FILE_STREAMS: "ファイルストリーム" - DEFAULT: "デフォルト" - PAGE_MEDIA: "ページメディア" - OPTIONS: "オプション" - PUBLISHED: "公開" - PUBLISHED_HELP: "通常、 ページは次の日付を設定しない限り公開されます: 偽値、 先の公開日、 過ぎた非公開日" - DATE: "日付" - DATE_HELP: "日付は、このページの日付を具体的に設定することができます" - PUBLISHED_DATE: "公開日" - PUBLISHED_DATE_HELP: "自動的に公開する日付を設定できます" - UNPUBLISHED_DATE: "非公開日" - UNPUBLISHED_DATE_HELP: "自動的に非公開する日付を設定できます" - ROBOTS: "ロボット" - TAXONOMIES: "タクソノミ" - TAXONOMY: "タクソノミ" - ADVANCED: "高度" - SETTINGS: "設定" - FOLDER_NUMERIC_PREFIX: "フォルダ数値プレフィックス" - FOLDER_NUMERIC_PREFIX_HELP: "数値プレフィックスは手動で順序を変更でき、 視認性を上げるフォルダの先頭につく数値" - FOLDER_NAME: "フォルダ名" - FOLDER_NAME_HELP: "このページが入るフォルダ名" - PARENT: "親" - DEFAULT_OPTION_ROOT: "- Root -" - DEFAULT_OPTION_SELECT: "- Select -" - DISPLAY_TEMPLATE: "表示テンプレート" - DISPLAY_TEMPLATE_HELP: "ページを変換するtwigテンプレートタイプ" - BODY_CLASSES: "ボディクラス" - ORDERING: "順序" - PAGE_ORDER: "ページ順序" - OVERRIDES: "上書き" - MENU: "メニュー" - MENU_HELP: "メニューに使われる文字。 設定しない場合、 タイトルが使われます" - SLUG: "スラッグ" - SLUG_HELP: "スラッグは、このページのURLを位的に設定できます" - SLUG_VALIDATE_MESSAGE: "スラッグは小文字英数字とハイフンのみ使用できます" - PROCESS: "処理方法" - PROCESS_HELP: "ページの処理方法を設定します。 ページごとではなく、全体を設定することができます" - DEFAULT_CHILD_TYPE: "標準 Child Type" - USE_GLOBAL: "全体設定を使う" - ROUTABLE: "ルーティング可能" - ROUTABLE_HELP: "URLでアクセス可能な場合" - CACHING: "キャッシュ" - VISIBLE: "可視" - VISIBLE_HELP: "ページがナビゲーションに表示されるかを設定します" - DISABLED: "無効" - ITEMS: "アイテム" - ORDER_BY: "順序方法" - ORDER: "順序" - FOLDER: "フォルダ" - ASCENDING: "昇順" - DESCENDING: "降順" - ADD_MODULAR_CONTENT: "モジュラーコンテンツ追加" - PAGE_TITLE: "ページ名" - PAGE_TITLE_HELP: "このページのタイトル" - PAGE: "ページ" - MODULAR_TEMPLATE: "モジュラテンプレート" - FRONTMATTER: "Frontmatter" - FILENAME: "ファイル名" - PARENT_PAGE: "親ページ" - HOME_PAGE: "ホームページ" - HOME_PAGE_HELP: "Gravがデフォルトのライティングページとして使用するページ" - DEFAULT_THEME: "デフォルトテーマ" - DEFAULT_THEME_HELP: "Gravが使用するデフォルトのテーマを設定します (デフォルトは Antimatter)" - TIMEZONE: "タイムゾーン" - TIMEZONE_HELP: "サーバのタイムゾーンを上書きします" - SHORT_DATE_FORMAT: "短い日付形式" - SHORT_DATE_FORMAT_HELP: "テーマで使われる短い日付形式を設定します" - LONG_DATE_FORMAT: "長い日付形式" - LONG_DATE_FORMAT_HELP: "テーマで使われる長い日付形式を設定します" - DEFAULT_ORDERING: "デフォルト順序" - DEFAULT_ORDERING_HELP: "上書きされない限り、このページ順序を使用します" - DEFAULT_ORDERING_DEFAULT: "デフォルト - フォルダ名を基準にします" - DEFAULT_ORDERING_FOLDER: "フォルダ - プレフィックスを抜いたフォルダ名を基準にします" - DEFAULT_ORDERING_TITLE: "タイトル - ヘッダのタイトルを基準にします" - DEFAULT_ORDERING_DATE: "日付 - ヘッダの日付を基準にします" - DEFAULT_ORDER_DIRECTION: "デフォルトの並び順" - DEFAULT_ORDER_DIRECTION_HELP: "リスト内のページ順序" - DEFAULT_PAGE_COUNT: "デフォルトのページ数" - DEFAULT_PAGE_COUNT_HELP: "リスト内のデフォルトのページカウント最大値" - DATE_BASED_PUBLISHING: "公開日の基準" - DATE_BASED_PUBLISHING_HELP: "自動的に(非)公開する日付の基準" - EVENTS: "イベント" - EVENTS_HELP: "特定のイベントを有効または無効にします。 無効するとプラグインを無効にすることができます" - REDIRECT_DEFAULT_ROUTE: "デフォルトルートへリダイレクト" - REDIRECT_DEFAULT_ROUTE_HELP: "自動的にデフォルトルートへリダイレクトします" - LANGUAGES: "言語" - SUPPORTED: "対応" - SUPPORTED_HELP: "2文字の言語コートをカンマで区切ってください (例 'en,fr,de')" - TRANSLATIONS_ENABLED: "翻訳有効" - TRANSLATIONS_ENABLED_HELP: "プラグインや拡張機能でGravの翻訳対応" - TRANSLATIONS_FALLBACK: "フォールバック翻訳" - TRANSLATIONS_FALLBACK_HELP: "有効な言語がない場合は、 代替手段へ切り替えて翻訳対応します" - ACTIVE_LANGUAGE_IN_SESSION: "セッションで有効な言語" - ACTIVE_LANGUAGE_IN_SESSION_HELP: "セッションで有効な言語を保存します" - HTTP_HEADERS: "HTTP ヘッダ" - EXPIRES: "Expires" - EXPIRES_HELP: "ヘッダの有効期限を設定します。 値は秒単位です" - LAST_MODIFIED: "Last modified" - LAST_MODIFIED_HELP: "プロキシとブラウザのキャッシュを最適化するLast modifiedを設定します" - ETAG: "ETag" - ETAG_HELP: "ページが変更されたとき識別しやすいようEtagを設定します" - VARY_ACCEPT_ENCODING: "Vary accept encoding" - VARY_ACCEPT_ENCODING_HELP: "プロキシと CDN のキャッシュを助けるVary Accept Encodingを設定します" - MARKDOWN_EXTRA_HELP: "Markdown Extraのデフォルト対応を有効にします https://michelf.ca/projects/php-markdown/extra/" - AUTO_LINE_BREAKS: "自動改行" - AUTO_LINE_BREAKS_HELP: "Markdownでの自動改行の対応を有効にします" - AUTO_URL_LINKS: "自動URLリンク" - AUTO_URL_LINKS_HELP: "URLのHTML HyperLinksへの自動変換を有効にします" - ESCAPE_MARKUP: "マークアップエスケープ" - ESCAPE_MARKUP_HELP: "HTMLのマークアップタグをエスケープします" - CACHING_HELP: "Grav全体のキャッシュ有効/無効を切り替えます" - CACHE_CHECK_METHOD: "キャッシュチェック方法" - CACHE_CHECK_METHOD_HELP: "Gravのページファイルが変更されているかを確認する方法を選択します" - CACHE_DRIVER: "キャッシュドライバ" - CACHE_DRIVER_HELP: "Gravが使用するキャッシュドライバを選びます。 「Auto Detect」 にすると自動で検出します" - CACHE_PREFIX: "キャッシュプレフィックス" - CACHE_PREFIX_HELP: "Gravの識別子。 わからない場合、 変更しないでください" - CACHE_PREFIX_PLACEHOLDER: "base URL (ランダム文字列を入力して上書き)" - LIFETIME: "有効期限" - LIFETIME_HELP: "キャッシュの有効期限を設定します 0 = 無期限" - GZIP_COMPRESSION: "Gzip 圧縮" - GZIP_COMPRESSION_HELP: "Gravのパフォーマンス向上のため、 ページのGzip圧縮を有効にします" - TWIG_TEMPLATING: "Twig テンプレート" - TWIG_CACHING: "Twig キャッシュ" - TWIG_CACHING_HELP: "Twig キャッシュを制御します。 パフォーマンスのためには有効にします" - TWIG_DEBUG: "Twig デバッグ" - TWIG_DEBUG_HELP: "Twigデバッグ機能を読み込まない" - DETECT_CHANGES: "変更を検出" - DETECT_CHANGES_HELP: "TwigはTwigテンプレートが変更されると、自動的にTwigキャッシュを再コンパイルします" - AUTOESCAPE_VARIABLES: "Autoescape 変数" - AUTOESCAPE_VARIABLES_HELP: "Autoescape変数を有効にします。 サイトデザインが壊れる可能性が高いです" - ASSETS: "アセット" - CSS_PIPELINE: "CSS パイプライン" - CSS_PIPELINE_HELP: "CSSパイプラインは複数のCSSファイルを一つにまとめます" - CSS_MINIFY: "CSS 縮小" - CSS_MINIFY_HELP: "CSSパイプライン処理中にCSSを縮小します" - CSS_MINIFY_WINDOWS_OVERRIDE: "CSS Windows 上書き縮小" - CSS_MINIFY_WINDOWS_OVERRIDE_HELP: "Windowsプラットフォームで上書き縮小します。 デフォルトでhreadStackSizeで失敗するとき" - CSS_REWRITE: "CSS 書換" - CSS_REWRITE_HELP: "CSSパイプライン処理中にCSSのURLを相対的に書換" - JAVASCRIPT_PIPELINE: "JavaScript パイプライン" - JAVASCRIPT_PIPELINE_HELP: "JSパイプラインは複数のJSファイルを一つにまとめます" - JAVASCRIPT_MINIFY: "JavaScript 縮小" - JAVASCRIPT_MINIFY_HELP: "JSパイプライン処理中にJSを縮小します" - ENABLED_TIMESTAMPS_ON_ASSETS: "アセットのタイムスタンプを有効" - ENABLED_TIMESTAMPS_ON_ASSETS_HELP: "アセットのタイムスタンプを有効にします" - COLLECTIONS: "コレクション" - ERROR_HANDLER: "エラーハンドラ" - DISPLAY_ERRORS: "エラー表示" - DISPLAY_ERRORS_HELP: "Full backtrace-style エラーページを表示します" - LOG_ERRORS: "エラーログ" - LOG_ERRORS_HELP: "/logs フォルダにエラーを記録します" - DEBUGGER: "デバッガ" - DEBUGGER_HELP: "Gravデバッガと次の設定を有効にします" - DEBUG_TWIG: "Twig デバッグ" - DEBUG_TWIG_HELP: "Twigテンプレートのデバッグを有効にします" - SHUTDOWN_CLOSE_CONNECTION: "Shutdown 接続を閉じる" - SHUTDOWN_CLOSE_CONNECTION_HELP: "onShutdown()を呼ぶ前に接続を閉じます。 デバッグに失敗するとき" - DEFAULT_IMAGE_QUALITY: "デフォルト画質" - DEFAULT_IMAGE_QUALITY_HELP: "デフォルト画質は画像をリサンプリングやキャッシュするとき使われます (85%)" - CACHE_ALL: "すべての画像をキャッシュ" - CACHE_ALL_HELP: "メディアを扱っていない場合でも、 Gravはすべての画像をキャッシュします" - IMAGES_DEBUG: "画像デバッグ透かし" - IMAGES_DEBUG_HELP: "画像の上に画像を上書きして表示します" - UPLOAD_LIMIT: "ファイルアップロード制限" - UPLOAD_LIMIT_HELP: "最大アップロードサイズを byte 単位で設定します (0 制限なし)" - ENABLE_MEDIA_TIMESTAMP: "メディアのタイムスタンプを有効" - ENABLE_MEDIA_TIMESTAMP_HELP: "メディアの最終更新日時に基づいて、 タイムスタンプを追加します" - SESSION: "セッション" - SESSION_ENABLED_HELP: "Gravでセッションの対応を有効にします" - TIMEOUT: "タイムアウト" - TIMEOUT_HELP: "秒単位でセッションタイムアウトを設定します" - SESSION_NAME_HELP: "識別子はクッキーの名前に使用されます" - ABSOLUTE_URLS: "絶対的 URL" - ABSOLUTE_URLS_HELP: "「base_url」のための絶対的もしくは相対的URL" - PARAMETER_SEPARATOR: "パラメータ区切り" - PARAMETER_SEPARATOR_HELP: "Windows上のApacheのために変更できるパラメータの区切り" - TASK_COMPLETED: "タスク完了" - EVERYTHING_UP_TO_DATE: "すべて最新版です" - UPDATES_ARE_AVAILABLE: "利用可能な更新があります" - IS_AVAILABLE_FOR_UPDATE: "の利用可能な更新ががあります" - IS_NOW_AVAILABLE: "が利用可能です" - CURRENT: "現在" - UPDATE_GRAV_NOW: "Grav 更新中" - GRAV_SYMBOLICALLY_LINKED: "Gravはシンボリックリンクです。 アップグレードは利用できません" - UPDATING_PLEASE_WAIT: "更新中... ダウンロードをお待ちください" - OF_THIS: "件この" - OF_YOUR: "件あなたの" - HAVE_AN_UPDATE_AVAILABLE: "は利用可能な更新があります" - SAVE_AS: "新規保存" - MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_DESC: "このページと子ページを削除してもよろしいですか? もし違う言語で翻訳されたページがある場合、 それらのページは残るので個別に削除してください。 それ以外、ベージフォルダはサブフォルダと一緒に削除されます。 この操作は戻せません。" - AND: "と" - UPDATE_AVAILABLE: "利用可能な更新" - FULLY_UPDATED: "すべて更新しました" - SAVE_LOCATION: "保存場所" - PAGE_FILE: "ページファイル" - PAGE_FILE_HELP: "ページファイル名と標準で表示されるこのページのテンプレート" - NO_USER_ACCOUNTS: "ユーザアカウントがありません。初期ユーザを作成してください.." - REDIRECT_TRAILING_SLASH: "末尾スラッシュのリダイレクト" - REDIRECT_TRAILING_SLASH_HELP: "URIの末尾がスラッシュなら、301リダイレクトします" - DEFAULT_DATE_FORMAT: "ページ日付フォーマット" - DEFAULT_DATE_FORMAT_HELP: "Gravで使われる日付フォーマット。.標準では、PHPの日付構文を使用してフォーマットを推測し明確にします(例 : Y-m-d H:i)" - DEFAULT_DATE_FORMAT_PLACEHOLDER: "空白の場合は、 推測します" - IGNORE_FILES: "無視するファイル" - IGNORE_FILES_HELP: "ページを処理するときに無視するファイル" - IGNORE_FOLDERS: "無視するフォルダ" - IGNORE_FOLDERS_HELP: "ページを処理するに無視するフォルダ" - HTTP_ACCEPT_LANGUAGE: "ブラウザで設定されている言語" - HTTP_ACCEPT_LANGUAGE_HELP: " ブラウザの`http_accept_language` ヘッダタグの言語で設定することができます" - OVERRIDE_LOCALE: "ロケール上書き" - OVERRIDE_LOCALE_HELP: "現在の言語設定でPHPのロケール設定を上書きします" - REDIRECT: "ページリダイレクト" - REDIRECT_HELP: "ページルート、もしくは外部URLを入力します。 例 `/some/route` or `http://somesite.com`" - PLUGIN_STATUS: "プラグインの状態" - -ru: - PLUGIN_ADMIN: - ADMIN_BETA_MSG: "Это бета-релиз! Вы используете это расширение на свой страх и риск..." - ADMIN_REPORT_ISSUE: "Нашли ошибку? Пожалуйста, сообщите об этом на GitHub." - EMAIL_FOOTER: "Разработано Grav - The Modern Flat File CMS" - LOGIN_BTN: "Логин" - LOGIN_BTN_FORGOT: "Забыл" - LOGIN_BTN_RESET: "Востановить Пароль" - LOGIN_BTN_SEND_INSTRUCTIONS: "Отправить инструкции по сбросу" - LOGIN_LOGGED_IN: "Вы успешно вошли в систему" - LOGIN_FAILED: "Ошибка при входе" - LOGGED_OUT: "Вы вышли" - RESET_LINK_EXPIRED: "Время соединения истекло, пожалуйста, попробуйте еще раз" - RESET_PASSWORD_RESET: "Пароль был сброшен" - RESET_INVALID_LINK: "Неверная ссылка восстановления пароля, пожалуйста, попробуйте еще раз" - FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Инструкции для восстановления пароля были высланы на адрес электронной почты %s" - FORGOT_FAILED_TO_EMAIL: "Не удалось отправить инструкции по электронной почте, пожалуйста, повторите попытку позже" - FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Невозможно сбросить пароль для %s, так как адрес электронной почты не установлен" - FORGOT_USERNAME_DOES_NOT_EXIST: "Пользователь с логином %s не существует" - FORGOT_EMAIL_NOT_CONFIGURED: "Не удаётся сбросить пароль. Этот сайт не настроен для отправки электронной почты" - FORGOT_EMAIL_SUBJECT: "%s Запрос на восстановление пароля" - FORGOT_EMAIL_BODY: "

Восстановление пароля

Уважемый %1$s,

Было отправлен запрос на %4$s для сброса пароля.


Нажмите эту кнопку, чтобы сбросить свой пароль

Или скопируйте следующий URL в адресную строку вашего браузера:

%2$s


С уважением,

%3$s

" - MANAGE_PAGES: "Менеджер Страниц" - CONFIGURATION: "Настройки" - PAGES: "Страницы" - PLUGINS: "Плагины" - PLUGIN: "Плагины" - THEMES: "Темы" - LOGOUT: "Выход" - BACK: "Назад" - ADD_PAGE: "Добавить Страницу" - ADD_MODULAR: "Добавить Блок" - MOVE: "Перенести" - DELETE: "Удалить" - SAVE: "Сохранить" - NORMAL: "Стандартный" - EXPERT: "Экспертный" - EXPAND_ALL: "Развернуть Все" - COLLAPSE_ALL: "Свернуть Все" - ERROR: "Ошибка" - CLOSE: "Закрыть" - CANCEL: "Отменить" - CONTINUE: "Продолжить" - MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "Требуется Подтверждение" - MODAL_CHANGED_DETECTED_TITLE: "Обнаружены Изменения" - MODAL_CHANGED_DETECTED_DESC: "У вас есть несохраненные изменения. Вы уверены, что хотите выйти без сохранения?" - MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Требуется Подтверждение" - MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Вы уверены, что хотите удалить этот файл? Это действие не может быть отменено." - ADD_FILTERS: "Добавить Фильтры" - SEARCH_PAGES: "Поиск Страницы" - VERSION: "Версия" - WAS_MADE_WITH: "сделано с" - BY: "От" - UPDATE_THEME: "Обновление Темы" - UPDATE_PLUGIN: "Обновление Плагина" - OF_THIS_THEME_IS_NOW_AVAILABLE: "эта тема теперь доступна" - OF_THIS_PLUGIN_IS_NOW_AVAILABLE: "этот плагин теперь доступен" - AUTHOR: "Автор" - HOMEPAGE: "Сайт" - DEMO: "Демо" - BUG_TRACKER: "Баг-Трекер" - KEYWORDS: "Ключевые Слова" - LICENSE: "Лицензия" - DESCRIPTION: "Описание" - README: "Readme" - REMOVE_THEME: "Удалить Тему" - INSTALL_THEME: "Установить Тему" - THEME: "Тема" - BACK_TO_THEMES: "Назад к Темам" - BACK_TO_PLUGINS: "Назад к Плагинам" - CHECK_FOR_UPDATES: "Проверить Обновления" - ADD: "Добавить" - CLEAR_CACHE: "Очистить кэш" - CLEAR_CACHE_ALL_CACHE: "Весь кэш" - CLEAR_CACHE_ASSETS_ONLY: "Только текущий" - CLEAR_CACHE_IMAGES_ONLY: "Только картинки" - CLEAR_CACHE_CACHE_ONLY: "Только кэш" - DASHBOARD: "Панель управления" - UPDATES_AVAILABLE: "Доступны Обновления" - DAYS: "Дни" - UPDATE: "Обновление" - BACKUP: "Резервная копия" - STATISTICS: "Статистика" - TODAY: "Сегодня" - WEEK: "Неделя" - MONTH: "Месяц" - LATEST_PAGE_UPDATES: "Последние обновленные страницы" - MAINTENANCE: "Техническое обслуживание" - UPDATED: "Обновлен" - MON: "Пн" - TUE: "Вт" - WED: "Ср" - THU: "Чт" - FRI: "Пт" - SAT: "Сб" - SUN: "Вс" - COPY: "Копировать" - EDIT: "Редактировать" - CREATE: "Создать" - GRAV_ADMIN: "Админ Панель Grav" - GRAV_OFFICIAL_PLUGIN: "Официальные Плагины Grav" - GRAV_OFFICIAL_THEME: "Официальные Темы Grav" - PLUGIN_SYMBOLICALLY_LINKED: "Этот плагин символически связаны. Обновления не будут найдены." - THEME_SYMBOLICALLY_LINKED: "Эта тема символически связана. Обновления не будут найдены." - REMOVE_PLUGIN: "Удалить Плагин" - INSTALL_PLUGIN: "Установить Плагин" - AVAILABLE: "Доступен" - INSTALLED: "Установлен" - INSTALL: "Установить" - ACTIVE_THEME: "Активировать Тему" - SWITCHING_TO: "Переключить" - SWITCHING_TO_DESCRIPTION: "При переключении на другую тему нет никакой гарантии того, что поддерживаются все страницы макетов. Возможно, это приведет к ошибкам при попытке загрузки указанных страниц." - SWITCHING_TO_CONFIRMATION: "Вы действительно хотите продолжить и перейти к теме" - CREATE_NEW_USER: "Создать Нового Пользователя" - REMOVE_USER: "Удалить Пользователя" - ACCESS_DENIED: "Доступ запрещен" - ACCOUNT_NOT_ADMIN: "ваша учетная запись не имеет прав администратора" - PHP_INFO: "Информация о PHP" - INSTALLER: "Установщик" - AVAILABLE_THEMES: "Доступные Темы" - AVAILABLE_PLUGINS: "Доступные Плагины" - INSTALLED_THEMES: "Установленные Темы" - INSTALLED_PLUGINS: "Установленные Плагины" - BROWSE_ERROR_LOGS: "Просмотр Журналов Ошибок" - SITE: "Сайт" - INFO: "Информация" - SYSTEM: "Система" - USER: "Пользователь" - ADD_ACCOUNT: "Добавить Учетную Запись" - SWITCH_LANGUAGE: "Переключить язык" - SUCCESSFULLY_ENABLED_PLUGIN: "Плагин успешно включен" - SUCCESSFULLY_DISABLED_PLUGIN: "Плагин успешно отключен" - SUCCESSFULLY_CHANGED_THEME: "Успешно изменена тема по умолчанию" - INSTALLATION_FAILED: "Ошибка при установке" - INSTALLATION_SUCCESSFUL: "Установка завершена успешно" - UNINSTALL_FAILED: "Удалить не удалось" - UNINSTALL_SUCCESSFUL: "Удаление успешно" - SUCCESSFULLY_SAVED: "Сохранение успешно" - SUCCESSFULLY_COPIED: "Копирование успешно" - REORDERING_WAS_SUCCESSFUL: "Изменение порядка прошло успешно" - SUCCESSFULLY_DELETED: "Успешно удалено" - SUCCESSFULLY_SWITCHED_LANGUAGE: "Язык подключен успешно" - INSUFFICIENT_PERMISSIONS_FOR_TASK: "У вас недостаточно прав доступа для задачи" - CACHE_CLEARED: "кэш очищается" - METHOD: "Метод" - ERROR_CLEARING_CACHE: "Ошибка отчистки кэша" - AN_ERROR_OCCURRED: "Произошла ошибка" - YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: "Ваша резервная копия готова для загрузки" - DOWNLOAD_BACKUP: "Скачать резервную копию" - PAGES_FILTERED: "Фильтр страниц" - NO_PAGE_FOUND: "Страница не найдена" - INVALID_PARAMETERS: "Неверные Параметры" - NO_FILES_SENT: "Файлы не отправляются" - EXCEEDED_FILESIZE_LIMIT: "Превышен предел размера файла" - UNKNOWN_ERRORS: "Неизвестная ошибка" - EXCEEDED_GRAV_FILESIZSE_LIMIT: "Превышен предел размера файла GRAV." - UNSUPPORTED_FILE_TYPE: "Неподдерживаемый тип файла" - FAILED_TO_MOVE_UPLOADED_FILE: "Не удалось переместить загруженный файл." - FILE_UPLOADED_SUCCESSFULLY: "Файл загружен успешно" - FILE_DELETED: "Файл удален" - FILE_COULD_NOT_BE_DELETED: "Файл не может быть удален" - FILE_NOT_FOUND: "Файл не найден" - NO_FILE_FOUND: "Нет файл не найден" - GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "Grav успешно обновлен" - GRAV_UPDATE_FAILED: "Ошибка обновления Grav" - EVERYTHING_UPDATED: "Обновляются" - UPDATES_FAILED: "Обновление не удалось" - AVATAR_BY: "Аватар" - LAST_BACKUP: "Последняя Резервная Копия" - FULL_NAME: "Полное имя" - USERNAME: "Имя пользователя" - EMAIL: "Email" - PASSWORD: "Пароль" - TITLE: "Заголовок" - LANGUAGE: "Язык" - ACCOUNT: "Аккаунт" - EMAIL_VALIDATION_MESSAGE: "Должен быть действительный адрес электронной почты" - PASSWORD_VALIDATION_MESSAGE: "Пароль должен содержать хотя бы одну цифру и одну заглавную и строчную букву, и по крайней мере 8 или более символов" - LANGUAGE_HELP: "Выберите предпочитаемый язык" - MEDIA: "Медиа" - DEFAULTS: "По умолчанию" - SITE_TITLE: "Заголовок Сайта" - SITE_TITLE_PLACEHOLDER: "Название Сайта" - SITE_TITLE_HELP: "Название для вашего сайта по умолчанию, которое часто используется в темах" - DEFAULT_AUTHOR: "Автор По Умолчанию" - DEFAULT_AUTHOR_HELP: "Имя автора по умолчанию, которое часто используется в темах или страницах содержимого" - DEFAULT_EMAIL: "Email По Умолчанию" - DEFAULT_EMAIL_HELP: "Электронной почты по умолчанию, используется для создания ссылки на почту в темах или страницах" - TAXONOMY_TYPES: "Типы Таксономии" - TAXONOMY_TYPES_HELP: "Таксономия типов должна быть определена здесь, если вы хотите использовать их на страницах вашего сайта" - PAGE_SUMMARY: "Страница Резюме" - ENABLED: "Включено" - ENABLED_HELP: "Включить страницу резюме (резюме возвращает то же самое, что и содержание страницы)" - 'YES': "Да" - 'NO': "Нет" - SUMMARY_SIZE: "Размер Резюме" - SUMMARY_SIZE_HELP: "Количество символов страницы, чтобы использовать в качестве резюме содержания" - FORMAT: "Формат" - FORMAT_HELP: "Короткий = использовать первое вхождение разделителя или размер; Длинный = разделитель резюме игнорируется" - SHORT: "Короткий" - LONG: "Длинный" - DELIMITER: "Разделитель" - DELIMITER_HELP: "Разделитель Резюме (По умолчанию '===')" - METADATA: "Метаданные" - METADATA_HELP: "По умолчанию значения метаданных, которые будут отображаться на каждой странице, если это не определено у страницы" - NAME: "Имя" - CONTENT: "Содержание" - REDIRECTS_AND_ROUTES: "Редиректы и Маршрутизация" - CUSTOM_REDIRECTS: "Пользовательские Редиректы" - CUSTOM_REDIRECTS_HELP: "Маршрутизация для перенаправления на другие страницы. Действует замена стандартных регулярных выражений" - CUSTOM_REDIRECTS_PLACEHOLDER_KEY: "/your/alias" - CUSTOM_REDIRECTS_PLACEHOLDER_VALUE: "/your/redirect" - CUSTOM_ROUTES: "Нестандартная Маршрутизация" - CUSTOM_ROUTES_HELP: "Маршрутизация алисов других страниц. Действует замена стандартных регулярных выражений" - CUSTOM_ROUTES_PLACEHOLDER_KEY: "/your/alias" - CUSTOM_ROUTES_PLACEHOLDER_VALUE: "/your/route" - FILE_STREAMS: "Файловые пути" - DEFAULT: "По умолчанию" - PAGE_MEDIA: "Страница Медиа" - OPTIONS: "Опции" - PUBLISHED: "Опубликованный" - PUBLISHED_HELP: "По умолчанию, страница опубликована, если вы явно не указали что не материал не опубликован или через дату публикации находясь в будущем, или дату снятия с публиации находясь в в прошлом" - DATE: "Дата" - DATE_HELP: "Переменная даты позволяет специально установить дату, связанную с этой страницей." - PUBLISHED_DATE: "Дата публикации" - PUBLISHED_DATE_HELP: "Можете указать дату автоматической публикации." - UNPUBLISHED_DATE: "Дата снятия с публикации" - UNPUBLISHED_DATE_HELP: "Можете указать дату автоматического снятия с публикации." - ROBOTS: "Робот" - TAXONOMIES: "Таксономии" - TAXONOMY: "Таксономия" - ADVANCED: "Дополнительно" - SETTINGS: "Настройки" - FOLDER_NUMERIC_PREFIX: "Числовой префикс папки" - FOLDER_NUMERIC_PREFIX_HELP: "Числовой префикс, который обеспечивает ручное упорядочение и подразумевает отображение числа" - FOLDER_NAME: "Имя папки" - FOLDER_NAME_HELP: "Имя папки, которое будут храниться в файловой системе для этой страницы" - PARENT: "Родитель" - DEFAULT_OPTION_ROOT: "- Корень -" - DEFAULT_OPTION_SELECT: "- Выбрать -" - DISPLAY_TEMPLATE: "Шаблон отображения" - DISPLAY_TEMPLATE_HELP: "Тип страницы, который определяет какая ветка шаблона отображает страницу" - BODY_CLASSES: "Класс Страницы" - ORDERING: "Порядок" - PAGE_ORDER: "Порядок Страниц" - OVERRIDES: "Переопределения" - MENU: "Меню" - MENU_HELP: "Строка, которая будет использоваться в меню. Если не установить, будет использоваться Заголовок." - SLUG: "Алиас" - SLUG_HELP: "Эта переменная позволяет установить алиас страницы (часть URL-адреса)" - SLUG_VALIDATE_MESSAGE: "Алиас должен состоять только из строчных алфавитно-цифровых символов и дефисов" - PROCESS: "Процессор" - PROCESS_HELP: "Контроль над тем, как страницы обрабатываются. Может быть установлен индивидуально для каждой страницы" - DEFAULT_CHILD_TYPE: "Тип вложенного элемента" - USE_GLOBAL: "Использовать Глобальный" - ROUTABLE: "Маршрутизируемый" - ROUTABLE_HELP: "Использовать маршрутизацию для данной страницы" - CACHING: "Кэширование" - VISIBLE: "Видимый" - VISIBLE_HELP: "Отображать материал в меню сайта или нет" - DISABLED: "Отключено" - ITEMS: "Элементы" - ORDER_BY: "Сортировать по" - ORDER: "Порядок" - FOLDER: "Папка" - ASCENDING: "По возрастанию" - DESCENDING: "По убыванию" - ADD_MODULAR_CONTENT: "Добавить Модульное Содержимое" - PAGE_TITLE: "Заголовок Страницы" - PAGE_TITLE_HELP: "Заголовок страницы" - PAGE: "Страница" - MODULAR_TEMPLATE: "Шаблон Модульный" - FRONTMATTER: "Вступление" - FILENAME: "Имя файла" - PARENT_PAGE: "Родительская страница" - HOME_PAGE: "Главная страница" - HOME_PAGE_HELP: "Страница Grav, которая будет использовать в качестве главной страницы по умолчанию" - DEFAULT_THEME: "Тема по умолчанию" - DEFAULT_THEME_HELP: "Установите тему по умолчанию для Grav (по умолчанию это Antimatter)" - TIMEZONE: "Часовой пояс" - TIMEZONE_HELP: "Измененить значение по умолчанию часового пояса сервера" - SHORT_DATE_FORMAT: "Краткий формат даты" - SHORT_DATE_FORMAT_HELP: "Установить короткий формат даты, который может быть использован темами" - LONG_DATE_FORMAT: "Длинный формат даты" - LONG_DATE_FORMAT_HELP: "Задайте длинный формат даты, который может быть использован темами" - DEFAULT_ORDERING: "Порядок по умолчанию" - DEFAULT_ORDERING_HELP: "Страницы в списке будут выводиться с учетом этого порядка, если он не переопределен." - DEFAULT_ORDERING_DEFAULT: "По умолчанию - в зависимости от имени папки" - DEFAULT_ORDERING_FOLDER: "Папка - в зависимости от приставки имени папки" - DEFAULT_ORDERING_TITLE: "Заголовок - в зависимости от названия поля заголовка" - DEFAULT_ORDERING_DATE: "Дата - в зависимости от поля даты" - DEFAULT_ORDER_DIRECTION: "Порядок сортировки по умолчанию" - DEFAULT_ORDER_DIRECTION_HELP: "Направление сортировки страниц в списке материалов" - DEFAULT_PAGE_COUNT: "Количество страниц по умолчанию" - DEFAULT_PAGE_COUNT_HELP: "Максимальное количество страниц в списке по умолчанию " - DATE_BASED_PUBLISHING: "Публикация на основе даты" - DATE_BASED_PUBLISHING_HELP: "Автоматически (не)публикует посты на основе их даты" - EVENTS: "Событие" - EVENTS_HELP: "Включить или отключить специфические события. Отключение этих событий можно привести к ошибкам в работе плагинов" - REDIRECT_DEFAULT_ROUTE: "Перенаправление маршрутизатора по умолчанию" - REDIRECT_DEFAULT_ROUTE_HELP: "Автоматическое перенаправление страниц согласно маршрутизатору" - LANGUAGES: "Язык" - SUPPORTED: "Мультиязычность" - SUPPORTED_HELP: "Укажите необходимые вам языки через запятую (пример 'en,fr,de')" - TRANSLATIONS_ENABLED: "Поддержка перевода" - TRANSLATIONS_ENABLED_HELP: "Поддержка в Grav перевода плагинов и расширений" - TRANSLATIONS_FALLBACK: "Резервный перевод" - TRANSLATIONS_FALLBACK_HELP: "Использовать запасной вариант перевода, если активный язык не существует" - ACTIVE_LANGUAGE_IN_SESSION: "Активный язык в сессии" - ACTIVE_LANGUAGE_IN_SESSION_HELP: "Хранить активный язык в сессии пользователя" - HTTP_HEADERS: "HTTP Заголовки" - EXPIRES: "Expires" - EXPIRES_HELP: "Устанавливает заголовок Expires. Значение в секундах." - LAST_MODIFIED: "Last modified" - LAST_MODIFIED_HELP: "Устанавливает заголовок последнего изменения, который может помочь оптимизировать кэширование и браузере" - ETAG: "ETag" - ETAG_HELP: "Устанавливает заголовок ETag, чтобы помочь определить, когда страница была изменена" - VARY_ACCEPT_ENCODING: "Vary accept encoding" - VARY_ACCEPT_ENCODING_HELP: "Установите заголовок `Vary: Accept Encoding` для помочи прокси-кэширования и cdn" - MARKDOWN_EXTRA_HELP: "Включение по умолчанию для поддержки Markdown Extra - https://michelf.ca/projects/php-markdown/extra/" - AUTO_LINE_BREAKS: "Авто разрывы строк" - AUTO_LINE_BREAKS_HELP: "Включить поддержку автоматической линии перерывы в markdown" - AUTO_URL_LINKS: "Авто URL ссылки" - AUTO_URL_LINKS_HELP: "Включить автоматическое преобразование URL в HTML-код гиперссылки" - ESCAPE_MARKUP: "Избегать разметки" - ESCAPE_MARKUP_HELP: "Избегать тегов разметки в HTML объектах" - CACHING_HELP: "Глобальное управлением кэша выключить/выключить кэширование Grav" - CACHE_CHECK_METHOD: "Метод проверки кэша" - CACHE_CHECK_METHOD_HELP: "Выберите метод, который Grav использует для проверки, если файлы подкачки были изменены." - CACHE_DRIVER: "Драйвер кэширования" - CACHE_DRIVER_HELP: "Выберите метод кеширования который должен использовать Grav. 'Автоматическое выбор' CMS попытается определить лучшый метод для вашего сайта" - CACHE_PREFIX: "Префикс кэша" - CACHE_PREFIX_HELP: "Идентификатор для части ключа Grav. Не изменяйте, если Вы не знаете к чему это приведет." - CACHE_PREFIX_PLACEHOLDER: "Производный от базового URL (переопределите, введя произвольную строку)" - LIFETIME: "Прододжительность жизни" - LIFETIME_HELP: "Задает время жизни кэша в секундах. 0 = бесконечно" - GZIP_COMPRESSION: "Gzip сжатие" - GZIP_COMPRESSION_HELP: "Включить сжатие GZip в GRAV для увеличения скорости загрузки страниц" - TWIG_TEMPLATING: "Шаблоны Twig" - TWIG_CACHING: "Кеширование Twig" - TWIG_CACHING_HELP: "Управление механизм кэширования Twig. Включите его для увеличение скорости исполнения." - TWIG_DEBUG: "Отладка Twig" - TWIG_DEBUG_HELP: "Позволяет не загружается расширение отладчика Twig" - DETECT_CHANGES: "Обнаружение изменений" - DETECT_CHANGES_HELP: "Twig автоматически перекомпилировать кэш Twig, если он обнаружит какие-либо изменения в шаблонах Twig" - AUTOESCAPE_VARIABLES: "Авто исключение переменных" - AUTOESCAPE_VARIABLES_HELP: "Авто исключение всех переменные. Это скорей всего нарушит работу вашего сайта." - ASSETS: "Дополнительные библиотеки" - CSS_PIPELINE: "Объединение CSS" - CSS_PIPELINE_HELP: "Позволит объединить несколько файлов CSS один." - CSS_MINIFY: "Минимизировать CSS" - CSS_MINIFY_HELP: "Минимизировать в CSS во время обедиения" - CSS_MINIFY_WINDOWS_OVERRIDE: "Минимизировать CSS переопределение для Windows." - CSS_MINIFY_WINDOWS_OVERRIDE_HELP: "Минимизировать переопределение для платформ Windows. Отключено по умолчанию из-за ThreadStackSize" - CSS_REWRITE: "Переписать CSS" - CSS_REWRITE_HELP: "Переписать любые CSS относительные URL-адреса во время объединения" - JAVASCRIPT_PIPELINE: "Объединение JavaScript" - JAVASCRIPT_PIPELINE_HELP: "Объединение нескольких JS файлов в один файл" - JAVASCRIPT_MINIFY: "Минимизировать JavaScript" - JAVASCRIPT_MINIFY_HELP: "Минимизировать в JS во время обедиения" - ENABLED_TIMESTAMPS_ON_ASSETS: "Включить временные метки по активам" - ENABLED_TIMESTAMPS_ON_ASSETS_HELP: "Включить временные метки активов" - COLLECTIONS: "Коллекции" - ERROR_HANDLER: "Обработчик ошибок" - DISPLAY_ERRORS: "Выводить ошибки" - DISPLAY_ERRORS_HELP: "Отобразить полную цепочку стилей при ошибке на странице" - LOG_ERRORS: "Логи ошибок" - LOG_ERRORS_HELP: "Логи ошибок находятся в папке /logs" - DEBUGGER: "Отладчик" - DEBUGGER_HELP: "Включите отладчик Grav и после параметров настройки" - DEBUG_TWIG: "Отладчик Twig" - DEBUG_TWIG_HELP: "Включите отладчик шаблонов Twig" - SHUTDOWN_CLOSE_CONNECTION: "Завершение открытых соединений" - SHUTDOWN_CLOSE_CONNECTION_HELP: "Закройте соединение до вызова onShutdown(). ложно для отладки" - DEFAULT_IMAGE_QUALITY: "Качество изображений по умолчанию" - DEFAULT_IMAGE_QUALITY_HELP: "Качество изображения по умолчанию для использования при повторной выборки или кэширования изображений (85%)" - CACHE_ALL: "Кэшировать все картинки" - CACHE_ALL_HELP: "Выполните все изображения через систему кэша Grav, даже если у них нет взаимодействия диском" - IMAGES_DEBUG: "Отладка водяного знака изображения" - IMAGES_DEBUG_HELP: "Показать накладку над изображениями с указанием глубины пикселя изображения при работе с сеткой" - UPLOAD_LIMIT: "Лимит загрузки файла" - UPLOAD_LIMIT_HELP: "Установите максимальный размер в байтах для загрузки (0 безлимита)" - ENABLE_MEDIA_TIMESTAMP: "Включить временные метки на медиа" - ENABLE_MEDIA_TIMESTAMP_HELP: "Добавляет метку на основе даты последнего изменения каждого элемента в медиа" - SESSION: "Сессия" - SESSION_ENABLED_HELP: "Включить поддержку сессий в рамках Grav" - TIMEOUT: "Время ожидания" - TIMEOUT_HELP: "Устанавливает тайм-аут сеанса в секундах" - SESSION_NAME_HELP: "Идентификатор используется для формирования имени сессионной куки" - ABSOLUTE_URLS: "Обсалютный путь" - ABSOLUTE_URLS_HELP: "Абсолютных или относительных URL-адресов для `base_url`" - PARAMETER_SEPARATOR: "Параметр разделителя" - PARAMETER_SEPARATOR_HELP: "Разделитель для передаваемых параметров, которые могут быть изменены для Apache на Windows" - TASK_COMPLETED: "Задача завершена" - EVERYTHING_UP_TO_DATE: "Все актуально" - UPDATES_ARE_AVAILABLE: "обновления доступны" - IS_AVAILABLE_FOR_UPDATE: "доступно для обновления" - IS_NOW_AVAILABLE: "теперь доступно" - CURRENT: "Текущий" - UPDATE_GRAV_NOW: "Обновить Grav сейчас" - GRAV_SYMBOLICALLY_LINKED: "Grav символично связаны. Обновление не будет доступно" - UPDATING_PLEASE_WAIT: "Обновление... Пожалуйста, подождите, загрузка" - OF_THIS: "этого" - OF_YOUR: "из ваших" - HAVE_AN_UPDATE_AVAILABLE: "есть доступное обновление" - SAVE_AS: "Сохранить как" - MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_DESC: "Вы уверены, что хотите удалить эту страницу и все вложенные? Если страница переведена на другие языки, эти переводы будут сохранены и должны быть удалены отдельно. В противном случае папка страницы будет удалена вместе со своими подстраницами. Это действие не может быть отменено." - AND: "и" - UPDATE_AVAILABLE: "Доступно обновление" - METADATA_KEY: "Ключ (например 'Ключевые слова')" - METADATA_VALUE: "Значение (например 'Blog, Grav')" - USERNAME_HELP: "Имя пользователя должно быть от 3 до 16 символов, в том числе строчных букв, цифр, подчеркивания и дефиса. Прописные буквы, пробелы и специальные символы не допускаются" - FULLY_UPDATED: "Полностью Обновлено" - SAVE_LOCATION: "Сохранить расположение" - PAGE_FILE: "Шаблон страницы" - PAGE_FILE_HELP: "Тип отображения страницы, по умолчанию шаблон отображения для этой страницы" - NO_USER_ACCOUNTS: "Учетные записи не найдены, пожалуйста создайте первую запись..." - REDIRECT_TRAILING_SLASH: "Перенаправление замыкающей слэш" - REDIRECT_TRAILING_SLASH_HELP: "Выполните 301 редирект на замыкающий слэш." - DEFAULT_DATE_FORMAT: "Формат Даты" - DEFAULT_DATE_FORMAT_HELP: "Страница формата даты, используемого в Grav. По умолчанию, Grav пытается угадать правильный формат даты, однако вы можете выбирать Формат с помощью РНР синтаксис Дата (например: Г-М-Д ч:м)" - DEFAULT_DATE_FORMAT_PLACEHOLDER: "Определяет автоматически если пусто" - IGNORE_FILES: "Игнорировать файлы" - IGNORE_FILES_HELP: "Файлы, которые будут проигнорированы при обработке страниц" - IGNORE_FOLDERS: "Игнорировать папки" - IGNORE_FOLDERS_HELP: "Папки, которые будут проигнорированы при обработке страниц" - HTTP_ACCEPT_LANGUAGE: "Определять язык браузера" - HTTP_ACCEPT_LANGUAGE_HELP: "Вы можете разрешить попытаться установить язык на основе 'http_accept_language' тега заголовка в браузере пользователя" - OVERRIDE_LOCALE: "Переопределение локали" - OVERRIDE_LOCALE_HELP: "Переопределите языковой локали в PHP на основе текущего языка" - REDIRECT: "Страница редиректа" - REDIRECT_HELP: "Введите адрес страницы или внешний URL для страницы сайта, чтобы перенаправить например, '/some/route' или 'http://somesite.com'" - PLUGIN_STATUS: "Статус плагина" - INCLUDE_DEFAULT_LANG: "Включить язык по умочанию" - INCLUDE_DEFAULT_LANG_HELP: "Это позволит добавить все URL-адреса по умолчанию, язык по умолчанию. Например, `/en/blog/my-post`" - ALLOW_URL_TAXONOMY_FILTERS: "URL для фильтров таксономии" - ALLOW_URL_TAXONOMY_FILTERS_HELP: "Базовая страница для фильтров`/taxonomy:value`." - REDIRECT_DEFAULT_CODE: "Перенаправление по умолчанию" - REDIRECT_DEFAULT_CODE_HELP: "Статус заголовка HTTP при перенаправлении URL" - IGNORE_HIDDEN: "Игнорировать скрытые" - IGNORE_HIDDEN_HELP: "Игнорировать все скрытые файлы и папки" diff --git a/src/user/plugins/admin/pages/admin/backup.md b/src/user/plugins/admin/pages/admin/backup.md deleted file mode 100644 index 37a26a4..0000000 --- a/src/user/plugins/admin/pages/admin/backup.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Backup -template: ajax - -access: - admin.maintenance: true - admin.super: true ---- diff --git a/src/user/plugins/admin/pages/admin/cache.md b/src/user/plugins/admin/pages/admin/cache.md deleted file mode 100644 index a8bc331..0000000 --- a/src/user/plugins/admin/pages/admin/cache.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Cache - -access: - admin.cache: true - admin.super: true ---- diff --git a/src/user/plugins/admin/pages/admin/dashboard.md b/src/user/plugins/admin/pages/admin/dashboard.md deleted file mode 100644 index eb1f7e2..0000000 --- a/src/user/plugins/admin/pages/admin/dashboard.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Dashboard - -access: - admin.login: true - admin.super: true ---- - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod -tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, -quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo -consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse -cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non -proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod -tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, -quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo -consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse -cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non -proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod -tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, -quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo -consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse -cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non -proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod -tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, -quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo -consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse -cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non -proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod -tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, -quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo -consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse -cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non -proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod -tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, -quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo -consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse -cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non -proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod -tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, -quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo -consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse -cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non -proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod -tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, -quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo -consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse -cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non -proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod -tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, -quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo -consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse -cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non -proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod -tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, -quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo -consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse -cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non -proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod -tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, -quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo -consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse -cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non -proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod -tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, -quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo -consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse -cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non -proident, sunt in culpa qui officia deserunt mollit anim id est laborum. diff --git a/src/user/plugins/admin/pages/admin/denied.md b/src/user/plugins/admin/pages/admin/denied.md deleted file mode 100644 index 1dc329d..0000000 --- a/src/user/plugins/admin/pages/admin/denied.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Access Denied ---- - diff --git a/src/user/plugins/admin/pages/admin/forgot.md b/src/user/plugins/admin/pages/admin/forgot.md deleted file mode 100644 index 85a816e..0000000 --- a/src/user/plugins/admin/pages/admin/forgot.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Forgot password - -form: - fields: - - name: username - type: text - placeholder: Username - autofocus: true ---- - diff --git a/src/user/plugins/admin/pages/admin/info.md b/src/user/plugins/admin/pages/admin/info.md deleted file mode 100644 index cd08494..0000000 --- a/src/user/plugins/admin/pages/admin/info.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: PHP Info - -access: - admin.settings: true - admin.super: true ---- diff --git a/src/user/plugins/admin/pages/admin/installer.md b/src/user/plugins/admin/pages/admin/installer.md deleted file mode 100644 index 85a7d08..0000000 --- a/src/user/plugins/admin/pages/admin/installer.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Installer - -access: - admin.install: true - admin.super: true ---- diff --git a/src/user/plugins/admin/pages/admin/login.md b/src/user/plugins/admin/pages/admin/login.md deleted file mode 100644 index 80c7cb8..0000000 --- a/src/user/plugins/admin/pages/admin/login.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Dashboard Login - -form: - fields: - - name: username - type: text - placeholder: Username - autofocus: true - - - name: password - type: password - placeholder: Password ---- - diff --git a/src/user/plugins/admin/pages/admin/logout.md b/src/user/plugins/admin/pages/admin/logout.md deleted file mode 100644 index 371ebd8..0000000 --- a/src/user/plugins/admin/pages/admin/logout.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Dashboard Logout - -form: - fields: - - name: username - type: text - placeholder: Username - autofocus: true - - - name: password - type: password - placeholder: Password ---- diff --git a/src/user/plugins/admin/pages/admin/logs.md b/src/user/plugins/admin/pages/admin/logs.md deleted file mode 100644 index 58d6435..0000000 --- a/src/user/plugins/admin/pages/admin/logs.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Error Log - -access: - admin.logs: true - admin.super: true ---- diff --git a/src/user/plugins/admin/pages/admin/media.md b/src/user/plugins/admin/pages/admin/media.md deleted file mode 100644 index c0e358b..0000000 --- a/src/user/plugins/admin/pages/admin/media.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Media - -access: - admin.pages: true - admin.super: true ---- diff --git a/src/user/plugins/admin/pages/admin/pages-filter.md b/src/user/plugins/admin/pages/admin/pages-filter.md deleted file mode 100644 index 7a7463e..0000000 --- a/src/user/plugins/admin/pages/admin/pages-filter.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Pages Filter - -access: - admin.pages: true - admin.super: true ---- diff --git a/src/user/plugins/admin/pages/admin/pages.md b/src/user/plugins/admin/pages/admin/pages.md deleted file mode 100644 index b1f7fc4..0000000 --- a/src/user/plugins/admin/pages/admin/pages.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Pages - -access: - admin.pages: true - admin.super: true ---- diff --git a/src/user/plugins/admin/pages/admin/plugins.md b/src/user/plugins/admin/pages/admin/plugins.md deleted file mode 100644 index d61155f..0000000 --- a/src/user/plugins/admin/pages/admin/plugins.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Plugins - -access: - admin.plugins: true - admin.super: true ---- diff --git a/src/user/plugins/admin/pages/admin/reset.md b/src/user/plugins/admin/pages/admin/reset.md deleted file mode 100644 index 092b4e5..0000000 --- a/src/user/plugins/admin/pages/admin/reset.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Reset password - -form: - fields: - - name: username - type: text - placeholder: Username - readonly: true - - name: password - type: password - placeholder: Password - autofocus: true - - name: token - type: hidden ---- - diff --git a/src/user/plugins/admin/pages/admin/site.md b/src/user/plugins/admin/pages/admin/site.md deleted file mode 100644 index 699bf79..0000000 --- a/src/user/plugins/admin/pages/admin/site.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Site Settings - -access: - admin.settings: true - admin.super: true ---- diff --git a/src/user/plugins/admin/pages/admin/statistics.md b/src/user/plugins/admin/pages/admin/statistics.md deleted file mode 100644 index 9a6f968..0000000 --- a/src/user/plugins/admin/pages/admin/statistics.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Statistics - -access: - admin.statistics: true - admin.super: true ---- diff --git a/src/user/plugins/admin/pages/admin/system.md b/src/user/plugins/admin/pages/admin/system.md deleted file mode 100644 index f38e9b8..0000000 --- a/src/user/plugins/admin/pages/admin/system.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Configuration - -access: - admin.configuration: true - admin.super: true ---- diff --git a/src/user/plugins/admin/pages/admin/themes.md b/src/user/plugins/admin/pages/admin/themes.md deleted file mode 100644 index 57d6217..0000000 --- a/src/user/plugins/admin/pages/admin/themes.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Grav Themes - -access: - admin.themes: true - admin.super: true ---- diff --git a/src/user/plugins/admin/pages/admin/update.md b/src/user/plugins/admin/pages/admin/update.md deleted file mode 100644 index b5437c4..0000000 --- a/src/user/plugins/admin/pages/admin/update.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Cache - -access: - admin.maintenance: true - admin.super: true ---- diff --git a/src/user/plugins/admin/pages/admin/users.md b/src/user/plugins/admin/pages/admin/users.md deleted file mode 100644 index 91a6a69..0000000 --- a/src/user/plugins/admin/pages/admin/users.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Users - -access: - admin.users: true - admin.super: true ---- diff --git a/src/user/plugins/admin/themes/grav/css-compiled/nucleus.css b/src/user/plugins/admin/themes/grav/css-compiled/nucleus.css deleted file mode 100644 index 59bc6b4..0000000 --- a/src/user/plugins/admin/themes/grav/css-compiled/nucleus.css +++ /dev/null @@ -1,626 +0,0 @@ -*, *::before, *::after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - -@-webkit-viewport { - width: device-width; } -@-moz-viewport { - width: device-width; } -@-ms-viewport { - width: device-width; } -@-o-viewport { - width: device-width; } -@viewport { - width: device-width; } -html { - font-size: 100%; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; } - -body { - margin: 0; } - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section, -summary { - display: block; } - -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; } - -audio:not([controls]) { - display: none; - height: 0; } - -[hidden], -template { - display: none; } - -a { - background: transparent; - text-decoration: none; } - -a:active, -a:hover { - outline: 0; } - -abbr[title] { - border-bottom: 1px dotted; } - -b, -strong { - font-weight: bold; } - -dfn { - font-style: italic; } - -mark { - background: #ff0; - color: #000; } - -sub, -sup { - font-size: 0.75rem; - line-height: 0; - position: relative; - vertical-align: baseline; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -img { - border: 0; - max-width: 100%; } - -svg:not(:root) { - overflow: hidden; } - -figure { - margin: 1em 40px; } - -hr { - height: 0; } - -pre { - overflow: auto; } - -code, -kbd, -pre, -samp { - font-size: 1rem; } - -button, -input, -optgroup, -select, -textarea { - color: inherit; - font: inherit; - margin: 0; } - -button { - overflow: visible; } - -button, -select { - text-transform: none; } - -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; } - -button[disabled], -html input[disabled] { - cursor: default; } - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; } - -input { - line-height: normal; } - -input[type="checkbox"], -input[type="radio"] { - padding: 0; } - -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; } - -input[type="search"] { - -webkit-appearance: textfield; } - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -legend { - border: 0; - padding: 0; } - -textarea { - overflow: auto; } - -optgroup { - font-weight: bold; } - -table { - border-collapse: collapse; - border-spacing: 0; - table-layout: fixed; - width: 100%; } - -tr, td, th { - vertical-align: middle; } - -th, td { - padding: 0.425rem 0; } - -th { - text-align: left; } - -.container { - width: 75em; - margin: 0 auto; - padding: 0; } - @media only all and (min-width: 60em) and (max-width: 74.938em) { - .container { - width: 60em; } } - @media only all and (min-width: 48em) and (max-width: 59.938em) { - .container { - width: 48em; } } - @media only all and (min-width: 30.063em) and (max-width: 47.938em) { - .container { - width: 30em; } } - @media only all and (max-width: 30em) { - .container { - width: 100%; } } - -.grid { - display: -webkit-box; - display: -moz-box; - display: box; - display: -webkit-flex; - display: -moz-flex; - display: -ms-flexbox; - display: flex; - -webkit-flex-flow: row; - -moz-flex-flow: row; - flex-flow: row; - list-style: none; - margin: 0; - padding: 0; } - @media only all and (max-width: 47.938em) { - .grid { - -webkit-flex-flow: row wrap; - -moz-flex-flow: row wrap; - flex-flow: row wrap; } } - -.block { - -webkit-box-flex: 1; - -moz-box-flex: 1; - box-flex: 1; - -webkit-flex: 1; - -moz-flex: 1; - -ms-flex: 1; - flex: 1; } - @media only all and (max-width: 47.938em) { - .block { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 100%; - -moz-flex: 0 100%; - -ms-flex: 0 100%; - flex: 0 100%; } } - -.content { - margin: 0.625rem; - padding: 0.938rem; } - -@media only all and (max-width: 47.938em) { - body [class*="size-"] { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 100%; - -moz-flex: 0 100%; - -ms-flex: 0 100%; - flex: 0 100%; } } - -.size-1-2 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 50%; - -moz-flex: 0 50%; - -ms-flex: 0 50%; - flex: 0 50%; } - -.size-1-3 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 33.33333%; - -moz-flex: 0 33.33333%; - -ms-flex: 0 33.33333%; - flex: 0 33.33333%; } - -.size-1-4 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 25%; - -moz-flex: 0 25%; - -ms-flex: 0 25%; - flex: 0 25%; } - -.size-1-5 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 20%; - -moz-flex: 0 20%; - -ms-flex: 0 20%; - flex: 0 20%; } - -.size-1-6 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 16.66667%; - -moz-flex: 0 16.66667%; - -ms-flex: 0 16.66667%; - flex: 0 16.66667%; } - -.size-1-7 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 14.28571%; - -moz-flex: 0 14.28571%; - -ms-flex: 0 14.28571%; - flex: 0 14.28571%; } - -.size-1-8 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 12.5%; - -moz-flex: 0 12.5%; - -ms-flex: 0 12.5%; - flex: 0 12.5%; } - -.size-1-9 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 11.11111%; - -moz-flex: 0 11.11111%; - -ms-flex: 0 11.11111%; - flex: 0 11.11111%; } - -.size-1-10 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 10%; - -moz-flex: 0 10%; - -ms-flex: 0 10%; - flex: 0 10%; } - -.size-1-11 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 9.09091%; - -moz-flex: 0 9.09091%; - -ms-flex: 0 9.09091%; - flex: 0 9.09091%; } - -.size-1-12 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 8.33333%; - -moz-flex: 0 8.33333%; - -ms-flex: 0 8.33333%; - flex: 0 8.33333%; } - -@media only all and (min-width: 48em) and (max-width: 59.938em) { - .size-tablet-1-2 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 50%; - -moz-flex: 0 50%; - -ms-flex: 0 50%; - flex: 0 50%; } - - .size-tablet-1-3 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 33.33333%; - -moz-flex: 0 33.33333%; - -ms-flex: 0 33.33333%; - flex: 0 33.33333%; } - - .size-tablet-1-4 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 25%; - -moz-flex: 0 25%; - -ms-flex: 0 25%; - flex: 0 25%; } - - .size-tablet-1-5 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 20%; - -moz-flex: 0 20%; - -ms-flex: 0 20%; - flex: 0 20%; } - - .size-tablet-1-6 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 16.66667%; - -moz-flex: 0 16.66667%; - -ms-flex: 0 16.66667%; - flex: 0 16.66667%; } - - .size-tablet-1-7 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 14.28571%; - -moz-flex: 0 14.28571%; - -ms-flex: 0 14.28571%; - flex: 0 14.28571%; } - - .size-tablet-1-8 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 12.5%; - -moz-flex: 0 12.5%; - -ms-flex: 0 12.5%; - flex: 0 12.5%; } - - .size-tablet-1-9 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 11.11111%; - -moz-flex: 0 11.11111%; - -ms-flex: 0 11.11111%; - flex: 0 11.11111%; } - - .size-tablet-1-10 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 10%; - -moz-flex: 0 10%; - -ms-flex: 0 10%; - flex: 0 10%; } - - .size-tablet-1-11 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 9.09091%; - -moz-flex: 0 9.09091%; - -ms-flex: 0 9.09091%; - flex: 0 9.09091%; } - - .size-tablet-1-12 { - -webkit-box-flex: 0; - -moz-box-flex: 0; - box-flex: 0; - -webkit-flex: 0 8.33333%; - -moz-flex: 0 8.33333%; - -ms-flex: 0 8.33333%; - flex: 0 8.33333%; } } -@media only all and (max-width: 47.938em) { - @supports not (flex-wrap: wrap) { - .grid { - display: block; - -webkit-box-lines: inherit; - -moz-box-lines: inherit; - box-lines: inherit; - -webkit-flex-wrap: inherit; - -moz-flex-wrap: inherit; - -ms-flex-wrap: inherit; - flex-wrap: inherit; } - - .block { - display: block; - -webkit-box-flex: inherit; - -moz-box-flex: inherit; - box-flex: inherit; - -webkit-flex: inherit; - -moz-flex: inherit; - -ms-flex: inherit; - flex: inherit; } } } -.first-block { - -webkit-box-ordinal-group: 0; - -webkit-order: -1; - -ms-flex-order: -1; - order: -1; } - -.last-block { - -webkit-box-ordinal-group: 2; - -webkit-order: 1; - -ms-flex-order: 1; - order: 1; } - -.fixed-blocks { - -webkit-flex-flow: row wrap; - -moz-flex-flow: row wrap; - flex-flow: row wrap; } - .fixed-blocks .block { - -webkit-box-flex: inherit; - -moz-box-flex: inherit; - box-flex: inherit; - -webkit-flex: inherit; - -moz-flex: inherit; - -ms-flex: inherit; - flex: inherit; - width: 25%; } - @media only all and (min-width: 60em) and (max-width: 74.938em) { - .fixed-blocks .block { - width: 33.33333%; } } - @media only all and (min-width: 48em) and (max-width: 59.938em) { - .fixed-blocks .block { - width: 50%; } } - @media only all and (max-width: 47.938em) { - .fixed-blocks .block { - width: 100%; } } - -@supports not (flex-wrap: wrap) { - .fixed-blocks { - display: block; - -webkit-flex-flow: inherit; - -moz-flex-flow: inherit; - flex-flow: inherit; } } -body { - font-size: 1rem; - line-height: 1.7; } - -h1, h2, h3, h4, h5, h6 { - margin: 1.7rem 0 0.85rem 0; - text-rendering: optimizeLegibility; } - -h1 { - font-size: 3.2rem; } - -h2 { - font-size: 2.5rem; } - -h3 { - font-size: 2.1rem; } - -h4 { - font-size: 1.75rem; } - -h5 { - font-size: 1.35rem; } - -h6 { - font-size: 0.85rem; } - -p { - margin: 0.85rem 0 1.7rem; } - -ul, ol { - margin-top: 1.7rem; - margin-bottom: 1.7rem; } - ul ul, ul ol, ol ul, ol ol { - margin-top: 0; - margin-bottom: 0; } - -blockquote { - margin: 1.7rem 0; - padding-left: 0.85rem; } - -cite { - display: block; - font-size: 0.875rem; } - cite:before { - content: "\2014 \0020"; } - -pre { - margin: 1.7rem 0; - padding: 0.938rem; } - -code { - vertical-align: bottom; } - -small { - font-size: 0.875rem; } - -hr { - border-left: none; - border-right: none; - border-top: none; - margin: 1.7rem 0; } - -fieldset { - border: 0; - padding: 0.938rem; - margin: 0 0 1.7rem 0; } - -input, -label, -select { - display: block; } - -label { - margin-bottom: 0.425rem; } - label.required:after { - content: "*"; } - label abbr { - display: none; } - -textarea, input[type="email"], input[type="number"], input[type="password"], input[type="search"], input[type="tel"], input[type="text"], input[type="url"], input[type="color"], input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="month"], input[type="time"], input[type="week"], select[multiple=multiple] { - -webkit-transition: border-color; - -moz-transition: border-color; - transition: border-color; - border-radius: 0.1875rem; - padding: 0.425rem 0.425rem; - width: 100%; } - textarea:focus, input[type="email"]:focus, input[type="number"]:focus, input[type="password"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="text"]:focus, input[type="url"]:focus, input[type="color"]:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, select[multiple=multiple]:focus { - outline: none; } - -textarea { - resize: vertical; } - -input[type="checkbox"], input[type="radio"] { - display: inline; - margin-right: 0.425rem; } - -input[type="file"] { - width: 100%; } - -select { - width: auto; - max-width: 100%; - margin-bottom: 1.7rem; } - -button, -input[type="submit"] { - cursor: pointer; - user-select: none; - vertical-align: middle; - white-space: nowrap; - border: inherit; } - -/*# sourceMappingURL=nucleus.css.map */ diff --git a/src/user/plugins/admin/themes/grav/css-compiled/nucleus.css.map b/src/user/plugins/admin/themes/grav/css-compiled/nucleus.css.map deleted file mode 100644 index 53f5ad1..0000000 --- a/src/user/plugins/admin/themes/grav/css-compiled/nucleus.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ -"version": 3, -"mappings": "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", -"sources": ["../scss/nucleus/_core.scss","../scss/vendor/bourbon/addons/_prefixer.scss","../scss/configuration/nucleus/_typography.scss","../scss/nucleus/_flex.scss","../scss/configuration/nucleus/_breakpoints.scss","../scss/nucleus/mixins/_breakpoints.scss","../scss/vendor/bourbon/css3/_flex-box.scss","../scss/configuration/nucleus/_layout.scss","../scss/nucleus/_typography.scss","../scss/nucleus/_forms.scss","../scss/configuration/nucleus/_core.scss"], -"names": [], -"file": "nucleus.css" -} \ No newline at end of file diff --git a/src/user/plugins/admin/themes/grav/css-compiled/template.css b/src/user/plugins/admin/themes/grav/css-compiled/template.css deleted file mode 100644 index 7e3210a..0000000 --- a/src/user/plugins/admin/themes/grav/css-compiled/template.css +++ /dev/null @@ -1,2 +0,0 @@ -@import url(//fonts.googleapis.com/css?family=Montserrat:400|Lato:300,400,700|Ubuntu+Mono:400,700);#admin-login,#admin-logo h3,#admin-main .titlebar h1,#admin-main .titlebar .button-bar,#admin-main .flush-bottom.button-bar .button,#admin-main .danger.button-bar .button,#admin-main .success.button-bar .button,#admin-dashboard #updates .numeric,#admin-dashboard #popularity .stat,#admin-topbar #admin-mode-toggle,#admin-topbar #admin-lang-toggle{position:relative;top:50%;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-o-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.button{display:inline-block;padding:0.3rem 1.5rem;font-weight:300;-webkit-font-smoothing:auto;cursor:pointer;vertical-align:middle;font-family:"Lato","Helvetica","Tahoma","Geneva","Arial",sans-serif}.button:active{margin:1px 0 -1px 0}.button i{margin-right:5px}.button-small.button{padding:2px 10px;font-size:1rem}.button-x-small.button{padding:2px 8px 2px 5px;font-size:0.9rem}html,body{height:100%}body{background:#314D5B;color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:#0082BA}a:hover{color:#003b54}b,strong{font-weight:600}.bigger{font-size:1.2rem}.button-bar{text-align:right;float:right;z-index:2}.secondary-accent{background:#349886;color:#fff}.secondary-accent .button-bar{background:#349886}.secondary-accent .button{background:#41bea8}.tertiary-accent{background:#2693B7;color:#fff}.tertiary-accent .button-bar{background:#2693B7}.tertiary-accent .button{background:#2aa4cc;background:#3aafd6;color:rgba(255,255,255,0.85);border-radius:4px}.tertiary-accent .button:hover{background:#4fb8da;color:#fff}.tertiary-accent .button.dropdown-toggle{background:#4fb8da;border-left:1px solid #2aa4cc}.alert{font-size:1.1rem;padding:1rem 3rem}.info{background:#9055AF;color:#fff}.info a{color:#e6e6e6}.info a:hover{color:#fff}.info-reverse{color:#9055AF}.notice{background:#2693B7;color:#fff}.notice a{color:#e6e6e6}.notice a:hover{color:#fff}.error{background:#DA4B46;color:#fff}.error a{color:#e6e6e6}.error a:hover{color:#fff}.badge{display:inline-block;font-size:0.9rem;font-family:"Lato","Helvetica","Tahoma","Geneva","Arial",sans-serif;font-weight:700;border-radius:10px;padding:0px 6px;min-width:20px;line-height:20px;text-align:center}.default-animation,.tab-bar span,.tab-bar a,.form-tabs>label{-webkit-transition:all 0.5s ease;-moz-transition:all 0.5s ease;transition:all 0.5s ease}.default-border-radius{border-radius:4px}.default-glow-shadow{box-shadow:0 0 20px rgba(0,0,0,0.2)}.default-box-shadow{box-shadow:0 10px 20px rgba(0,0,0,0.2)}.padding-horiz{padding-left:7rem;padding-right:7rem}@media only all and (max-width: 59.938em){.padding-horiz{padding-left:4rem;padding-right:4rem}}@media only all and (max-width: 47.938em){.padding-horiz{padding-left:1rem;padding-right:1rem}}.padding-vert{padding-top:3rem;padding-bottom:3rem}body{font-family:"Lato","Helvetica","Tahoma","Geneva","Arial",sans-serif;font-weight:400}h1,h2,h3,h4,h5,h6{font-family:"Montserrat","Helvetica","Tahoma","Geneva","Arial",sans-serif;font-weight:400;text-rendering:optimizeLegibility;letter-spacing:-0px}body.simple-fonts{font-family:'Helvetica Neue', Helvetica, Arial, sans-serif !important}body.simple-fonts h1,body.simple-fonts h2,body.simple-fonts h3,body.simple-fonts h4,body.simple-fonts h5,body.simple-fonts h6,body.simple-fonts #admin-menu li,body.simple-fonts .button,body.simple-fonts .tab-bar,body.simple-fonts .badge,body.simple-fonts #admin-main .grav-mdeditor-preview,body.simple-fonts .form .note,body.simple-fonts .form-tabs,body.simple-fonts input,body.simple-fonts select,body.simple-fonts textarea,body.simple-fonts button,body.simple-fonts .selectize-input,body.simple-fonts .form-order-wrapper ul#ordering li{font-family:'Helvetica Neue', Helvetica, Arial, sans-serif !important}h1{font-size:3.2rem}@media only all and (max-width: 47.938em){h1{font-size:2.5rem;line-height:1.2;margin-bottom:2.5rem}}@media only all and (min-width: 48em) and (max-width: 59.938em){h2{font-size:2.1rem}}@media only all and (max-width: 47.938em){h2{font-size:2rem}}@media only all and (min-width: 48em) and (max-width: 59.938em){h3{font-size:1.7rem}}@media only all and (max-width: 47.938em){h3{font-size:1.6rem}}@media only all and (min-width: 48em) and (max-width: 59.938em){h4{font-size:1.35rem}}@media only all and (max-width: 47.938em){h4{font-size:1.25rem}}h1{letter-spacing:-3px}h2{letter-spacing:-2px}h3{letter-spacing:-1px}blockquote{border-left:10px solid #F0F2F4}blockquote p{font-size:1.1rem;color:#999}blockquote cite{display:block;text-align:right;color:#666;font-size:1.2rem}blockquote>blockquote>blockquote{margin:0}blockquote>blockquote>blockquote p{padding:15px;display:block;font-size:1rem;margin-top:0rem;margin-bottom:0rem}blockquote>blockquote>blockquote>p{margin-left:-71px;border-left:10px solid #F0AD4E;background:#FCF8F2;color:#df8a13}blockquote>blockquote>blockquote>blockquote>p{margin-left:-94px;border-left:10px solid #D9534F;background:#FDF7F7;color:#b52b27}blockquote>blockquote>blockquote>blockquote>blockquote>p{margin-left:-118px;border-left:10px solid #5BC0DE;background:#F4F8FA;color:#28a1c5}blockquote>blockquote>blockquote>blockquote>blockquote>blockquote>p{margin-left:-142px;border-left:10px solid #5CB85C;background:#F1F9F1;color:#3d8b3d}code,kbd,pre,samp{font-family:"Ubuntu Mono",monospace}code{background:#f9f2f4;color:#9c1d3d}pre{padding:2rem;background:#f6f6f6;border:1px solid #ddd;border-radius:3px}pre code{color:#237794;background:inherit}hr{border-bottom:4px solid #F0F2F4}.label{vertical-align:middle;background:#0082BA;border-radius:100%;color:#fff;height:1rem;min-width:1rem;line-height:1rem;display:inline-block;text-align:center;font-size:0.7rem;font-family:"Montserrat","Helvetica","Tahoma","Geneva","Arial",sans-serif;margin-right:0.75rem}.switch-toggle a,.switch-light span span{display:none}@media only screen{.switch-light{display:inline-block;position:relative;overflow:visible;padding:0;margin-left:100px}.switch-light *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.switch-light a{display:block;-webkit-transition:all 0.1s ease-out;-moz-transition:all 0.1s ease-out;transition:all 0.1s ease-out}.switch-light label,.switch-light>span{vertical-align:middle}.switch-light input:focus ~ a,.switch-light input:focus+label{outline:1px dotted #888}.switch-light label{position:relative;z-index:3;display:block;width:100%}.switch-light input{position:absolute;opacity:0;z-index:5}.switch-light input:checked ~ a{right:0%}.switch-light>span{position:absolute;left:-100px;width:100%;margin:0;padding-right:100px;text-align:left}.switch-light>span span{position:absolute;top:0;left:0;z-index:5;display:block;width:50%;margin-left:100px;text-align:center}.switch-light>span span:last-child{left:50%}.switch-light a{position:absolute;right:50%;top:0;z-index:4;display:block;width:50%;height:100%;padding:0}.switch-toggle{display:inline-block;position:relative;padding:0 !important}.switch-toggle *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.switch-toggle a{display:block;-webkit-transition:all 0.1s ease-out;-moz-transition:all 0.1s ease-out;transition:all 0.1s ease-out}.switch-toggle label,.switch-toggle>span{vertical-align:middle}.switch-toggle input:focus ~ a,.switch-toggle input:focus+label{outline:1px dotted #888}.switch-toggle input{position:absolute;opacity:0}.switch-toggle input+label{position:relative;z-index:2;float:left;height:100%;margin:0;text-align:center}.switch-toggle a{position:absolute;top:0;left:0;padding:0;z-index:1;width:50%;height:100%}.switch-toggle input:last-of-type:checked ~ a{left:50%}.switch-toggle.switch-3 label,.switch-toggle.switch-3 a{width:33.33333%}.switch-toggle.switch-3 input:checked:nth-of-type(2) ~ a{left:33.33333%}.switch-toggle.switch-3 input:checked:last-of-type ~ a{left:66.66667%}.switch-toggle.switch-4 label,.switch-toggle.switch-4 a{width:25%}.switch-toggle.switch-4 input:checked:nth-of-type(2) ~ a{left:25%}.switch-toggle.switch-4 input:checked:nth-of-type(3) ~ a{left:50%}.switch-toggle.switch-4 input:checked:last-of-type ~ a{left:75%}.switch-toggle.switch-5 label,.switch-toggle.switch-5 a{width:20%}.switch-toggle.switch-5 input:checked:nth-of-type(2) ~ a{left:20%}.switch-toggle.switch-5 input:checked:nth-of-type(3) ~ a{left:40%}.switch-toggle.switch-5 input:checked:nth-of-type(4) ~ a{left:60%}.switch-toggle.switch-5 input:checked:last-of-type ~ a{left:80%}.switch-grav{background-color:#fff;border:1px solid #d5d5d5;border-radius:4px}.switch-grav label{color:#737C81;-webkit-transition:color 0.2s ease-out;-moz-transition:color 0.2s ease-out;transition:color 0.2s ease-out;padding:5px 20px}.switch-grav>span span{opacity:0;-webkit-transition:all 0.1s;-moz-transition:all 0.1s;transition:all 0.1s}.switch-grav>span span:first-of-type{opacity:1}.switch-grav a{background:#777;border-radius:3px}.switch-grav.switch-toggle input.highlight:checked ~ a{background:#41bea8}.switch-grav.switch-light input:checked ~ a{background-color:#777}.switch-grav.switch-light input:checked ~ span span:first-of-type{opacity:0}.switch-grav.switch-light input:checked ~ span span:last-of-type{opacity:1}.switch-grav input:checked+label{color:#fff}}@media only screen and (-webkit-max-device-pixel-ratio: 2) and (max-device-width: 1280px){.switch-light,.switch-toggle{-webkit-animation:webkitSiblingBugfix infinite 1s}}@-webkit-keyframes webkitSiblingBugfix{from{-webkit-transform:translate3d(0, 0, 0)}to{-webkit-transform:translate3d(0, 0, 0)}}form h1{color:#314D5B;padding:0 3rem 0.5rem;margin:0 0 1rem;border-bottom:3px solid #e1e1e1;font-size:1.5rem;text-align:left;letter-spacing:-1px}form p{padding:0 3rem}form pre{padding:1.5rem 3rem}form .note{font-family:"Lato","Helvetica","Tahoma","Geneva","Arial",sans-serif;color:#DA4B46}form .form-field{margin-bottom:1rem;padding-left:3rem}form .form-data{padding-right:3rem}form .required{color:#DA4B46;font-family:helvetica, arial;vertical-align:middle;line-height:1;font-size:30px;margin-left:5px}form label{padding:5px 0;font-weight:400;margin:0}form label.toggleable{display:inline}form input,form select,form textarea,form button,form .selectize-input{font-family:"Lato","Helvetica","Tahoma","Geneva","Arial",sans-serif;font-size:1rem;line-height:1.7;border-radius:4px;-webkit-font-smoothing:antialiased}form .selectize-dropdown{z-index:100000}form .form-column>.form-field.grid{display:block}form .form-column>.form-field.grid>.block{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0;-moz-flex:0;-ms-flex:0;flex:0}form .grid.vertical{-webkit-flex-flow:column;-moz-flex-flow:column;flex-flow:column}form .form-select-wrapper,form .selectize-control.single .selectize-input{position:relative}form .form-select-wrapper:after,form .selectize-control.single .selectize-input:after{margin-top:0;border:0;position:absolute;content:'\f078';font-family:'FontAwesome';right:12px;top:50%;line-height:0;color:#9ba2a6;pointer-events:none}form .selectize-control{height:39px}form .selectize-input{box-shadow:none;color:#737C81;padding:5px 30px 5px 10px;margin:0}form .selectize-input>input{font-size:1rem;line-height:1.7}form .selectize-control.multi .selectize-input{padding:0.425rem 0.425rem}form .selectize-control.multi .selectize-input.has-items{padding-top:6px;padding-bottom:4px}form .selectize-control.multi .selectize-input>div{color:#737C81;border-radius:2px;line-height:1.5}form .selectize-control.multi .selectize-input>div.active{background:#d5d5d5}form .selectize-control.single .selectize-input:after{right:27px}form .selectize-control.single .selectize-input.dropdown-active:after{content:'\f077'}form .x-small{max-width:5rem !important}form .small{max-width:10rem !important}form .medium{max-width:20rem}form .medium textarea{height:7rem}form .large{max-width:30rem !important}form .large textarea{height:10rem}form select{width:100%;border:1px solid #d5d5d5;background:#fff;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:5px 30px 5px 10px;cursor:pointer;margin:0}form input[type=text],form input[type=password],form input[type=email]{width:100%;border:1px solid #d5d5d5;background:#fff}form input[readonly=readonly]{background:#f2f2f2;font-weight:bold}form textarea{width:100%;border:1px solid #d5d5d5;background:#fff}form .form-frontmatter-wrapper{border:1px solid #d5d5d5;border-radius:4px}form .switch-toggle label{cursor:pointer}form .switch-toggle a,form .switch-toggle label{outline:none !important}form .dynfields input[type=text],form [data-grav-field="array"] input[type=text]{width:40%;float:left;margin:0 5px 5px 0}form .dynfields .form-row,form [data-grav-field="array"] .form-row{display:inline-block}form .dynfields .form-row span,form [data-grav-field="array"] .form-row span{padding:0.5rem;display:inline-block;line-height:1.7;cursor:pointer}form .dynfields .form-row.array-field-value_only,form [data-grav-field="array"] .form-row.array-field-value_only{width:100%}form .button-bar{margin-top:1rem;background:#e6e6e6;padding:1.2rem 3rem;width:100%;border-bottom-left-radius:5px;border-bottom-right-radius:5px}form .checkboxes{display:inline-block;padding:5px 0}form .checkboxes label{display:inline;cursor:pointer;position:relative;padding:0 0 0 2rem;margin-right:15px}form .checkboxes label:before{content:"";display:inline-block;width:1.5rem;height:1.5rem;top:50%;left:0;margin-top:-0.75rem;margin-right:10px;position:absolute;background:#fff;border:1px solid #d5d5d5;border-radius:4px}form .checkboxes input[type=checkbox]{display:none}form .checkboxes input[type=checkbox]:checked+label:before{content:"\f00c";font-family:"FontAwesome";font-size:1.2rem;line-height:1;text-align:center}form .checkboxes.toggleable label{margin-right:0}.form-display-wrapper p{padding-left:0;padding-right:0}.form-display-wrapper p:first-child{margin-top:0}.form-frontmatter-wrapper{margin-bottom:3rem}.form-frontmatter-wrapper .dragbar{height:4px;background:#d5d5d5;cursor:row-resize}#frontmatter+.CodeMirror{border-radius:4px;padding:10px;height:130px}.form-order-wrapper ul#ordering{list-style:none;margin:0;padding:0}.form-order-wrapper ul#ordering li{padding:0.2rem 1rem;border-radius:4px;border:1px solid #d5d5d5;background:#f8f8f8;color:#8d959a;margin:3px 0;position:relative;font-family:"Lato","Helvetica","Tahoma","Geneva","Arial",sans-serif}.form-order-wrapper ul#ordering li.drag-handle{cursor:move;background:#fff;color:#5b6266}.form-order-wrapper ul#ordering li.drag-handle::after{content:'\f0c9';font-family:FontAwesome;position:absolute;right:10px}.form-list-wrapper ul[data-collection-holder]{list-style:none;margin:0;padding:0}.form-list-wrapper ul[data-collection-holder] li{cursor:move;padding:1rem;border-radius:4px;border:1px solid #d5d5d5;background:#f8f8f8;color:#8d959a;margin:3px 0;position:relative;font-family:"Lato","Helvetica","Tahoma","Geneva","Arial",sans-serif}.form-list-wrapper ul[data-collection-holder] li .item-actions{position:absolute;right:10px;top:4px;color:#5b6266}.form-list-wrapper ul[data-collection-holder] li .item-actions .fa-trash-o{cursor:pointer}.form-list-wrapper .collection-actions{text-align:right}.form-label.block{z-index:10000}.form-label.block:hover{z-index:10005}#admin-main .admin-block h2{font-size:1.25rem;margin:0 0 .5rem;letter-spacing:normal}.form-fieldset{background-color:#f7f7f7;border:2px solid #e1e1e1;margin:1rem 2rem}.form-fieldset--label{background-color:#f3f3f3}.form-fieldset--label:hover,.form-fieldset input:checked+.form-fieldset--label{background-color:#eee}.form-fieldset--label label{display:table;font-size:1.25rem;padding:.5rem 1rem;width:100%}.form-fieldset--label h2{margin:0 !important}.form-fieldset--label .actions{font-size:initial;display:table-cell;text-align:right;vertical-align:middle}.form-fieldset--label+.form-data{margin-top:1rem;padding:0}.form-fieldset--cursor{cursor:pointer}.form-fieldset--info{font-size:small}.form-fieldset>input:checked ~ .form-data,.form-fieldset--collapsible .open,.form-fieldset input:checked ~ .form-label .form-fieldset--collapsible .close{display:block}.form-fieldset>.form-data,.form-fieldset--collapsible .close,.form-fieldset input:checked ~ .form-label .form-fieldset--collapsible .open{display:none}table,tbody,thead{display:inline-block;width:100%}.gpm-details{width:100%;-webkit-box-flex:auto;-moz-box-flex:auto;box-flex:auto;-webkit-flex:auto;-moz-flex:auto;-ms-flex:auto;flex:auto}td{border:0;border-bottom:1px solid #e1e1e1}tr{-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;transition:all 0.2s ease;display:-webkit-box;display:-moz-box;display:box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-lines:multiple;-moz-box-lines:multiple;box-lines:multiple;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}tr th{display:block;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1;font-weight:bold}tr th:first-child{padding-left:3rem}tr th:last-child{padding-right:3rem}tr td{display:block;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1}tr td.double{-webkit-box-flex:2;-moz-box-flex:2;box-flex:2;-webkit-flex:2;-moz-flex:2;-ms-flex:2;flex:2}tr td:first-child{padding-left:3rem}@media only all and (max-width: 47.938em){tr td:first-child{padding-left:.5rem}tr td:first-child .plugin-update-button{float:left}}tr td:last-child,tr td.gpm-actions{padding-right:3rem}tr td.gpm-actions{line-height:1;text-align:right;position:relative}tr td.gpm-actions .gpm-details-expand{position:absolute;top:12px;right:12px}tr td.gpm-details{margin:0;padding:0;background-color:#f7f7f7}@media only all and (max-width: 47.938em){tr td.gpm-details{word-wrap:break-word}}tr td.gpm-details>.table-wrapper{display:none}tr td.gpm-details>.table-wrapper td{border-bottom:0}tr td.gpm-details tbody{width:100%}tr:last-child td{border-bottom:0}tr:hover{background:#f3f3f3}.k-calendar-container table,.k-calendar-container tbody,.k-calendar-container thead{width:100%}.k-calendar-container thead th:first-child{padding-left:0}.k-calendar-container thead th:last-child{padding-right:0.5rem}.button{background:#41bea8;color:rgba(255,255,255,0.85);border-radius:4px}.button:hover{background:#54c5b0;color:#fff}.button.dropdown-toggle{background:#54c5b0;border-left:1px solid #3bab97}.button.dropdown-toggle{border-left:1px solid #3bab97}.button.secondary{background:#2a7a6b;color:rgba(255,255,255,0.85);border-radius:4px}.button.secondary:hover{background:#318d7c;color:#fff}.button.secondary.dropdown-toggle{background:#318d7c;border-left:1px solid #23675a}.button.secondary.dropdown-toggle{border-left:1px solid #318d7c}.button-group{position:relative;display:inline-block;vertical-align:middle}.button-group>.button:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.button-group>.button:first-child{margin-left:0 !important}.button-group>.button{position:relative;float:left}.button-group>.button+.dropdown-toggle{text-align:center;padding-right:8px;padding-left:8px}.button-group>.button+.dropdown-toggle i{margin:0}.button-group>.button:last-child:not(:first-child),.button-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.button-group .button+.button,.button-group .button+.button-group,.button-group .button-group+.button,.button-group .button-group+.button-group{margin-left:-1px}.button-group .dropdown-menu{position:absolute;top:100%;left:0;right:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#41bea8;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #3bab97;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175)}.button-group .dropdown-menu.language-switcher{min-width:auto}.button-group .dropdown-menu.lang-switcher{min-width:150px;left:inherit}.button-group .dropdown-menu.lang-switcher button{width:100%}.button-group .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#349886}.button-group .dropdown-menu li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#fff;white-space:nowrap}.button-group .dropdown-menu li>a:focus,.button-group .dropdown-menu li>a:hover{color:#fff;text-decoration:none;background-color:#349886}.button-group .dropdown-menu.language-switcher a.active{background-color:#349886}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}#error{text-align:center;display:flex;align-items:center;justify-content:center;height:100%;padding-bottom:6rem}#error h1{font-size:5rem}#error p{margin:1rem 0}#admin-login{background:#253A47;max-width:24rem;margin:0 auto}#admin-login .form-field{padding-left:0;margin-bottom:0}#admin-login .form-label{display:none}#admin-login .form-data{padding-right:0}#admin-login h1{background:#21333e url(../images/logo.png) 50% 50% no-repeat;font-size:0;color:transparent;height:216px;margin:0}#admin-login form{padding:2rem 3rem}#admin-login form input{margin-bottom:2rem;background:#314D5B;color:#fff;font-size:1.4rem;line-height:1.5;text-align:center;font-weight:300;-webkit-font-smoothing:auto;border:1px solid #1e2e39}#admin-login form input::-webkit-input-placeholder{color:#83949d}#admin-login form input::-moz-placeholder{color:#83949d}#admin-login form input:-moz-placeholder{color:#83949d}#admin-login form input:-ms-input-placeholder{color:#83949d}#admin-login form .form-actions{text-align:center;margin:0 -3rem -3rem -3rem;padding:1.5rem 3rem}#admin-login form .form-actions button:first-child{margin-right:1rem}#admin-login .alert{text-align:center;padding:1rem 3rem}#admin-sidebar{position:absolute;left:0;top:0;bottom:0;width:20%;background:#253A47}@media only all and (max-width: 47.938em){#admin-sidebar{display:none;width:75%;z-index:999999}}#admin-sidebar a{color:#ccc}#admin-sidebar a:hover{color:#fff}#admin-logo{background:#21333e;height:4.2rem}#admin-logo h3{text-transform:uppercase;margin:0;text-align:center;font-size:1.2rem}#admin-logo h3 i{font-size:1rem;vertical-align:middle;margin-top:-1px}#admin-user-details{padding:2rem;border-bottom:1px solid #21333e;overflow:hidden}#admin-user-details img{-webkit-transition:all 0.5s ease;-moz-transition:all 0.5s ease;transition:all 0.5s ease;border-radius:100%;float:left}@media only all and (min-width: 48em) and (max-width: 59.938em){#admin-user-details img{float:none}}#admin-user-details:hover img{box-shadow:0px 0px 0 50px #2a4251}#admin-user-details .admin-user-names{margin-left:45px}@media only all and (min-width: 48em) and (max-width: 59.938em){#admin-user-details .admin-user-names{margin-left:0}}#admin-user-details .admin-user-names h4,#admin-user-details .admin-user-names h5{color:#e6e6e6;margin:0;font-size:1rem;line-height:1.3}#admin-user-details .admin-user-names h5{font-family:"Lato","Helvetica","Tahoma","Geneva","Arial",sans-serif;color:#afc7d5;font-size:0.9rem}#admin-menu{display:block;margin:0;padding:0;list-style:none}#admin-menu li{font-family:"Montserrat","Helvetica","Tahoma","Geneva","Arial",sans-serif}#admin-menu li .badges{float:right;margin-right:1rem}#admin-menu li .badges .badge{display:inline-block;margin-right:-5px;color:#e6e6e6}#admin-menu li .badges .count{background-color:#365569}#admin-menu li .badges .updates{background-color:#2693B7;display:none}#admin-menu li .badges.with-updates .count{border-bottom-left-radius:0;border-top-left-radius:0}#admin-menu li .badges.with-updates .updates{border-bottom-right-radius:0;border-top-right-radius:0;display:inline-block}#admin-menu li a{-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;transition:all 0.2s ease;display:block;padding-left:25px;padding-top:0.7rem;padding-bottom:0.7rem;color:#d1dee7}@media only all and (min-width: 48em) and (max-width: 59.938em){#admin-menu li a{padding-left:20px}}#admin-menu li a i{-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;transition:all 0.2s ease;color:#afc7d5;margin-right:8px}@media only all and (min-width: 48em) and (max-width: 59.938em){#admin-menu li a i{display:none}}#admin-menu li a:hover{background:#21333e;color:#fff}#admin-menu li a:hover i{font-size:1.2rem}#admin-menu li.selected a{background:#314D5B;color:#fff;padding-left:16px;border-left:9px solid #349886}@media only all and (min-width: 48em) and (max-width: 59.938em){#admin-menu li.selected a{padding-left:11px}}#admin-menu li.selected a i{color:#e1eaf0}#admin-main{margin-left:20%}@media only all and (max-width: 47.938em){#admin-main{width:100%;margin-left:0}}#admin-main .hint:after,#admin-main [data-hint]:after{font-size:0.9rem;width:400px;line-height:inherit;white-space:normal}#admin-main h1{margin:0;font-size:1.5rem;text-align:left;letter-spacing:-1px}#admin-main .titlebar{position:relative;height:4.2rem;padding:0 3rem}@media only all and (max-width: 47.938em){#admin-main .titlebar h1{-webkit-transform:inherit;-moz-transform:inherit;-ms-transform:inherit;-o-transform:inherit;transform:inherit;top:5px;font-size:1.2rem}#admin-main .titlebar h1>i:first-child:before{content:"\f0c9"}}#admin-main .titlebar .button-bar{padding:0}@media only all and (max-width: 47.938em){#admin-main .titlebar .button-bar{-webkit-transform:inherit;-moz-transform:inherit;-ms-transform:inherit;-o-transform:inherit;transform:inherit;top:inherit;bottom:5px;position:absolute;right:1rem}}#admin-main .titlebar .preview{color:#fff;font-size:90%}#admin-main .titlebar .button{padding:0.3rem 0.6rem}@media only all and (max-width: 47.938em){#admin-main .titlebar .button{padding:0.2rem 0.5rem;font-size:0.9rem}}#admin-main .titlebar .button i{font-size:13px}#admin-main .admin-block .grav-update,#admin-main .admin-block .alert{margin-top:-2rem;margin-bottom:2rem}#admin-main .grav-update{padding:0 3rem;margin-top:-3rem;background:#9055AF;color:#fff}#admin-main .grav-update:after{content:"";display:table;clear:both}#admin-main .grav-update.plugins{padding-right:1rem}#admin-main .grav-update .button{float:right;margin-top:0.6rem;margin-left:1rem;line-height:1.5;background:#73448c;color:rgba(255,255,255,0.85);border-radius:4px}#admin-main .grav-update .button:hover{background:#814c9d;color:#fff}#admin-main .grav-update .button.dropdown-toggle{background:#814c9d;border-left:1px solid #653c7b}#admin-main .grav-update p{line-height:3rem;margin:0}#admin-main .grav-update i{padding-right:0.5rem}#admin-main .grav-update .less{color:rgba(255,255,255,0.75)}#admin-main .grav-update.grav{margin-top:0;-webkit-transition:margin-top 0.15s ease-out;-moz-transition:margin-top 0.15s ease-out;transition:margin-top 0.15s ease-out}@media only all and (max-width: 47.938em){#admin-main .grav-update.grav{position:absolute;z-index:9;bottom:0;width:100%}#admin-main .grav-update.grav p *{display:none}#admin-main .grav-update.grav p{font-size:0}#admin-main .grav-update.grav p button{width:95%;display:inherit;position:absolute;top:0;left:0;margin-left:2.5%;margin-right:2.5%;padding-left:0}}#admin-main .grav-update.grav+.content-padding{top:7.2rem;-webkit-transition:top 0.15s ease-out;-moz-transition:top 0.15s ease-out;transition:top 0.15s ease-out}@media only all and (max-width: 47.938em){#admin-main .grav-update.grav+.content-padding{top:5.2rem;padding-bottom:8rem;padding-top:0rem}}#admin-main .content-padding{position:absolute;top:4.2rem;bottom:0;left:20%;right:0;overflow-y:auto;padding:2.5rem}@media only all and (max-width: 47.938em){#admin-main .content-padding{left:0}}#admin-main .admin-block{background:#eee;color:#737C81;padding:2rem 0}#admin-main .admin-block h1{color:#314D5B;padding:0 3rem 0.5rem;margin:0 0 1rem;border-bottom:3px solid #e1e1e1}@media only all and (max-width: 47.938em){#admin-main .admin-block h1{padding:0 0 0.5rem;margin:0 0 1rem !important;text-indent:3rem}}#admin-main .admin-block h1.no_underline{border-bottom:0}#admin-main .admin-block .button-bar{margin-right:3rem}@media only all and (max-width: 47.938em){#admin-main .admin-block .button-bar{width:100%;margin:-.5rem 0 1rem 0;text-align:center}#admin-main .admin-block .button-bar .button{width:100%}}#admin-main .flush-bottom.button-bar{margin:1rem -2rem -1rem;height:70px;padding:0 1rem;float:none}@media only all and (max-width: 47.938em){#admin-main .flush-bottom.button-bar{height:auto;padding:2rem 1rem 0rem 1rem}}@media only all and (max-width: 47.938em){#admin-main .flush-bottom.button-bar .button{margin-left:0 !important;margin-bottom:.5rem;width:100%}}#admin-main .danger,#admin-main .success{position:relative}#admin-main .danger.button-bar,#admin-main .success.button-bar{margin:2rem 0 -2rem;height:70px;padding:1rem;float:none;background:#e9e9e9}#admin-main .danger.button-bar .button{background:#DA4B46;color:rgba(255,255,255,0.85);border-radius:4px}#admin-main .danger.button-bar .button:hover{background:#de605b;color:#fff}#admin-main .danger.button-bar .button.dropdown-toggle{background:#de605b;border-left:1px solid #d63631}#admin-dashboard:after{content:"";display:table;clear:both}#admin-dashboard .dashboard-item{float:left;width:50%;margin-bottom:2.5rem}@media only all and (max-width: 47.938em){#admin-dashboard .dashboard-item{width:100%}}#admin-dashboard .dashboard-item>div{padding:1rem 2rem}#admin-dashboard .dashboard-left{padding-right:1.25rem}@media only all and (max-width: 47.938em){#admin-dashboard .dashboard-left{padding-right:0rem}}#admin-dashboard .dashboard-right{padding-left:1.25rem}@media only all and (max-width: 47.938em){#admin-dashboard .dashboard-right{padding-left:0rem}}#admin-dashboard #updates p{text-align:center;color:rgba(255,255,255,0.96);margin:0}#admin-dashboard #updates .updates-chart{width:50%;float:left}#admin-dashboard #updates .chart-wrapper{position:relative}#admin-dashboard #updates .backups-chart{position:relative;width:50%;float:left}#admin-dashboard #updates .numeric{display:block;position:absolute;width:100%;text-align:center;font-size:1.7rem;line-height:1}#admin-dashboard #updates .numeric em{display:block;font-style:normal;font-size:1rem;color:rgba(255,255,255,0.85)}#admin-dashboard #updates .admin-update-charts{min-height:191px}#admin-dashboard #updates .admin-update-charts:after{content:"";display:table;clear:both}#admin-dashboard #updates .button{margin-left:0.5rem}@media only all and (min-width: 48em) and (max-width: 59.938em){#admin-dashboard #updates .button{width:49%;padding:.3rem 0rem;margin-left:0}}#admin-dashboard #popularity p{text-align:center;color:rgba(255,255,255,0.95);margin:0}#admin-dashboard #popularity .button-bar{height:100px;padding:0 1rem}#admin-dashboard #popularity .stat{display:block;float:left;width:33%;text-align:center}#admin-dashboard #popularity .stat b{display:block;font-size:2.5rem;line-height:1;font-weight:300}#admin-dashboard #popularity .stat i{display:block;font-style:normal;color:rgba(255,255,255,0.75)}#admin-dashboard .tertiary-accent{background-color:#2693B7;background-image:-webkit-linear-gradient(#2693B7,#64c0df);background-image:linear-gradient(#2693B7,#64c0df)}#admin-dashboard .secondary-accent{background-color:#349886;background-image:-webkit-linear-gradient(#349886,#67cbb9);background-image:linear-gradient(#349886,#67cbb9)}.no-flick,.card-item{-webkit-transform:translate3d(0, 0, 0)}.card-row{-webkit-box-pack:justify;-moz-box-pack:justify;box-pack:justify;-webkit-justify-content:space-between;-moz-justify-content:space-between;-ms-justify-content:space-between;-o-justify-content:space-between;justify-content:space-between;-ms-flex-pack:justify}.card-item{overflow:hidden;padding:1rem;margin:0;position:relative;width:31%;border:1px solid #e1e1e1;background:#fff;margin-bottom:2rem}@media only all and (min-width: 48em) and (max-width: 59.938em){.card-item{width:48%}}@media only all and (max-width: 47.938em){.card-item{width:100%}}.card-item h4{font-size:1.2rem;line-height:1.2}.user-details{text-align:center}.user-details img{border-radius:100%}.user-details h2{margin:0;font-size:1.8rem}.user-details h5{color:#8d959a;font-size:1.1rem;margin:0}#footer{text-align:center;padding:3rem 0 1rem}.ct-chart .ct-series .ct-bar{stroke-width:20px}.ct-chart .ct-series.ct-series-a .ct-bar{stroke:rgba(255,255,255,0.85) !important}.ct-chart .ct-series.ct-series-a .ct-slice-donut{stroke:#fff !important}.ct-chart .ct-series.ct-series-b .ct-slice-donut{stroke:rgba(255,255,255,0.2) !important}#popularity .ct-chart{margin:0 -10px -10px}#popularity .ct-chart .ct-chart-bar{padding:10px}#latest .page-title,#latest .page-route{overflow:auto}#latest .last-modified{padding-left:10px}#overlay{position:fixed;width:25%;height:100%;z-index:999999;left:75%;top:0;display:none}.pages-list{list-style:none;margin:0;padding:0;border-top:1px solid #e1e1e1}.pages-list ul{list-style:none;margin:0;padding:0}.pages-list li{margin:0;padding:0}.pages-list .row{-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;transition:all 0.2s ease;border-bottom:1px solid #e1e1e1;line-height:2.5rem;padding-right:3rem}.pages-list .row:hover{background:#f3f3f3}.pages-list .row p.page-route{display:block;margin:-10px 0 5px 25px;line-height:1;font-size:0.9rem;color:#888;text-shadow:1px 1px 0 #fff}.pages-list .row p.page-route .spacer{color:#d5d5d5;display:inline-block;margin:0 0.3rem}.pages-list .row .hint--bottom:before,.pages-list .row .hint--bottom:after{left:4px}.pages-list .row .hint:after,.pages-list .row [data-hint]:after{border-radius:2px}.pages-list .row .badge.lang{background-color:#aaa;color:white;margin-left:8px}.pages-list .row .badge.lang.info{background-color:#9055AF}.pages-list .page-tools{display:inline-block;float:right;font-size:1.4rem}.pages-list .page-tools i{margin-left:10px}.pages-list .page-home{font-size:1.4rem;margin-left:10px;color:#bbb;vertical-align:middle}.pages-list .page-info{font-size:1.1rem;margin-left:10px;color:#bbb;vertical-align:middle}.pages-list .page-icon{color:#0082BA;font-weight:700}.pages-list .page-icon.children-open:before{content:'\f056'}.pages-list .page-icon.children-closed:before{content:'\f055'}.pages-list .page-icon.not-routable{color:#CE431D}.pages-list .page-icon.not-visible{color:#999}.pages-list .page-icon.modular{color:#9055AF}#page-filtering{margin:-2rem 3rem 1rem}#page-filtering:after{content:"";display:table;clear:both}#page-filtering .page-filters{width:60%;float:left}@media only all and (max-width: 47.938em){#page-filtering .page-filters{width:100%}}#page-filtering .page-search{position:relative;width:40%;float:left;padding-left:2rem;text-indent:2.5rem}#page-filtering .page-search:after{position:absolute;right:15px;top:10px;content:'\f002';font-family:'FontAwesome'}@media only all and (max-width: 47.938em){#page-filtering .page-search{width:100%;padding-top:1rem;padding-left:0rem}#page-filtering .page-search:after{top:1.5rem}}#page-filtering .page-shortcuts{clear:both;padding-top:5px}#page-filtering .page-shortcuts:after{content:"";display:table;clear:both}#page-filtering .page-shortcuts .button{background:#aaa;color:rgba(255,255,255,0.85);border-radius:4px}#page-filtering .page-shortcuts .button:hover{background:#b7b7b7;color:#fff}#page-filtering .page-shortcuts .button.dropdown-toggle{background:#b7b7b7;border-left:1px solid #9d9d9d}#page-filtering .selectize-control.multi .selectize-input{padding:0.425rem 0.425rem}#page-filtering .selectize-control.multi .selectize-input.has-items{padding-top:6px;padding-bottom:4px}#page-filtering .selectize-control.multi .selectize-input input{font-size:1rem;line-height:1.7}#page-filtering .selectize-control.multi .selectize-input>div,#page-filtering .selectize-control.multi .selectize-input>div.active{color:#777;padding:2px 10px}#page-filtering .selectize-control.multi .selectize-input>div[data-value='Routable'],#page-filtering .selectize-control.multi .selectize-input>div.active[data-value='Routable']{background:#CE431D;color:#fff}#page-filtering .selectize-control.multi .selectize-input>div[data-value='NonRoutable'],#page-filtering .selectize-control.multi .selectize-input>div.active[data-value='NonRoutable']{color:#CE431D}#page-filtering .selectize-control.multi .selectize-input>div[data-value='Visible'],#page-filtering .selectize-control.multi .selectize-input>div.active[data-value='Visible']{background:#71B15E;color:#fff}#page-filtering .selectize-control.multi .selectize-input>div[data-value='NonVisible'],#page-filtering .selectize-control.multi .selectize-input>div.active[data-value='NonVisible']{color:#71B15E}#page-filtering .selectize-control.multi .selectize-input>div[data-value='Modular'],#page-filtering .selectize-control.multi .selectize-input>div.active[data-value='Modular']{background:#9055AF;color:#fff}#page-filtering .selectize-control.multi .selectize-input>div[data-value='NonModular'],#page-filtering .selectize-control.multi .selectize-input>div.active[data-value='NonModular']{color:#9055AF}#page-filtering .selectize-control.multi .selectize-input>div[data-value='Published'],#page-filtering .selectize-control.multi .selectize-input>div.active[data-value='Published']{background:#0093B8;color:#fff}#page-filtering .selectize-control.multi .selectize-input>div[data-value='NonPublished'],#page-filtering .selectize-control.multi .selectize-input>div.active[data-value='NonPublished']{color:#0093B8}.admin-form-wrapper{position:relative}#admin-topbar{position:absolute;right:0.5rem;height:3.5rem}@media only all and (max-width: 47.938em){#admin-topbar{width:100%;right:0;top:.25rem;padding:0 .5rem}}#admin-topbar #admin-mode-toggle,#admin-topbar #admin-lang-toggle{height:37px;display:inline-block;vertical-align:inherit}@media only all and (max-width: 47.938em){#admin-topbar #admin-mode-toggle,#admin-topbar #admin-lang-toggle{width:100%}}#admin-topbar #admin-lang-toggle{z-index:10}#admin-topbar #admin-lang-toggle button{background:#73448c;color:rgba(255,255,255,0.85);border-radius:4px}#admin-topbar #admin-lang-toggle button:hover{background:#814c9d;color:#fff}#admin-topbar #admin-lang-toggle button.dropdown-toggle{background:#814c9d;border-left:1px solid #653c7b}#admin-topbar #admin-lang-toggle .dropdown-menu{background:#9055AF}#admin-topbar #admin-lang-toggle .dropdown-menu button{background:transparent;color:#fff;width:100%}#admin-topbar .switch-grav{border:0;background-color:#365569}@media only all and (max-width: 47.938em){#admin-topbar .switch-toggle{width:100%}}#admin-topbar .switch-toggle input:checked+label{color:#fff}#admin-topbar .switch-toggle input+label{color:#d1dee7}#admin-topbar .switch-toggle input.highlight:checked ~ a{background:#3aafd6}body .selectize-dropdown .optgroup-header{color:#000;border-bottom:1px solid #eee;background-color:#fafafa}.depth-0 .row{padding-left:3rem}.depth-1 .row{padding-left:6rem}.depth-2 .row{padding-left:9rem}.depth-3 .row{padding-left:12rem}.depth-4 .row{padding-left:15rem}.depth-5 .row{padding-left:18rem}.depth-6 .row{padding-left:21rem}.depth-7 .row{padding-left:24rem}.depth-8 .row{padding-left:27rem}.depth-9 .row{padding-left:30rem}.hidden{display:none !important}.switch-toggle input[type="radio"]{display:none !important}html.remodal_lock,body.remodal_lock{overflow:hidden}.remodal,[data-remodal-id]{visibility:hidden}.remodal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10000;display:none;overflow:auto;-webkit-overflow-scrolling:touch;text-align:center}.remodal-overlay:after{display:inline-block;height:100%;margin-left:-0.05em;content:''}.remodal-overlay>*{-webkit-transform:translateZ(0px)}.remodal{position:relative;display:inline-block;text-align:left}.remodal-bg{-webkit-transition-property:filter;-moz-transition-property:filter;transition-property:filter;-webkit-transition-duration:0.2s;-moz-transition-duration:0.2s;transition-duration:0.2s;-webkit-transition-timing-function:linear;-moz-transition-timing-function:linear;transition-timing-function:linear}.remodal-overlay{opacity:0;background:rgba(33,36,46,0.8);-webkit-transition:opacity 0.2s linear;-moz-transition:opacity 0.2s linear;transition:opacity 0.2s linear}body.remodal_active .remodal-overlay{opacity:1}.remodal{width:100%;min-height:100%;padding-top:2rem;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:16px;background:#eee;background-clip:padding-box;color:#737C81;box-shadow:0 10px 20px rgba(0,0,0,0.5);-webkit-transform:scale(0.95);-moz-transform:scale(0.95);-ms-transform:scale(0.95);-o-transform:scale(0.95);transform:scale(0.95);-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;transition-property:transform;-webkit-transition-duration:0.2s;-moz-transition-duration:0.2s;transition-duration:0.2s;-webkit-transition-timing-function:linear;-moz-transition-timing-function:linear;transition-timing-function:linear}body.remodal_active .remodal{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.remodal,.remodal-overlay:after{vertical-align:middle}.remodal-close{position:absolute;top:10px;right:10px;color:#737C81;text-decoration:none;text-align:center;-webkit-transition:background 0.2s linear;-moz-transition:background 0.2s linear;transition:background 0.2s linear}.remodal-close:after{display:block;font-family:FontAwesome;content:"\f00d";font-size:28px;line-height:28px;cursor:pointer;text-decoration:none}.remodal-close:hover,.remodal-close:active{color:#43484b}@media only screen and (min-width: 40.063em){.remodal{max-width:700px;margin:20px auto;min-height:0;border-radius:6px}}.tab-bar{background:#253A47;margin:0;padding:0;list-style:none;font-family:"Montserrat","Helvetica","Tahoma","Geneva","Arial",sans-serif}.tab-bar:after{content:"";display:table;clear:both}.tab-bar li{display:block;float:left;height:3.5em}.tab-bar li.active span,.tab-bar li.active a{background:#eee;color:#737C81}@media only all and (max-width: 47.938em){.tab-bar li{width:100%}.tab-bar li span,.tab-bar li a{width:100%;text-align:center}}.tab-bar span,.tab-bar a{display:inline-block;padding:0 4rem;line-height:3.5em;color:#d1dee7}.tab-bar span:hover,.tab-bar a:hover{color:#fff;background:#141f25}@-webkit-keyframes show{from{opacity:0}to{opacity:1}}@-moz-keyframes show{from{opacity:0}to{opacity:1}}@keyframes show{from{opacity:0}to{opacity:1}}.form-tabs{background:#253A47;font-family:"Montserrat","Helvetica","Tahoma","Geneva","Arial",sans-serif;margin-top:-4rem}@media only all and (max-width: 47.938em){.form-tabs{padding-top:4rem}}.form-tabs>input[type=radio]{display:none}.form-tabs>input[type=radio]:checked+label{background:#eee;color:#737C81}.form-tabs>label{display:inline-block;cursor:pointer;color:#d1dee7;height:3.5em;text-align:center;line-height:3.5em;padding:0 2rem}@media only all and (max-width: 47.938em){.form-tabs>label{width:100%}}.form-tabs>label:last-of-type{border-bottom:none}.form-tabs>label:hover{color:#fff;background:#2a4251}.tab-body{position:absolute;top:-9999px;opacity:0;width:100%}.tab-body-wrapper{padding-top:3.5em;background:#eee}#tab1:checked ~ .tab-body-wrapper #tab-body-1,#tab2:checked ~ .tab-body-wrapper #tab-body-2,#tab3:checked ~ .tab-body-wrapper #tab-body-3,#tab4:checked ~ .tab-body-wrapper #tab-body-4,#tab5:checked ~ .tab-body-wrapper #tab-body-5,#tab6:checked ~ .tab-body-wrapper #tab-body-6,#tab7:checked ~ .tab-body-wrapper #tab-body-7,#tab8:checked ~ .tab-body-wrapper #tab-body-8,#tab9:checked ~ .tab-body-wrapper #tab-body-9,#tab10:checked ~ .tab-body-wrapper #tab-body-10{position:relative;top:0px;opacity:1}.grav-mdeditor .CodeMirror-scroll{margin-right:-36px;padding-bottom:36px}.grav-mdeditor-fullscreen{position:fixed;top:0;left:0;bottom:0;right:0;z-index:1500}.grav-mdeditor-fullscreen .grav-mdeditor-content,.grav-mdeditor-fullscreen .grav-mdeditor-code,.grav-mdeditor-fullscreen .CodeMirror-wrap,.grav-mdeditor-fullscreen .grav-mdeditor-preview{height:100% !important}.grav-mdeditor-fullscreen .grav-mdeditor-navbar,.grav-mdeditor-fullscreen .grav-mdeditor-navbar ul li:first-child a,.grav-mdeditor-fullscreen .grav-mdeditor-navbar-flip ul li:last-child a{border-radius:0}.grav-mdeditor-navbar{border:1px solid #d5d5d5;border-top-right-radius:4px;border-top-left-radius:4px;background:#fbfbfb}.grav-mdeditor-navbar:after{content:"";display:table;clear:both}.grav-mdeditor-navbar ul{list-style:none;margin:0;padding:0}.grav-mdeditor-navbar ul li{float:left}.grav-mdeditor-navbar ul li:first-child a{border-top-left-radius:4px}.grav-mdeditor-navbar ul .mdeditor-active a{background:white;cursor:auto;border-left:1px solid #d5d5d5;border-right:1px solid #d5d5d5}.grav-mdeditor-navbar ul .mdeditor-active a:hover{background:#fff}.grav-mdeditor-navbar ul a{display:block;cursor:pointer;line-height:3rem;height:3rem;padding:0 1rem;color:#737C81}.grav-mdeditor-navbar ul a:hover{background:#f3f3f3;color:#5b6266}.grav-mdeditor-navbar-nav{float:left}.grav-mdeditor-navbar-flip{float:right}.grav-mdeditor-navbar-flip ul li:last-child a{border-top-right-radius:4px}.grav-mdeditor-content{border:1px solid #d5d5d5;border-top:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.grav-mdeditor-content:after{content:"";display:table;clear:both}.grav-mdeditor-code .CodeMirror{padding:10px 20px 20px 20px;border-bottom-left-radius:4px}.grav-mdeditor-preview{padding:20px;overflow-y:scroll;position:relative;background:#fbfbfb;border-bottom-right-radius:4px}.grav-mdeditor-navbar p{margin-top:10px;margin-bottom:10px;padding-left:20px}#admin-main .grav-mdeditor-preview{font-family:"Lato","Helvetica","Tahoma","Geneva","Arial",sans-serif}#admin-main .grav-mdeditor-preview h1,#admin-main .grav-mdeditor-preview h2,#admin-main .grav-mdeditor-preview h3,#admin-main .grav-mdeditor-preview h4,#admin-main .grav-mdeditor-preview h5,#admin-main .grav-mdeditor-preview h6{color:#5b6266}#admin-main .grav-mdeditor-preview h1{font-size:2rem;border:0}#admin-main .grav-mdeditor-preview h2{font-size:1.6rem}#admin-main .grav-mdeditor-preview h3{font-size:1.4rem}#admin-main .grav-mdeditor-preview h4{font-size:1.2rem}#admin-main .grav-mdeditor-preview h5{font-size:1.1rem}#admin-main .grav-mdeditor-preview p,#admin-main .grav-mdeditor-preview h1{padding:0}[data-mode=tab][data-active-tab=code] .grav-mdeditor-preview,[data-mode=tab][data-active-tab=preview] .grav-mdeditor-code{display:none}[data-mode=split] .grav-mdeditor-button-code,[data-mode=split] .grav-mdeditor-button-preview{display:none}[data-mode=split] .grav-mdeditor-code{border-right:1px solid #d5d5d5}[data-mode=split] .grav-mdeditor-code,[data-mode=split] .grav-mdeditor-code .grav-mdeditor-preview{float:left;width:50%}.cm-s-paper.CodeMirror{color:#676f74;font-size:14px;line-height:1.4}.cm-s-paper.CodeMirror pre{font-family:"DejaVu Sans Mono", Menlo, Monaco, Consolas, Courier, monospace}.cm-s-paper .cm-link{color:#005e87}.cm-s-paper .cm-comment{color:#80898e}.cm-s-paper .cm-header{color:#4f5559}.cm-s-paper .cm-strong{color:#5b6266}.cm-s-paper .cm-em{color:#4f5559}.cm-s-paper .cm-string{color:#0082BA}.cm-s-paper .cm-tag{color:#349886}.cm-s-paper .cm-bracket{color:#41bea8}.cm-s-paper .cm-variable{color:#4f5559}.cm-s-paper .cm-variable-2{color:#80898e}.cm-s-paper .cm-variable-3{color:#8d959a}.cm-s-paper .cm-hr{color:#d1d4d6;font-weight:bold}.cm-s-paper .cm-keyword{color:#0082BA}.cm-s-paper .cm-atom{color:#9055AF}.cm-s-paper .cm-meta{color:#676f74}.cm-s-paper .cm-number{color:#7f8c8d}.cm-s-paper .cm-def{color:#00f}.cm-s-paper .cm-variable{color:black}.cm-s-paper .cm-variable-2{color:#555}.cm-s-paper .cm-variable-3{color:#085}.cm-s-paper .cm-property{color:black}.cm-s-paper .cm-operator{color:black}.cm-s-paper .cm-string-2{color:#f50}.cm-s-paper .cm-meta{color:#555}.cm-s-paper .cm-error{color:#f00}.cm-s-paper .cm-qualifier{color:#555}.cm-s-paper .cm-builtin{color:#555}.cm-s-paper .cm-attribute{color:#7f8c8d}.cm-s-paper .cm-quote{color:#888}.cm-s-paper .cm-header-1{font-size:140%}.cm-s-paper .cm-header-2{font-size:120%}.cm-s-paper .cm-header-3{font-size:110%}.cm-s-paper .cm-negative{color:#d44}.cm-s-paper .cm-positive{color:#292}.cm-s-paper .cm-header,.cm-s-paper .cm-strong{font-weight:bold}.cm-s-paper .cm-em{font-style:italic}.cm-s-paper .cm-link{text-decoration:underline}.cm-s-paper .cm-invalidchar{color:#f00}.form-uploads-wrapper h3{font-size:1rem;margin:2rem 0 0.5rem 0}.dropzone{position:relative;border:1px #d5d5d5 solid;border-radius:4px;min-height:4rem;background:#fff}.dropzone.dz-clickable{cursor:pointer}.dropzone.dz-drag-hover{border-color:rgba(0,0,0,0.15);background:rgba(0,0,0,0.04)}.dropzone.dz-started .dz-message{display:none}.dropzone .dz-message{opacity:1;-ms-filter:none;filter:none}.dropzone .dz-preview{position:relative;display:inline-block;margin:1rem;vertical-align:top}.dropzone .dz-preview.dz-file-preview [data-dz-thumbnail]{display:none}.dropzone .dz-preview.dz-error .dz-error-mark{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{display:block}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{color:#fff;font-family:FontAwesome;display:none;position:absolute;width:22px;height:22px;font-size:18px;line-height:25px;border-radius:100%;text-align:center;right:2px;top:2px}.dropzone .dz-preview .dz-success-mark span,.dropzone .dz-preview .dz-error-mark span{display:none}.dropzone .dz-preview:hover .dz-success-mark,.dropzone .dz-preview:hover .dz-error-mark{display:none}.dropzone .dz-preview .dz-success-mark{background-color:#41bea8}.dropzone .dz-preview .dz-success-mark::after{content:'\f00c'}.dropzone .dz-preview .dz-error-mark{background-color:#D55A4E}.dropzone .dz-preview .dz-error-mark::after{content:'\f12a'}.dropzone .dz-preview .dz-progress{position:absolute;top:100px;left:0px;right:0px;height:4px;background:#d7d7d7;display:none}.dropzone .dz-preview .dz-progress .dz-upload{display:block;position:absolute;top:0;bottom:0;left:0;width:0%;background-color:#41bea8}.dropzone .dz-preview .dz-error-message{display:none;position:absolute;top:0;left:0;right:0;font-size:0.9rem;line-height:1.2;padding:8px 10px;background:#f6f6f6;color:#D55A4E;z-index:500}.dropzone .dz-preview.dz-processing .dz-progress{display:block}.dropzone .dz-preview:hover:not(.hide-backface) .dz-details img{display:none}.dropzone .dz-preview:hover.dz-error .dz-error-message{display:block}.dropzone .dz-preview .dz-remove,.dropzone .dz-preview .dz-insert{display:none}.dropzone .dz-preview:hover .dz-remove,.dropzone .dz-preview:hover .dz-insert{display:block;position:absolute;left:0;right:0;bottom:22px;border:1px solid #e1e1e1;width:50%;text-align:center;cursor:pointer;font-size:0.8rem}.dropzone .dz-preview:hover .dz-remove:hover,.dropzone .dz-preview:hover .dz-insert:hover{background:#eee}.dropzone .dz-preview:hover .dz-remove{left:inherit;border-left:0}.dropzone .dz-preview:hover .dz-insert{right:inherit}.dropzone .dz-preview.dz-processing .dz-details{overflow:hidden}.dropzone .dz-preview.dz-processing .dz-details img{position:absolute;left:50%;top:50%;height:auto;width:100%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.dropzone .dz-preview .dz-details{width:150px;height:100px;position:relative;background:#f6f6f6;border:1px solid #e1e1e1;font-size:0.8rem;padding:5px;margin-bottom:22px}.dropzone .dz-preview .dz-details .dz-filename{line-height:1.2;overflow:hidden;height:100%}.dropzone .dz-preview .dz-details img{position:absolute;top:0;left:0;width:150px;height:100px}.dropzone .dz-preview .dz-details .dz-size{position:absolute;bottom:-28px;left:0;right:0;text-align:center;font-size:0.8rem;height:28px;line-height:28px}.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message span{cursor:pointer;color:#c3c7ca;text-align:center;font-size:1.4rem;line-height:4rem}.dropzone *{cursor:default}.toast-title{font-weight:bold}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#ffffff}.toast-message a:hover{color:#cccccc;text-decoration:none}.toast-close-button{position:relative;right:-0.3em;top:-0.3em;float:right;font-size:20px;font-weight:bold;color:#ffffff;-webkit-text-shadow:0 1px 0 #ffffff;text-shadow:0 1px 0 #ffffff;opacity:0.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}.toast-close-button:hover,.toast-close-button:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}button.toast-close-button{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.toast-top-right{top:5rem;right:1.5rem}#toast-container{position:fixed;z-index:999999}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;color:#ffffff;opacity:0.9;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=90);filter:alpha(opacity=90)}#toast-container>:hover{opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important}#toast-container>.toast-error{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important}#toast-container>.toast-success{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important}#toast-container>.toast-warning{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important}#toast-container.toast-top-center>div,#toast-container.toast-bottom-center>div{width:300px;margin:auto}#toast-container.toast-top-full-width>div,#toast-container.toast-bottom-full-width>div{width:96%;margin:auto}.toast{background-color:#030303}.toast-success{background-color:#9055AF}.toast-success .button{background:#9b66b7;background:#a778bf;color:rgba(255,255,255,0.85);border-radius:4px}.toast-success .button:hover{background:#b289c7;color:#fff}.toast-success .button.dropdown-toggle{background:#b289c7;border-left:1px solid #9b66b7}.toast-error{background-color:#DA4B46}.toast-info{background-color:#2693B7}.toast-warning{background-color:#f89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000000;opacity:0.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}@media all and (max-width: 240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-0.2em;top:-0.2em}}@media all and (min-width: 241px) and (max-width: 480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-0.2em;top:-0.2em}}@media all and (min-width: 481px) and (max-width: 768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.gpm>table>tbody>tr{border-bottom:1px solid #e1e1e1}.gpm td{border:0}.gpm .gpm-name{white-space:nowrap;color:#b6bbbe}.gpm .gpm-version{padding-left:0.5rem;color:#8d959a;font-size:0.9rem}.gpm .gpm-update .gpm-name{color:#349886}.gpm .gpm-actions .enabled,.gpm .gpm-actions .disabled{font-size:1.6rem}.gpm .gpm-actions .disabled{color:#8d959a}.gpm .gpm-item-info{position:relative;border-bottom:3px solid #e1e1e1;padding-bottom:1rem;margin-bottom:3rem;overflow:hidden}@media only all and (max-width: 47.938em){.gpm .gpm-item-info{word-wrap:break-word}}.gpm .gpm-item-info .gpm-item-icon{color:#e6e6e6;position:absolute;right:3rem;font-size:20rem}.gpm .gpm-item-info table{position:relative}.gpm .gpm-item-info td{border:0;text-align:left !important}.gpm .gpm-item-info td:first-child{color:#9ba2a6;white-space:nowrap;width:25%}.gpm .gpm-item-info tr:hover{background:inherit}.gpm .badge.update{display:inline-block;background:#9055AF;border-radius:4px;padding:2px 10px;color:#fff;margin-left:1rem}.gpm .gpm-ribbon{background-color:#9055AF;overflow:hidden;white-space:nowrap;position:absolute;top:1rem;right:-2rem;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.gpm .gpm-ribbon a{color:#fff;display:block;font-weight:bold;font-size:0.9rem;padding:5px 40px;text-align:center}.gpm .themes{padding:3rem}.gpm .themes .gpm-name{margin-bottom:0.5rem}.gpm .themes .gpm-actions{background:#e9e9e9;margin:1rem -1rem -1rem -1rem;height:4rem;text-align:center;padding:1rem;font-size:1rem;font-weight:bold}.gpm .themes .active-theme .gpm-actions,.gpm .themes.inactive-theme .gpm-actions{line-height:2rem}.gpm .themes .active-theme{border:1px solid #349886}.gpm .themes .active-theme .gpm-actions{background:#349886;color:#eee}.gpm .themes .inactive-theme .gpm-actions{display:block;color:#a2a2a2;font-weight:normal}#phpinfo img{display:none}#phpinfo table{margin:1rem 0 0}#phpinfo tr:hover{background:transparent}#phpinfo th{background:#d9d9d9}#phpinfo td{word-wrap:break-word}#phpinfo td h1{margin:0rem -3rem 0rem !important}#phpinfo td:first-child{color:#349886}#phpinfo hr{border-bottom:0}#phpinfo h1{font-size:2.3rem}#phpinfo h2{font-size:1.7rem;margin:3rem 3rem 0rem !important} -/*# sourceMappingURL=template.css.map */ diff --git a/src/user/plugins/admin/themes/grav/css-compiled/template.css.map b/src/user/plugins/admin/themes/grav/css-compiled/template.css.map deleted file mode 100644 index 22cf131..0000000 --- a/src/user/plugins/admin/themes/grav/css-compiled/template.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ -"version": 3, -"mappings": "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", -"sources": ["../scss/template/_fonts.scss","../scss/nucleus/mixins/_utilities.scss","../scss/template/modules/_buttons.scss","../scss/configuration/template/_typography.scss","../scss/template/_core.scss","../scss/configuration/template/_colors.scss","../scss/configuration/template/_bullets.scss","../scss/configuration/template/_variables.scss","../scss/template/_extensions.scss","../scss/vendor/bourbon/addons/_prefixer.scss","../scss/nucleus/mixins/_breakpoints.scss","../scss/template/_typography.scss","../scss/configuration/nucleus/_typography.scss","../scss/template/modules/_toggle-switch.scss","../scss/template/_forms.scss","../scss/vendor/bourbon/css3/_flex-box.scss","../scss/template/_tables.scss","../scss/template/_buttons.scss","../scss/template/_errors.scss","../scss/template/_login.scss","../scss/vendor/bourbon/css3/_placeholder.scss","../scss/template/_admin.scss","../scss/vendor/bourbon/addons/_clearfix.scss","../scss/vendor/bourbon/css3/_linear-gradient.scss","../scss/template/_pages.scss","../scss/template/_remodal.scss","../scss/vendor/bourbon/css3/_transition.scss","../scss/vendor/bourbon/functions/_transition-property-name.scss","../scss/template/_tabs.scss","../scss/vendor/bourbon/css3/_keyframes.scss","../scss/template/_editor.scss","../scss/template/_dropzone.scss","../scss/template/_toastr.scss","../scss/template/_gpm.scss","../scss/template/_phpinfo.scss"], -"names": [], -"file": "template.css" -} \ No newline at end of file diff --git a/src/user/plugins/admin/themes/grav/css/chartist.min.css b/src/user/plugins/admin/themes/grav/css/chartist.min.css deleted file mode 100755 index f348f0a..0000000 --- a/src/user/plugins/admin/themes/grav/css/chartist.min.css +++ /dev/null @@ -1 +0,0 @@ -.ct-double-octave:after,.ct-major-eleventh:after,.ct-major-second:after,.ct-major-seventh:after,.ct-major-sixth:after,.ct-major-tenth:after,.ct-major-third:after,.ct-major-twelfth:after,.ct-minor-second:after,.ct-minor-seventh:after,.ct-minor-sixth:after,.ct-minor-third:after,.ct-octave:after,.ct-perfect-fifth:after,.ct-perfect-fourth:after,.ct-square:after{content:"";clear:both}.ct-double-octave:after,.ct-double-octave:before,.ct-golden-section:after,.ct-major-eleventh:after,.ct-major-eleventh:before,.ct-major-second:after,.ct-major-second:before,.ct-major-seventh:after,.ct-major-seventh:before,.ct-major-sixth:after,.ct-major-sixth:before,.ct-major-tenth:after,.ct-major-tenth:before,.ct-major-third:after,.ct-major-third:before,.ct-major-twelfth:after,.ct-major-twelfth:before,.ct-minor-second:after,.ct-minor-second:before,.ct-minor-seventh:after,.ct-minor-seventh:before,.ct-minor-sixth:after,.ct-minor-sixth:before,.ct-minor-third:after,.ct-minor-third:before,.ct-octave:after,.ct-octave:before,.ct-perfect-fifth:after,.ct-perfect-fifth:before,.ct-perfect-fourth:after,.ct-perfect-fourth:before,.ct-square:after,.ct-square:before{content:""}.ct-label{fill:rgba(0,0,0,.4);color:rgba(0,0,0,.4);font-size:.75rem;line-height:1}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:block;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-vertical.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-label.ct-vertical.ct-end{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:end}.ct-grid{stroke:rgba(0,0,0,.2);stroke-width:1px;stroke-dasharray:2px}.ct-point{stroke-width:10px;stroke-linecap:round}.ct-line{fill:none;stroke-width:4px}.ct-area{stroke:none;fill-opacity:.1}.ct-bar{fill:none;stroke-width:10px}.ct-slice-donut{fill:none;stroke-width:60px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point,.ct-series-a .ct-slice-donut{stroke:#d70206}.ct-series-a .ct-area,.ct-series-a .ct-slice-pie{fill:#d70206}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point,.ct-series-b .ct-slice-donut{stroke:#f05b4f}.ct-series-b .ct-area,.ct-series-b .ct-slice-pie{fill:#f05b4f}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point,.ct-series-c .ct-slice-donut{stroke:#f4c63d}.ct-series-c .ct-area,.ct-series-c .ct-slice-pie{fill:#f4c63d}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point,.ct-series-d .ct-slice-donut{stroke:#d17905}.ct-series-d .ct-area,.ct-series-d .ct-slice-pie{fill:#d17905}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point,.ct-series-e .ct-slice-donut{stroke:#453d3f}.ct-series-e .ct-area,.ct-series-e .ct-slice-pie{fill:#453d3f}.ct-series-f .ct-bar,.ct-series-f .ct-line,.ct-series-f .ct-point,.ct-series-f .ct-slice-donut{stroke:#59922b}.ct-series-f .ct-area,.ct-series-f .ct-slice-pie{fill:#59922b}.ct-series-g .ct-bar,.ct-series-g .ct-line,.ct-series-g .ct-point,.ct-series-g .ct-slice-donut{stroke:#0544d3}.ct-series-g .ct-area,.ct-series-g .ct-slice-pie{fill:#0544d3}.ct-series-h .ct-bar,.ct-series-h .ct-line,.ct-series-h .ct-point,.ct-series-h .ct-slice-donut{stroke:#6b0392}.ct-series-h .ct-area,.ct-series-h .ct-slice-pie{fill:#6b0392}.ct-series-i .ct-bar,.ct-series-i .ct-line,.ct-series-i .ct-point,.ct-series-i .ct-slice-donut{stroke:#f05b4f}.ct-series-i .ct-area,.ct-series-i .ct-slice-pie{fill:#f05b4f}.ct-series-j .ct-bar,.ct-series-j .ct-line,.ct-series-j .ct-point,.ct-series-j .ct-slice-donut{stroke:#dda458}.ct-series-j .ct-area,.ct-series-j .ct-slice-pie{fill:#dda458}.ct-series-k .ct-bar,.ct-series-k .ct-line,.ct-series-k .ct-point,.ct-series-k .ct-slice-donut{stroke:#eacf7d}.ct-series-k .ct-area,.ct-series-k .ct-slice-pie{fill:#eacf7d}.ct-series-l .ct-bar,.ct-series-l .ct-line,.ct-series-l .ct-point,.ct-series-l .ct-slice-donut{stroke:#86797d}.ct-series-l .ct-area,.ct-series-l .ct-slice-pie{fill:#86797d}.ct-series-m .ct-bar,.ct-series-m .ct-line,.ct-series-m .ct-point,.ct-series-m .ct-slice-donut{stroke:#b2c326}.ct-series-m .ct-area,.ct-series-m .ct-slice-pie{fill:#b2c326}.ct-series-n .ct-bar,.ct-series-n .ct-line,.ct-series-n .ct-point,.ct-series-n .ct-slice-donut{stroke:#6188e2}.ct-series-n .ct-area,.ct-series-n .ct-slice-pie{fill:#6188e2}.ct-series-o .ct-bar,.ct-series-o .ct-line,.ct-series-o .ct-point,.ct-series-o .ct-slice-donut{stroke:#a748ca}.ct-series-o .ct-area,.ct-series-o .ct-slice-pie{fill:#a748ca}.ct-square{display:block;position:relative;width:100%}.ct-square:before{display:block;float:left;width:0;height:0;padding-bottom:100%}.ct-square:after{display:table}.ct-square>svg{display:block;position:absolute;top:0;left:0}.ct-minor-second{display:block;position:relative;width:100%}.ct-minor-second:before{display:block;float:left;width:0;height:0;padding-bottom:93.75%}.ct-minor-second:after{display:table}.ct-minor-second>svg{display:block;position:absolute;top:0;left:0}.ct-major-second{display:block;position:relative;width:100%}.ct-major-second:before{display:block;float:left;width:0;height:0;padding-bottom:88.8888888889%}.ct-major-second:after{display:table}.ct-major-second>svg{display:block;position:absolute;top:0;left:0}.ct-minor-third{display:block;position:relative;width:100%}.ct-minor-third:before{display:block;float:left;width:0;height:0;padding-bottom:83.3333333333%}.ct-minor-third:after{display:table}.ct-minor-third>svg{display:block;position:absolute;top:0;left:0}.ct-major-third{display:block;position:relative;width:100%}.ct-major-third:before{display:block;float:left;width:0;height:0;padding-bottom:80%}.ct-major-third:after{display:table}.ct-major-third>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fourth{display:block;position:relative;width:100%}.ct-perfect-fourth:before{display:block;float:left;width:0;height:0;padding-bottom:75%}.ct-perfect-fourth:after{display:table}.ct-perfect-fourth>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fifth{display:block;position:relative;width:100%}.ct-perfect-fifth:before{display:block;float:left;width:0;height:0;padding-bottom:66.6666666667%}.ct-perfect-fifth:after{display:table}.ct-perfect-fifth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-sixth{display:block;position:relative;width:100%}.ct-minor-sixth:before{display:block;float:left;width:0;height:0;padding-bottom:62.5%}.ct-minor-sixth:after{display:table}.ct-minor-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-golden-section{display:block;position:relative;width:100%}.ct-golden-section:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:61.804697157%}.ct-golden-section:after{display:table;clear:both}.ct-golden-section>svg{display:block;position:absolute;top:0;left:0}.ct-major-sixth{display:block;position:relative;width:100%}.ct-major-sixth:before{display:block;float:left;width:0;height:0;padding-bottom:60%}.ct-major-sixth:after{display:table}.ct-major-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-seventh{display:block;position:relative;width:100%}.ct-minor-seventh:before{display:block;float:left;width:0;height:0;padding-bottom:56.25%}.ct-minor-seventh:after{display:table}.ct-minor-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-seventh{display:block;position:relative;width:100%}.ct-major-seventh:before{display:block;float:left;width:0;height:0;padding-bottom:53.3333333333%}.ct-major-seventh:after{display:table}.ct-major-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-octave{display:block;position:relative;width:100%}.ct-octave:before{display:block;float:left;width:0;height:0;padding-bottom:50%}.ct-octave:after{display:table}.ct-octave>svg{display:block;position:absolute;top:0;left:0}.ct-major-tenth{display:block;position:relative;width:100%}.ct-major-tenth:before{display:block;float:left;width:0;height:0;padding-bottom:40%}.ct-major-tenth:after{display:table}.ct-major-tenth>svg{display:block;position:absolute;top:0;left:0}.ct-major-eleventh{display:block;position:relative;width:100%}.ct-major-eleventh:before{display:block;float:left;width:0;height:0;padding-bottom:37.5%}.ct-major-eleventh:after{display:table}.ct-major-eleventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-twelfth{display:block;position:relative;width:100%}.ct-major-twelfth:before{display:block;float:left;width:0;height:0;padding-bottom:33.3333333333%}.ct-major-twelfth:after{display:table}.ct-major-twelfth>svg{display:block;position:absolute;top:0;left:0}.ct-double-octave{display:block;position:relative;width:100%}.ct-double-octave:before{display:block;float:left;width:0;height:0;padding-bottom:25%}.ct-double-octave:after{display:table}.ct-double-octave>svg{display:block;position:absolute;top:0;left:0} \ No newline at end of file diff --git a/src/user/plugins/admin/themes/grav/css/codemirror/base16-light.css b/src/user/plugins/admin/themes/grav/css/codemirror/base16-light.css deleted file mode 100644 index 12ff2eb..0000000 --- a/src/user/plugins/admin/themes/grav/css/codemirror/base16-light.css +++ /dev/null @@ -1,36 +0,0 @@ -/* - - Name: Base16 Default Light - Author: Chris Kempson (http://chriskempson.com) - - CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools) - Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) - -*/ - -.cm-s-base16-light.CodeMirror {background: #f5f5f5; color: #202020;} -.cm-s-base16-light div.CodeMirror-selected {background: #e0e0e0 !important;} -.cm-s-base16-light .CodeMirror-gutters {background: #f5f5f5; border-right: 0px;} -.cm-s-base16-light .CodeMirror-guttermarker { color: #ac4142; } -.cm-s-base16-light .CodeMirror-guttermarker-subtle { color: #b0b0b0; } -.cm-s-base16-light .CodeMirror-linenumber {color: #b0b0b0;} -.cm-s-base16-light .CodeMirror-cursor {border-left: 1px solid #505050 !important;} - -.cm-s-base16-light span.cm-comment {color: #8f5536;} -.cm-s-base16-light span.cm-atom {color: #aa759f;} -.cm-s-base16-light span.cm-number {color: #aa759f;} - -.cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute {color: #90a959;} -.cm-s-base16-light span.cm-keyword {color: #ac4142;} -.cm-s-base16-light span.cm-string {color: #f4bf75;} - -.cm-s-base16-light span.cm-variable {color: #90a959;} -.cm-s-base16-light span.cm-variable-2 {color: #6a9fb5;} -.cm-s-base16-light span.cm-def {color: #d28445;} -.cm-s-base16-light span.cm-bracket {color: #202020;} -.cm-s-base16-light span.cm-tag {color: #ac4142;} -.cm-s-base16-light span.cm-link {color: #aa759f;} -.cm-s-base16-light span.cm-error {background: #ac4142; color: #505050;} - -.cm-s-base16-light .CodeMirror-activeline-background {background: #DDDCDC !important;} -.cm-s-base16-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} diff --git a/src/user/plugins/admin/themes/grav/css/codemirror/codemirror.css b/src/user/plugins/admin/themes/grav/css/codemirror/codemirror.css deleted file mode 100644 index 318d25f..0000000 --- a/src/user/plugins/admin/themes/grav/css/codemirror/codemirror.css +++ /dev/null @@ -1,332 +0,0 @@ -/* BASICS */ - -.CodeMirror { - /* Set height, width, borders, and global font properties here */ - font-family: monospace; - height: 300px; - color: black; -} - -/* PADDING */ - -.CodeMirror-lines { - padding: 4px 0; /* Vertical padding around content */ -} -.CodeMirror pre { - padding: 0 4px; /* Horizontal padding of content */ -} - -.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - background-color: white; /* The little square between H and V scrollbars */ -} - -/* GUTTER */ - -.CodeMirror-gutters { - border-right: 1px solid #ddd; - background-color: #f7f7f7; - white-space: nowrap; -} -.CodeMirror-linenumbers {} -.CodeMirror-linenumber { - padding: 0 3px 0 5px; - min-width: 20px; - text-align: right; - color: #999; - white-space: nowrap; -} - -.CodeMirror-guttermarker { color: black; } -.CodeMirror-guttermarker-subtle { color: #999; } - -/* CURSOR */ - -.CodeMirror div.CodeMirror-cursor { - border-left: 1px solid black; -} -/* Shown when moving in bi-directional text */ -.CodeMirror div.CodeMirror-secondarycursor { - border-left: 1px solid silver; -} -.CodeMirror.cm-fat-cursor div.CodeMirror-cursor { - width: auto; - border: 0; - background: #7e7; -} -.CodeMirror.cm-fat-cursor div.CodeMirror-cursors { - z-index: 1; -} - -.cm-animate-fat-cursor { - width: auto; - border: 0; - -webkit-animation: blink 1.06s steps(1) infinite; - -moz-animation: blink 1.06s steps(1) infinite; - animation: blink 1.06s steps(1) infinite; - background-color: #7e7; -} -@-moz-keyframes blink { - 0% {} - 50% { background-color: transparent; } - 100% {} -} -@-webkit-keyframes blink { - 0% {} - 50% { background-color: transparent; } - 100% {} -} -@keyframes blink { - 0% {} - 50% { background-color: transparent; } - 100% {} -} - -/* Can style cursor different in overwrite (non-insert) mode */ -div.CodeMirror-overwrite div.CodeMirror-cursor {} - -.cm-tab { display: inline-block; text-decoration: inherit; } - -.CodeMirror-ruler { - border-left: 1px solid #ccc; - position: absolute; -} - -/* DEFAULT THEME */ - -.cm-s-default .cm-header {color: blue;} -.cm-s-default .cm-quote {color: #090;} -.cm-negative {color: #d44;} -.cm-positive {color: #292;} -.cm-header, .cm-strong {font-weight: bold;} -.cm-em {font-style: italic;} -.cm-link {text-decoration: underline;} -.cm-strikethrough {text-decoration: line-through;} - -.cm-s-default .cm-keyword {color: #708;} -.cm-s-default .cm-atom {color: #219;} -.cm-s-default .cm-number {color: #164;} -.cm-s-default .cm-def {color: #00f;} -.cm-s-default .cm-variable, -.cm-s-default .cm-punctuation, -.cm-s-default .cm-property, -.cm-s-default .cm-operator {} -.cm-s-default .cm-variable-2 {color: #05a;} -.cm-s-default .cm-variable-3 {color: #085;} -.cm-s-default .cm-comment {color: #a50;} -.cm-s-default .cm-string {color: #a11;} -.cm-s-default .cm-string-2 {color: #f50;} -.cm-s-default .cm-meta {color: #555;} -.cm-s-default .cm-qualifier {color: #555;} -.cm-s-default .cm-builtin {color: #30a;} -.cm-s-default .cm-bracket {color: #997;} -.cm-s-default .cm-tag {color: #170;} -.cm-s-default .cm-attribute {color: #00c;} -.cm-s-default .cm-hr {color: #999;} -.cm-s-default .cm-link {color: #00c;} - -.cm-s-default .cm-error {color: #f00;} -.cm-invalidchar {color: #f00;} - -.CodeMirror-composing { border-bottom: 2px solid; } - -/* Default styles for common addons */ - -div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} -div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} -.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } -.CodeMirror-activeline-background {background: #e8f2ff;} - -/* STOP */ - -/* The rest of this file contains styles related to the mechanics of - the editor. You probably shouldn't touch them. */ - -.CodeMirror { - position: relative; - overflow: hidden; - background: white; -} - -.CodeMirror-scroll { - overflow: scroll !important; /* Things will break if this is overridden */ - /* 30px is the magic margin used to hide the element's real scrollbars */ - /* See overflow: hidden in .CodeMirror */ - margin-bottom: -30px; margin-right: -30px; - padding-bottom: 30px; - height: 100%; - outline: none; /* Prevent dragging from highlighting the element */ - position: relative; -} -.CodeMirror-sizer { - position: relative; - border-right: 30px solid transparent; -} - -/* The fake, visible scrollbars. Used to force redraw during scrolling - before actuall scrolling happens, thus preventing shaking and - flickering artifacts. */ -.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - position: absolute; - z-index: 6; - display: none; -} -.CodeMirror-vscrollbar { - right: 0; top: 0; - overflow-x: hidden; - overflow-y: scroll; -} -.CodeMirror-hscrollbar { - bottom: 0; left: 0; - overflow-y: hidden; - overflow-x: scroll; -} -.CodeMirror-scrollbar-filler { - right: 0; bottom: 0; -} -.CodeMirror-gutter-filler { - left: 0; bottom: 0; -} - -.CodeMirror-gutters { - position: absolute; left: 0; top: 0; - z-index: 3; -} -.CodeMirror-gutter { - white-space: normal; - height: 100%; - display: inline-block; - margin-bottom: -30px; - /* Hack to make IE7 behave */ - *zoom:1; - *display:inline; -} -.CodeMirror-gutter-wrapper { - position: absolute; - z-index: 4; - background: none !important; - border: none !important; -} -.CodeMirror-gutter-background { - position: absolute; - top: 0; bottom: 0; - z-index: 4; -} -.CodeMirror-gutter-elt { - position: absolute; - cursor: default; - z-index: 4; -} -.CodeMirror-gutter-wrapper { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} - -.CodeMirror-lines { - cursor: text; - min-height: 1px; /* prevents collapsing before first draw */ -} -.CodeMirror pre { - /* Reset some styles that the rest of the page might have set */ - -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; - border-width: 0; - background: transparent; - font-family: inherit; - font-size: inherit; - margin: 0; - white-space: pre; - word-wrap: normal; - line-height: inherit; - color: inherit; - z-index: 2; - position: relative; - overflow: visible; - -webkit-tap-highlight-color: transparent; -} -.CodeMirror-wrap pre { - word-wrap: break-word; - white-space: pre-wrap; - word-break: normal; -} - -.CodeMirror-linebackground { - position: absolute; - left: 0; right: 0; top: 0; bottom: 0; - z-index: 0; -} - -.CodeMirror-linewidget { - position: relative; - z-index: 2; - overflow: auto; -} - -.CodeMirror-widget {} - -.CodeMirror-code { - outline: none; -} - -/* Force content-box sizing for the elements where we expect it */ -.CodeMirror-scroll, -.CodeMirror-sizer, -.CodeMirror-gutter, -.CodeMirror-gutters, -.CodeMirror-linenumber { - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -.CodeMirror-measure { - position: absolute; - width: 100%; - height: 0; - overflow: hidden; - visibility: hidden; -} -.CodeMirror-measure pre { position: static; } - -.CodeMirror div.CodeMirror-cursor { - position: absolute; - border-right: none; - width: 0; -} - -div.CodeMirror-cursors { - visibility: hidden; - position: relative; - z-index: 3; -} -.CodeMirror-focused div.CodeMirror-cursors { - visibility: visible; -} - -.CodeMirror-selected { background: #d9d9d9; } -.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } -.CodeMirror-crosshair { cursor: crosshair; } -.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } -.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } - -.cm-searching { - background: #ffa; - background: rgba(255, 255, 0, .4); -} - -/* IE7 hack to prevent it from returning funny offsetTops on the spans */ -.CodeMirror span { *vertical-align: text-bottom; } - -/* Used to force a border model for a node */ -.cm-force-border { padding-right: .1px; } - -@media print { - /* Hide the cursor when printing */ - .CodeMirror div.CodeMirror-cursors { - visibility: hidden; - } -} - -/* See issue #2901 */ -.cm-tab-wrap-hack:after { content: ''; } - -/* Help users use markselection to safely style text background */ -span.CodeMirror-selectedtext { background: none; } diff --git a/src/user/plugins/admin/themes/grav/css/codemirror/paper.css b/src/user/plugins/admin/themes/grav/css/codemirror/paper.css deleted file mode 100644 index 8305176..0000000 --- a/src/user/plugins/admin/themes/grav/css/codemirror/paper.css +++ /dev/null @@ -1,39 +0,0 @@ -.cm-s-paper .cm-keyword {color: #555;} -.cm-s-paper .cm-atom {color: #7f8c8d;} -.cm-s-paper .cm-number {color: #7f8c8d;} -.cm-s-paper .cm-def {color: #00f;} -.cm-s-paper .cm-variable {color: black;} -.cm-s-paper .cm-variable-2 {color: #555;} -.cm-s-paper .cm-variable-3 {color: #085;} -.cm-s-paper .cm-property {color: black;} -.cm-s-paper .cm-operator {color: black;} -.cm-s-paper .cm-comment {color: #959595;} -.cm-s-paper .cm-string {color: #7f8c8d;} -.cm-s-paper .cm-string-2 {color: #f50;} -.cm-s-paper .cm-meta {color: #555;} -.cm-s-paper .cm-error {color: #f00;} -.cm-s-paper .cm-qualifier {color: #555;} -.cm-s-paper .cm-builtin {color: #555;} -.cm-s-paper .cm-bracket {color: #997;} -.cm-s-paper .cm-tag {color: #7f8c8d;} -.cm-s-paper .cm-attribute {color: #7f8c8d;} -.cm-s-paper .cm-header {color: #000;} -.cm-s-paper .cm-quote {color: #888;} -.cm-s-paper .cm-hr {color: #999;} -.cm-s-paper .cm-link {color: #7f8c8d;} - -.cm-negative {color: #d44;} -.cm-positive {color: #292;} -.cm-header, .cm-strong {font-weight: bold;} -.cm-em {font-style: italic;} -.cm-link {text-decoration: underline;} - -.cm-invalidchar {color: #f00;} - -.cm-s-paper .cm-header-1 {font-size: 140%;} -.cm-s-paper .cm-header-2 {font-size: 120%;} -.cm-s-paper .cm-header-3 {font-size: 110%;} - - -div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} -div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} diff --git a/src/user/plugins/admin/themes/grav/css/datepicker/Flat/editor.png b/src/user/plugins/admin/themes/grav/css/datepicker/Flat/editor.png deleted file mode 100644 index 456f9c51871269e844af4beb056bbf8a7376504f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2873 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 diff --git a/src/user/plugins/admin/themes/grav/css/datepicker/Flat/imagebrowser.png b/src/user/plugins/admin/themes/grav/css/datepicker/Flat/imagebrowser.png deleted file mode 100644 index 210cf4950ba0cd23aa0220d275541edfd50b6ada..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6215 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 >}2!;D0+efeK0_hBJSzuz@v)f1EXyWECmK zq<0C5_|(!okKWW^!Z#iByne7l@6Ed6u94v$^9Lj49f2l=3sfx1OLiJ;DElu|ZgGqo zUI_{8_7Zv@De}+-{^kS@9m6jq>WLo1S40&Jd&kGF3@<+3{ z&xeMugFxI-`7_3CThT!^OGroO@r2u_mQ6j$J?>(ex$Us_33*ZQ*#oJjT@YZK%2@dz z-fbhBhF-!ZAS5Y)IekqBBxKG5||8*l%{O$GAy^o=~_ZR$ZdHuo7yCJn7*$32RB{!%T?rJ`EpbEd- z$kAruQGi3z>9?Wd(Nun^dN;$X%1Uz!3KD0drG8Y`gb09mi<5cMBZm^{t^ diff --git a/src/user/plugins/admin/themes/grav/css/datepicker/Flat/indeterminate.gif b/src/user/plugins/admin/themes/grav/css/datepicker/Flat/indeterminate.gif deleted file mode 100644 index 4e63a2c60b53d684c587e3dcc6b7286364778992..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 799 zcmZ?wbhEHb6k`x$n8?KN<;#~BFJ3T!f#QE|Ki808XU70nBRvCVMxdbLPZm}d1||j_ zkOGhv1}6QUe#X z1K-GtwUxQIY7^9?7T&0gkJ|KN=b`9TabL9k%jYD&`?Hy~)H!}Vju7c-T$%88ur|4T6+JR&tukNXD>tSA)?pAyOJ9zZmyWd3-qO=Ph0$J z`P<*Pgh$cA{eoyGlL%a1*aS4M>Tu+W$7G_1O_T7K#aRq0zUv`6f?8l9CFKlrx_#Cw~%?-O7lrktJjI0 YnYGpC=6bu&mUSOl8=X&S0u8YS01-SW4*&oF diff --git a/src/user/plugins/admin/themes/grav/css/datepicker/Flat/loading-image.gif b/src/user/plugins/admin/themes/grav/css/datepicker/Flat/loading-image.gif deleted file mode 100644 index 271ee26b2898176ddada27920199cfec17f594c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1611 zcma)+X)qfI6vxw*WJ}VHTcXvKl{&VzQd%^+&S(WIsWw||UDYb8Ev0pni;xJBpl)%6 zxWz44M9+3AiC`#!#T^Jad(`M-Atd)oA*Hwu6PG(rLL zB7tb*W$NM+C2^zcg!GW4Ra@F__p3-x+Trj}EZKZ@K+>|ky$$%M5Ze$Z+wkXkgYCS7CB3 z;pn_ki@AH$9X!<=;{%J0^}__vsSK(r`>b+odRk5RRI4>Z`eYC8jx~xTjW$W}Z|oX;LJbkXcgtq0q5qemQX7=^;Iv_r?8?~hClGwpp2yf0(|q?l4+h@L$R2# zUu#zx+h537QkLIq4Lqy|2-0uzMu|4LV{@cM*@E&7h6*+LT)-8*1$}!J#@ml0x}z>- zbfIsct%fm#ON?7cz7Nl14RdZcFcIj~8-`*Jk7y zC>y@3`R)G@bs6@rs1x3hbUqmz#Q*(<9sJ zaKM;(>8K9>5@F!yHE<+{xBQ;BVn4o;6dVcn#CR(P#hI)7V*F?UNlx&@)bI>4EFGGY z~*rPa071+9YS>`r!5k6N-hgw)7uSD~6G4AoaC zN4uhnQIalLs3Bh{Rn-B59cIVMkRp?TiOb*LvzY2bJ~WB#Ejj)Kb?5!0)%@a&s6Py8 z(*awT+h4rkh%nWES9x;$G<8k{0Svj%3^tTVm86Bo=1VY|RHun>Auj%Tt*Dl{#N z1dF$(@fmeR@R(EK*$tcn$G~7hOJ#ZM;e6}DV)WHAZo781jjiOmP7^w=E!PX!**!ev zC^8#xgfg+b)1&Cx#c{yIB2?HFw(;)w_aC-Ce){82ZH3)%2Y1Eo4${9Lshf z%i;=HDlQArf$fClV+#-UVMHpW7~VHhyt8_k?U`!h#^xZTNmI*-r*qHd7Z#V6SDwFE zU0X-|4F~$qUmV#D&H)4@%aeq%mbDOLRVaGa@X+Jfo|kS8uF{;*OG01 z!%xpZ5)YF5(-+T2$jRuA=ru75+Nv5{uZOfw>bP5Z!ebQUp%zZQ)Ho%Z{y9=;lMmB=cgch)$I3niQrY3Ji9MW@g&uhYE_YR|QE|_}Vlm$xLr3 p5!l+U+iBH(7TSw0aS&TECZ%=H4941`7I)xYzIy#;V^slQ_7^at)>Qxi diff --git a/src/user/plugins/admin/themes/grav/css/datepicker/Flat/loading.gif b/src/user/plugins/admin/themes/grav/css/datepicker/Flat/loading.gif deleted file mode 100644 index 13130c684885c56f816af328038500c6f0dce7c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 567 zcmZ?wbhEHb6krfw*v!fB|NsA&KYu*?`91jR3Gd5C&wPGA@yVU}&mYWveqZ3oCI$?k z_@CR)H6+;CF~HSG&w!Z`s6g>23nwcBCxZ@1G00d376*fqo~u=s3S=`gFoxI0H)YCj zs>scl)R~nQ&2u_8WBR5&>uqo3Yy99)Ie1AyKtdtW^}t1?Xfw-;D?O4*^Y+i-z-Fiu z$WY%UB1PE@4h5;vOieS6sm5o_)6v-Xg7bp;y4ynU4_iy=B^Z zFP2?BZG3BD!rHqVRG6?CYX>rRE0VF-#b+&dDN;YMs8j3M<~i>z?tf#NaKK%fg^795 zIw2OGYEk8)>oZN-Lpx1oZgs)xeG8D0do8lPycDB_fQ~JVcbarPV%6#r4ko6}+6t16 z33qngadi-4&~Lu?V22`8&+L>0$yHItg4o<=4l(TYS#?d;#M*@-3=Ro%SGFuVsmS5+ ziRs;J3CDyRyIL4jH}EhXJ+i=jgAViAz7nssVM-vgSkdCe5@J?x5ZA>Z1_s6%J;{eE t#ko|JZZ1-<q7R`p9^ephv=;YGU0rA><#3I3egbwDXS$IWT+>YcAoauZgu;nb9Tx&T)D`QS< zMCqcir8<2~tJbX3+34=6v902m`mQCX)c3Dmd+zd;tE!3!$1^c7F~|TR1M6I%<5d)N zj&I~hecg9P;LO2*JwGxom`r@mdC%vg_0lk9#oUyTjY&4MJuHPCGq=sXz`lUZB}z_F zL#1q`l9B(zxr@%nEsf^u|NP8p&)%s0-@jLR*OxWcR97~~cjk7s7WVb^OlohMJf&-z zQ<`*(evSG9LTWlLjViA`Bb1dCTeUm&YdhIv~@B-nLHGZ*Q1 zoAfqYObDH2In{4Qxy77$3p`VRPIca)zbb!^-n!`r^fu4e#p>EFc;d);y>BfjeH>6V zW~ng{*)eh9b!8S;P9^`1lP=~cr}{5d{^t@jFKdMf(nqy?FJ1u_#h=f8B8 z3%}MW^zwT)h@2Jz|+6#7+neL=1)AZ-eoi~4h23B{}D1g(T!>V;Tr+FM@cwDn@x9JF%uUFeO zNQz45lb!PM|jkAi{IP(;1<=!*}Rvy01Aq{3%I|RI1Jd$%ZXTd?reW7;)a;_$7Czg&JJ58#857V|OLP<&tN}94 BrS$*+ diff --git a/src/user/plugins/admin/themes/grav/css/datepicker/Flat/slider-h.gif b/src/user/plugins/admin/themes/grav/css/datepicker/Flat/slider-h.gif deleted file mode 100644 index 6ed5ea9279f813a6944bac32c951bf5a3aef0169..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73 zcmZ?wbhEHbWMtUFFp-I2)v8s84jp0u1I3>#j0_A+3_2hlNS=X7YD#10u{F2OMQ^;- X{q)Gf@2_iT3a~xylu8X{V6X-N5aJk5 diff --git a/src/user/plugins/admin/themes/grav/css/datepicker/Flat/slider-v.gif b/src/user/plugins/admin/themes/grav/css/datepicker/Flat/slider-v.gif deleted file mode 100644 index 1750543ee567c3abb6032ed903953e22c467ba93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73 zcmZ?wbhEHb+`_=fFp-I2)v8s84jp0u1I3>#j0_A+3_2hlNS=X7YD#10u{F2OMQ^;- X{q)Gf@2_iT3a~xylu8X{V6X-N6RsFf diff --git a/src/user/plugins/admin/themes/grav/css/datepicker/Flat/sprite.png b/src/user/plugins/admin/themes/grav/css/datepicker/Flat/sprite.png deleted file mode 100644 index d37fc9c9b594ac0bc0296c105b0c8cf89535949a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12313 zcmYM4c|4Tw_y5NdWiKQuL}ba5H9HB}LI#z!w{zwmC&vTyJ-Ztar5a9rUK-}iHZr%Zbn83i# z_9Po{WPv5Q6!;SkH@O>bAM6tz_28j5$jB@BKW}k!=mTHxJKhhxqC*F~bwMDd4)dEv z;79o1?|DBs;5yf)cg|>AJ^J(t5~ic3tgJ?Q5aOqNPW$>_nR73vqW8_!xBZmE6+J!O zFLE(YbQ^~Bis)#F5DdLS)T~hFE>hIakhMj$bIio~xKQb-J$_{(Mv~DtIfBQI+u-M? z=04DZX+L7OVO>Sb*^OiR6w2({pV(0%bqXIqb5u%|U;=@<3txns0)Y?)EdIT#&Ib4K zrVz1@&}EqSCmajten0YEC!z3+K&&Wvt9&FglG^}&6Q6)mmm2e|VF#gJxmh0DZdmIp zZKn+G6`IldE^rSq0rM~&CF=9q+p)CByE-5`rO zX{g*Rl&uR&wr0aF+o_Y)i(>c;ON!$htAkR)(>wFV9{g8x!Q~2p{=8Ic?bdG(8G0l0 z<|9ay>=<$J-;^{3t&DPV|C>9$wfFUIq)u6wi!@X{n7Bafei+|njz2TBwS{HejV~yp z=6L-mFFqXOK%Tc}3ehFXzep495dgshUq>dkRI>hNaE^5Sddc(AKtK~ZvD{~p+a@H1_udbM9Vsde^iwv@kFS4eu6d0YU(RI;rqDLqU zW8aO$5$V^)FMt|XAI%G?z76vVebRW#z4b3cC=ceO6_?>gEyW9fXeY=Kip$#yOcaBG zjIQs+F*^ifJuu&+ikSdgcj>QInoGvoee*A^uC=kii&iLm+vo^!1T*U-Jz%%x)S&p4 zvlsR%l+XVp{xry=t{HKIL0`U3TgfWXL+v+pk&ijTM>gGz!a9WhY8j4rc_UR7X!v!> z;-ZT7J8zY4|5xHJy&ZYl#_D?a?2z2&U}rrLqLe8DjT$MrZ^Z9(++pHkwK5M@re>ii zdYc=af9wj0r*WKLX4aWN&|tjR&$kwl@ruwSREkN{|3*Tk&dqPwWr!eu zo!)hg2g$KdKKY9I^QyV=KSOm~jgcLgtD=r%GRLVm2JAErZOpQbXKV}pCS1d_Ls9SK z0z3MF9wd!wmeilYAp`7?-b#}`NaG{_yJ}CYLvD! z6_ewR)%N%`Z7OyOR^*Ghg5Ue#M4M5&GLgaoVwN*BJOOGA+C89USbvS-`<~%%vnRRH zkQaY(4W$0KjS2z*14)=32DijD4*4HP6iAMQUTYX#lkS@yNrAhQZ95Om#N33Wz&epI_*$r&yNJ zqJ@4q@($;$-y>jkqvkHuFJ18OmW+JFHKR!NwH6-DyAZA|z<_oPp&jvD5QB#wG;>cx z;)_LdPJEp%v)(~ws1$Yt?Nap3zMP3C;RIU91~S`{BN66wAE6f{6Mb4s6>mg3%2lFp z^!TD3jO|^m=o2BUE9cpA8jeZXqfv(B2%a8;3q%W@OVqbn;Ts0>No9_6%=7UMc-|X( z^#QxstCgyG(wo9|bs?x)H+FSwOIRk&C&>f&xbd=Kl@6V=$Jg17osQ*3!rVtf32P_y zbOePBt|~e|ou_Rv%UKKK6d3I$Z}V^a*G%v5!I}Kdedpv}f9yW^VXL%m+t?tLs59v_ z5Ll836|%k~wsv=23(>w`PuXd;IC6IrEMa`ezY`UPz5Xj~-svpAp88khAR}jze!gt( z@-~@SOe5y!TYn(|u6kvzR7DarDQ~G!mknG*cUI?7mq&;SNwTj5RnJ&yOxTO9y?RE` zx>A|Ad<~+RN^P(B->qhQ41}~y`&3lz0NSD#mcMk^*1pY5pgT8hLguYy@BOjgWU0oyI z>bQfC6(yZSf)em~R8@sBhcdBRR%4MnH?aAAFw-FJvhhTs3%IU)*2CN)6lH~Tx zUy5Xv|0tq>g;l^-R>m&$^!<>4{_ZFTy{s9XZ}+6Eh09azI_})-eJ`PS;*g&=W?XbK zl>&HJq=2nZnCVf1va`V0O#|0nSRwd{c9nzHH9-NJ-D_Cgb)%dSs=>#C4`)_ZAOp&SiJUUsBG%HkZ_;IrU9yrD)!KK zf4jhE%p*4Gz|}28wa1ay5V!iMf9=+}wWF9e5<|{FUk<8F#)}iLxQ+gp&SCIzTG>|| zop07A>nQBE0ZW4PbggWkO4q(b`ufiA$C@P5aV32?T0%7D$nN_!)X6pY%GHM-8i;?s z(@N1?Y+K=Cn^&i5Xt~CibW7*;h5JW;4UF(S5V7*Q9<$FyZtfL7rd#3Q-|XFrU&C{) zkG0vkQSRklZ{BLnUs>EKQT)4&)`OV#Uw6Y{KXorDQ)%gUBS-Ub{HSfCg#u>sS2&J#aB+(% z1ix&9@V-&ekb715zZ!O$`AJIzXhF@m{EkELo}>}BuIp=t_eWgm0Pn7Cw(^ELf*o-u zx!vwmvU$SKyFK-_UFOMeJzDYN=kS}9rd%=185z*^AzMhB?uA9#CC8!%++qLmqEjL5gay|GVS$ES& z>y1C9Lj=QOTQwkN#Re5lP|oS17~v|r(nGO1=|6X*4L}QVAGabFE`WsPKxu54&r*f1 z!^|I+F1RLtZ^Pb_$n-AjJTf!H!TTEnYkl=jmaRxr70vHVYn@3x+-s>Wr$>Ac*f|%) z5w7{{5o;f*f+mUZfsaQtcipr_;gUY8PH7Z=jVkt?re6thJT#KKRJ=BOJ@&I%j)LU& zw86WMR*!qBDnpJR$Ym)#E;BdW5-%@$7iNyR#Sr9HRJEk|7}zqH$VRjq9y|mL_^j8q%E6u0KhWD14zm|F`7FI((2xN$DJYvQ+d5 z|M=v25LSL)3BTDGbS~>h(D8-L>-Ik@yqBbF-@l5?ZOCXIIvyM1fVBS&tBN1XxIUBRYKpIC6vTIpmDRq|X!l|u42x z`wXrCx8*KNaxCpp4`wWlGOd1u)#0)1Fvh=-f?tA?6NwE_r#zy$Pc*(!)S4cWKOeC< zJD-C0L8^a}$9?In{BQq94nu{Bd=Y~FcoOMA_P3?JX+cX5bGT$rT{tUP0SL(mu0T@~Ly=46I z$EsH0_PGoUlRV7LV&F=^cVvJ zB{;H9K4V$nJv^!uY&3M%OOyk3pK}Ey@34WSq6_Z^7my026{hCcGS)sm(WgK?u)W^NZ1>bwNAHWrC4%OA z%_fFxpr)2j(06^3 z-}kVD`&P##L9QWI@Oiz!vbpY}+*~Tvi07GS047Sy*xFIbb$tWAHVB_5w7qsGtV5c( zUyc2Oe5^Kl*9##1+f)o1Gms$9|K3-R=^IL}g*_rT7G&fU3y>Dl_ z*%{j9g102yK274tz#T_ALX~+7oOcdx6)t&Nu~dgKis2tO zG747jWjwI|SU1~|H+GpEmCiY75SowqVu>gYwmiz&9_0Qt%f(zR#JKd1Xy0bu`|b87 z##0!AponGB-jJAe*~z}?_R_QC`yJHQ`x^&p-%=PQ0Y?0htM^>a2h)vtk=AjKtLN{A zRIxu`n`~eZ+&tD0i2VkX3Ffv81wQon?=#fUo%-h>YCc=J8r;~DsXQZ!5JTYpdE*gfmpI6=-P01#Xrpk z%Z1Bkyk{eN`=0#wdS?^e<~;%q3BQFm^e224A%jRdPQs}DI*uMVk||4N$Y4ioSIOk3 zIW^Auc=qsagm6}q;3%}_;2S<~z7KCmcXP`17aC;}3EK4~uMJ<_m^QVMnxdP@4N>3{ zifC!w4XkS0ScT;--zDJbnpb z=rYi&vqtkRHD4lX_jHq}TE!=XAo%qW%`yyq7%Pw&N5M;Bcx@YQj8k@`q3xPf5@8Jk9=^t@D1>b|<# z;Op%}YsD}!QCA+i!4oq=YcniHD?~I3$X<6?r>80&ev?{MuWL}xZ;_0L`X{U%<-i~P zu{iNfOE>ddizu6FbBQ#=Z;16#c;A_r*{<>S<2%z~nXz03l|dPLfttHr*W!kcL1V^w zv1PRnTygm>%`u>YgJMi;jb+)~rR^{lf^^JgScl3QS^ntU^s(Fbv@~Be3UL<^WqlmO z>lMh~$D%VE#lCc>IA_EZgZCK{ zm7qc9v6yLVx=`EOIq_hM|8B?iF>%e=qSwvO>TzOiV)6dmG3SP78di6G1^*x(*myhY zH%(xFE zMTlZAQ&yYTb(QZ1s7}Twey_!ZPdpc{_sw#&Y_M|fRFd&5P+YwBNv%I#^B}-YaohT| zO^V*Iu-Exf`+&mYBSO|3K_aef&c*miTrXrO)xkVKDfpiWc1`u z(S03XZnuD5gUw=Qk9VCudb~Rqz;}qJA=Bou=DmV5bwZ)1i#B-X>y;P+$>%J3_vxnv*e9pMuH>MECm*{-grdS@5Y^F*So)8;Ggp+tNDvc&hg)R&Pdj@ z8N2L6P3~$psw84Fx3cY!7l&kj;9IH3{~c?f@{19noy+;*;~nn3#>1jq{b-Tj zllq?RJC=S z?;7B_4MqCd*sN3MB={HrI>~Q6wEnRaa3JQN?BBuqBrU%1oED*Q(_e8)4I8)76YcYt zoPW1bpV(OHlco_xfE6Z5t5M}jzmamT8+hjoy0{I^Is|nc?iZba)yETe_I$PtPzfS} zIl+3b70Zkwtle#3r{Xq^xM(LQsFb2xI+smH^=piagih`i0>UtycF+GI?~aE0gwom2 zG?x3vNB;8+b3?kBcX-&aeV65i;u|}o!{7(@2D`|j?AP0HMFsG{*Nsg6n zMPDhJ=h>tQbQ23r={5D!i42vV@yp1(&3rE8*Sv&VQVY`H*2dt{l(b>x%F2D~HKpK- z$BJG^|6hfI!rvar1Qhukp?9~@{FVr{xs>}+hVQengyR#_nipk$9Qc={q@e<|WJVX( zR1c3z@<^^6$dCGU8iEd=DH|35Npi`%>?)P&0~^;}VG$)Q-0%~TR4}uy$-bj!FW21A zXsQRorTB^?;?=>6O)ovM^wHhl84;M<+87|wy5YBE8~Y{5w(EJGvm1lBFx~Jz+BW13B@B* zw|FX|hcwOd-lYR6h-=|L zRI>3j;;a$wCa^5!9*4TY_N#}=>|ZZ$xeVMZ=Ubc3-q4z4f!PXjdsRgDC`NZW{R*3& z)H3v7a=6Rtzz?%$%3_{BeOhTeqP*XY?Lp&p_goh;fVa2B)XvcwKTNa(;Kz&SNd-a%$y&SA5R=j-ynf zBT9W37QcL~H4NySgD+}Zu6}Eow>#1&)DsuWMZWv4I|_WTh18@xbvC_ofKI*YGzWxd zGtPG`+J4b#aTN3m+RvJM5V8{wz0ZxhHn&3P9*M9IBuCtMkq$7hN2bZvoKdc;cD&46 z977xLp1-}?;5!kqMERGAOA_eB)1eW~u}5047Qb>FrF>4fn$es^l;4c)y$)X34V%FR z9;h(8DPD!6E^R8U#2RY`m=cfI%dm1>J!Mm0S6<*W-3Ua zw~+J~B6-y2HJL$iDDg98-{u22?-xLqAEuQu8p9a0%^S*R6>!sjzcxIhjY;{L~gA*-t9gJRPggvwk}boKOu;%6zB>8+4|UNq-~GqxgL zW^J8gsf_lH8v7!!`%2g%H{4e*smgqpXGCm@0 z;0OBomf0}VZ&|G^_Cz0`9&J^j0lQ{}q?#fMacD^( zU*cu<&-Cj2RLI`>XXXRq*2sQ_$>;TX!E}=0SCYYRdiB$=LnSnt$%zH^*fz!5M18B# zKkJSHHvEK$T#4a}ZR;>3`>{uRVasVSlM2`d7|T6gW{wJuEj}>QKXWFX${FHK=*r?3 z{#TER_uzNWF6ILw6Eg_Um6mt!GF8y5YFUg)FoDx9TePbE;-FS)wb2j9~XNWsO?Gn~V_3vF^flYZ0@v62Yd#SFo4evpC$1)#8S_rd^eEnIUY0+ra6de#e{o0& z{j-%Z{=L|g8_koT9N3leDE)FK>A4aEOiBD6awS0bqR_EAB5{{6h%4;kpw&^($gtg7z04Nbnn6m0#B z{z3&jSKy!Nai9D(P}QDQ)mr;quHz^en_CrKkw>@MNLFq8Le|3T^Ee3o){xCDQ*fhZ zSEaO1Nqns-u}N0R+F%(uui;&)MA3iBt|xP{uv`WAdEuU({Ru!-wU3rm1y{GcmtB0Q z!Flp>&bvYI3zdo8T>tFV-Ig}qriiy2#;(56=@D#Vs1h!0r6}t;E8G$)*Z+qHWU3PH z)BdmpE%*f7rSw)Bo@IqE7X^*83;S;yb@es_Tn`j3fiUIXgt90yYk*E7jeIIj`hgOr z9>*YoaPTWZ+p*WvDaumkYjgfVTCEW;2;?)e+h-ltn zg5UaI5P8l;)`ryY?8iX}S&^!|M}|A0X2%Ukp`m5zoZ7B>=4v}T0d>TG)v_mLjA7|XC9)1A`LeWM zfxBL&APN07Y0BNHR*cXIqx>6!U8xXpdy@)|`v6IIX2Z!H*OYhmII@!Ae>~IVVGpE( zbL~pfL5XtfdkOb_ZQm;{dY>75XxOV+=(176W{O>Sb_08|x|^rHE$*3fT!wRV$$N@Y zn0<9RB4!XVpu1qp%Lnc-1=4$;6CKktby*sgczDzWt6Hj4uB`X@gk6$a0mRhQw9>Nz z6?I|LXyF_IVX=-r4|c6l$zttbNI+GI=a;t`mwyK#boSh(jpt;y%}(4y)Y4Bt!e&x) z`p_4Yu1~VCV&g|0dD;HB3;lkE{#6Dsm7(t?TbsP=L8TTZU%PmE=VRs2%{WcB6z$)T zRFuty4ctM&XprQCX5FUeqGfppj$7uJav~pp@HjxCyfO5viz^>8o-Qy-l2x&+9D%?P z<=8(*3+GC8YUF0ndW-etuj5G_50C;X*jJ4h4bs2K^Ao6r~LMw%N7UIM;<02yCZqnbyZXOll;Nw&7|AuIZNBQKtcA zX9iR?pK#3Gny*qDa{U(of$I#LMg9}>|DwhdN11V1nlxbc*B=;vUdz1!aHx{slUVJ5 z(q!h5_LwIvye}SReQ*JYl|t$8q&-LS*gZDv+WkmZKOQ1aJh3!7_9Gy>5Kjfvk1{=O zc{W@5yr0?3)b!O}`gYTXc%&Zsz!fy8yq4XMf|6n8S^jtM!eEDL^9R~;e&WUsNyXMa z?XBL^%a@9k8dOr;_iBljgSS;jbn60N-Bdoo?S*XjxT`+YIN|GkzB7*`-fh(c9v>M3 zpSChG7Ooz{SAxK!hL%DW0~~oLD-b;i7J?mrc`Oye)|O zw80f1cjGFGU!?lIIi2leKnZ+sh3zNLh|dca){KsU1wrJ8Kd`QP0+pz%V>nS;M|PSX zu8QF*K%in{qs`dQv|QA|P2GpS6)2WV|JD!DA?%+ozhBAXmXW`-q&DWt3cf<0Se|zO zDNQys&RUecUoBv>!Is&3bV|V_5|TiVi0fR4UIJE{+@tJ&ircYJWmq0fL@=uO8TVkwC`*bPbf>+QbGqEH}EzS4Dy=wCd*uL~EeH<0=uPEp^ux@HFu>V+Aq7<&GN)Yt>j1>tzb*iv zLx)KwojGwaWtyPusQ-a)2eZ@|eIN?aDW@G1i{dxE3geGTk9oT4Zi$^o} z3sAf>g-fuAjoFvmYO|)58-pGejLJEQLV<@bxC%@Am-k0L2WyID3R;=1d;h&)Qn7h- z4)mE1?@GsE{){|=rk&Gzk4x#|WFr4$G&6NtD|g=3*A?Hk5WYzmxb9OO_sAT7aW}`; zzK2xc#x@b9!u&_8Q+M@V9L*@3Mb4Y&D`wPUR($)~JQ|F@4`GpTBhU{DNr*Nd`lHh} z_FWREDjpK99({De%ReNPfNkfbw$HRNuCot@9be8FgsqYOca&zKbWqxLGxiMY#jV2* z(U*)@o5exP2s3!E9!B4*Bjtem@3k(HYrt;4+FXA1xCyM#`A+V}^T{Qrzt^1as@^CX zv}%gcm#!sBEII#ihst{Yh`IePaYyWq-lQDNm@nZ@!FK{zwg(g%Z7H{ ze!>ZxK9utPjlI8#=1@$mR%H}V8ISyjcmVtBdR-#6J>X)Dz4XxVUdZKGS7Y0*vD{8wGm~hgZO}O)tEGy)n zHe@0v+dg)j|}of zFpX;%NBj{xQNgqxl$@t|-?&qUk%!bzo2+Eq+WWau-7`;>G~Pa2+d0IW*blC{M+Znx z%~gL$1E?a5ft=wrgd1bcAR%<}moeoV&WtWq{mOr794J9@JO$q=4L=WzEc7GL$TZ3< zm(@OdX*=|R<36BqKxu+>b}1xw{~x5jehMi7Dtc=gAqi<7XihZ(%3j0$^2LrR^Xvg{ z4?ZRvI7MtSedIv;E4%bLO3C0iAJ0m|-^Vzo`;XR6DU@#;WyFAftK>~uSA{Esi@)%z zT{%8`TIq?CbdDpAg_2M`q`ifi-Z>c8en6-*=S^@hJRyz}d**5382u9dDr%~X9dYJd z3Vx2OX*ywET`f8EPErg=?(qYAaW85059}jXPDVFtr~zqlhlz8xAyfCVYAyJt}lZY>L3L<(W(1$dp`JKfQ;avI5 zK&+EfVA*Rx*(;EgZgLJCTtY;qd@wrlX5X6KWco|iQluPht8b%`*HgKrkAH#fAGG@D zon(>ocq5>GP1f(f8lpuqeoB9`DD3aCPJGwnqI%AG18<~ovoYRqbj!r2qzD?SFLbPt zpZ=LvM^@aHgmBJC#Jg2?aW>~L_5+TNCS>xHn2xTD{$->u_HloPL!XZYFVXk%sFSC3 zT=8jN0{?VAkI#XVcONLPe3aviAcpSC@1Yjmz?iTfvOWw+kzj-c;4Tu9&&?)(z|J1a6+kvGjTwuK)= zD!c>o@tdx@mwXLgWUWPPPNd*JFfPwb%!~<{xX{C%hd7mw<}*~5Y&R}fDvUm;acZ00 z<%G4Y2UWar7(xZ6**ka2`{^#R(h=x>%KA|cK+}pxmTadRg7k{kE}f3T(Y{PH?X04a z12$JG$f#hAm-7x}6Zffl^I7@D6+hVe#4>N`fP0hhnk8YMt7!y=G^xEdD~%Rn2%QkH z8uEJgc4O4fkk@b)F?LLRf;KwnqEh}m+}#AquXr|NewgDg0zt-_<2Cl>N1$c(OF(qi zCvobU`Vsq8RZC~RyvKgK*o=iTHlXAvQ7>8zRVFnBO;WhGjLV%u(E**jwjLs=R1L@c zFWFrG7jFTxR7XPDnD0i(TMDc=CFGDz6p_-&Q1_IxSeE|-y)^nf7E^vU#P z!KYV>jhasQ(~w3zAaWyAnaFO%MdgMjihip&RgB_l-zgyYhd(V1gpvss7}avWNbHh? zD7DL!{{vh3+?%B_$0FQhfyB1fwTGhgd`ul*Xz^XAIY5P(t$|T4nDC}=}YFm*pnmAo`<4^;z{C4K1 zFRL$F&xV``!SqA9|bee&npc#NCNsC!&?Rj zK8#vcK#&4{Z?lnsX@LVo^nzyxNBIi}mDz$~x>YZ%z#kMIZ9iD~@06i!oH3qk0s8Gd zQ~vm$z)gFjh;}0VY?^;Za{2p1eXCAZ=?GDURn>aw&>B0$yjCU-ouH^EXu zG*7jS4JMRNeS0y!rJSyF-d6UUK1A56sJEQ$M4SxtIqD)NC~N;S>Jz3eGx8SRVk`#q znSJu|InidWij>eQqf>5Kku4~*)}#1$2Mi^MbHF&uf&!wtC*-}ivTKSZw}m0B(7f~M zDe8}-!e>Nje(;P>x|trxahdyf3wLr|;zplDSH2&!L;LZXMFr;j-T^=QOz5w?^Cm9G zuk(llA|8DvE?fmcPlgYGa*lIy3|@t=AX4B~muy3dr@)Wt3!hUe#t1gU%RaG~IGf{} zndhy?b^#p(dc=v;eDUaFMN=}+9t~PgTr^Aryr&)bf|TqT+B+0C8y!kUh-|c%n~b?` zL4SN3*$ucu5el)5v%$-ru0OGA%$v}{j(5tl?y{4;Jpg7?m|+T(#Vmg#NV z@g_`jIgF@5kC}l70gJn+2svNg*=;(!;?Z`iS2OF~vpraO9U1h97YUj?C8*>!AT0IC z1}_ak1Kk(dma%=Aq5$n4*R&PFICF0@{cC{*6(N9*pP1 zT%s%pbRG1~4iMcBl7Y8?m;hqWXA78g7!}UM272kQNJ*{Q_XN&>%uR0Jth?cn`2PSQ C4uEI? diff --git a/src/user/plugins/admin/themes/grav/css/datepicker/Flat/sprite_2x.png b/src/user/plugins/admin/themes/grav/css/datepicker/Flat/sprite_2x.png deleted file mode 100644 index ffffbe9fffd6ff6b6e9e16816bbca91ed292d19d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29105 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%0D}1<0E&ygU$cbTi8gBr%5~AH# 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 Ms=6wrx2;3|9~7@iU;qFB diff --git a/src/user/plugins/admin/themes/grav/css/datepicker/Flat/sprite_kpi.png b/src/user/plugins/admin/themes/grav/css/datepicker/Flat/sprite_kpi.png deleted file mode 100644 index 8b15ccdaac15750a2238e9a77c0bc3cc812842e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 787 zcmeAS@N?(olHy`uVBq!ia0vp^2|z5s!3-qtrF5MJQlA5SLR|m<|Nrxx>=$RV*49>^ z^#MQz5CItwE|391$Xp;B4uE!0gAvCL)5^Qs3?L|Cn-_%vwf1Wqc zWoBdklPPq#Lg;*E)Mx3pf2RFxKl9|R!THHHTdw|G8YSn-^Tg?-)`w}{HlMxOZr`rB zA^mxd%F<_fJAei=HhH=@hE&8Yy^>k}Nz@jTT3zedFD6yNm`V+hc2 zS9;3Cvf`gtL*uyx>l=Ce3telDIB3eheBv#0;%sRV$4ZctUUIrvKy$BxVC+p>IE(zg&nSi2iGxW6*j(E&nmGaz3>>D!23fhSq`1( zI^X!U_GbP16O0$*xfL$NJU#FthFSd2b9bg68yb`OQp{8~oa7FvS5+`ES89|L{<*%P zthv5ixj|TZhjXUm;INC&3wn+iS6GR z{p6qL5fKf>hVo^XkKT}-Jyc0SnWSj#oYZ6txe8K5Wxy6cTu0tiAcE{%)5A^}E(B4>Xy2{VV@R Wp*7u3w`c2tV%O8v&t;ucLK6UIA#U6N diff --git a/src/user/plugins/admin/themes/grav/css/datepicker/Flat/sprite_kpi_2x.png b/src/user/plugins/admin/themes/grav/css/datepicker/Flat/sprite_kpi_2x.png deleted file mode 100644 index 89bfe3729c1428710c1a06d980d07043d4d5821d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1472 zcmV;x1wZNK@=XnAy|SS1cD$W zzJ+ipF#;orgu*g<5_%2nNsJyuxsoVe3LzL$kq2l6KTAN0Y`KlY2aEwv*}*7+2EJ}#bVLg+Z750 zYVe;#67-=4-#=&Mz48eDR>C@gNUJzdtR>9=pF$l=ElXT)8v_4HB0*hf^bckNSoj^N zR+y3juo>~!VxZX;th+Nj6I5FRjEkIltLr0@^o{-cFhQJ>t z!2-4wNdTB4<_$DHUpf640)N&?&=k=h(|FCM%%M`P?Yb;Hb5|G_QC=XJ1$GD<-N8C- zfj`S6hyr>OUb7_+SlJ)njo)=g=3$G^J{-(6wZwpBgoM%se-=rQNAoAnG|F3ej=Bo6 zJqw!^3Np&d9vfTIfNjRc0aQ&E3X_To{8=Lbm>ap6>p4P`Bu*gMbRqP+75}CRMi=WB zXtSXH68yl zlwC>z_TV5 z#iG&dz(S!=Ltt_wNjsK#PW<>u3tqVPnw68%M5V(a0Xjr-fws8LDpWp;Wzz(HA7_Fn zlOvI9jNYd{CwNazlB}+zT{IaE!h|J>ic44~jo|l<1T%^r5>=BVZgdy%Fu^?o67@DZ z?Au0B0_-ulDDF6x5s{q34#=e({JK7NC`%Dsk|mQWX|0P)Ht2h_E0ab6aC^R!sCObX z6WElgP}{mTx+!u}xHMrwd`)-hB56(qW}C>M3Ay{{9rf|9%zglHWey44H^k&~i6)rc z)j;0yRwO%4&0L?)Jy!}SBj>=Wl~Sme6zpr4`5Mb$mQuPVS^!oN`oH3@tH zzmCZvVv@*2lc^Hxk`nm9a(L^YpWi^+wHoXhsW6MESxiL&pTOV8%VgD5fuGXk&^1YtuA6#4m<2X0y#Gdc4XaClHAb^%fSLrpf#3FSuDB6?nwg1^C(UqR zLc`G|+Xmlz8{0TG*N-E?8b_7b648jUZ{Rm!a)=OalvQ_IyF6nEf?{xLh>6YdB?SL} zfwvkD&jyW4Vp9UYi?cyPM{cA a0t^5aJt<4Ik;B*k0000 .k-link { - color: inherit; -} -/* widget */ -.k-textbox > input, -.k-input[type="text"], -.k-input[type="number"], -.k-textbox, -.k-picker-wrap .k-input, -.k-button { - font-size: 100%; - font-family: inherit; - border-style: solid; - border-width: 1px; - -webkit-appearance: none; -} -.k-widget, -.k-block, -.k-inline-block, -.k-draghandle { - border-style: solid; - border-width: 1px; - -webkit-appearance: none; -} -.k-block, -.k-widget { - line-height: normal; - outline: 0; -} -/* Block */ -.k-block { - padding: 2px; -} -/* button */ -.k-button { - display: inline-block; - margin: 0; - padding: 0.2em 0.7em; - font-family: inherit; - line-height: 1.72em; - text-align: center; - cursor: pointer; - text-decoration: none; -} -.k-button[disabled], -.k-button.k-state-disabled, -.k-state-disabled .k-button, -.k-state-disabled .k-button:hover, -.k-button.k-state-disabled:hover, -.k-state-disabled .k-button:active, -.k-button.k-state-disabled:active { - cursor: default; -} -.k-ie7 .k-button { - line-height: normal; -} -a.k-button { - -khtml-user-select: none; - -webkit-user-select: none; - -moz-user-select: -moz-none; - -ms-user-select: none; - user-select: none; - text-decoration: none; -} -/* Override the important default line-height in Firefox 4+ */ -.k-ff input.k-button { - padding-bottom: 0.37em; - padding-top: 0.37em; -} -.k-ie7 .k-button { - overflow: visible; - margin-right: 4px; -} -.k-ie7 a.k-button { - line-height: 1.6; - padding-left: 7px; - padding-right: 7px; - /*+1*/ -} -.k-ie7 .k-slider a.k-button { - height: 22px; - line-height: 22px; - padding: 0; -} -.k-ie7 .k-button-expand { - margin-left: 0; - margin-right: 0; -} -button.k-button::-moz-focus-inner, -input.k-button::-moz-focus-inner { - padding: 0; - border: 0; -} -a.k-button-expand { - display: block; -} -button.k-button-expand, -input[type="submit"].k-button-expand, -input[type="button"].k-button-expand, -input[type="reset"].k-button-expand { - width: 100%; -} -body .k-button-icon, -body .k-split-button-arrow { - padding-left: .4em; - padding-right: .4em; -} -.k-ie7 a.k-button-icon { - padding-left: 5px; - padding-right: 5px; - /*+1*/ -} -.k-button-icontext { - overflow: visible; - /*IE9*/ -} -.k-toolbar .k-button-icontext { - padding-right: .8em; -} -.k-button-icontext .k-icon, -.k-button-icontext .k-image { - margin-right: 3px; - margin-right: .3rem; - margin-left: -3px; - margin-left: -0.3rem; -} -.k-button.k-button-icontext .k-icon, -.k-button.k-button-icontext .k-image { - vertical-align: text-top; -} -html body .k-button-bare { - background: none !important; - /*spares long selectors*/ - color: inherit; - border-width: 0; -} -html body .k-button-bare.k-upload-button:hover { - color: inherit; -} -/* link */ -.k-link { - cursor: pointer; - outline: 0; - text-decoration: none; -} -.k-grid-header span.k-link { - cursor: default; -} -/* states */ -.k-state-disabled, -.k-state-disabled .k-link, -.k-state-disabled .k-icon, -.k-state-disabled .k-button, -.k-state-disabled .k-draghandle, -.k-state-disabled .k-upload-button input { - cursor: default !important; - outline: 0; -} -@media print { - .k-state-disabled, - .k-state-disabled .k-input { - opacity: 1 !important; - } -} -.k-state-error { - border-style: ridge; -} -.k-state-empty { - font-style: italic; -} -/* icons */ -.k-icon, -.k-sprite, -.k-button-group .k-tool-icon { - display: inline-block; - width: 16px; - height: 16px; - overflow: hidden; - background-repeat: no-repeat; - font-size: 0; - line-height: 0; - text-align: center; - -ms-high-contrast-adjust: none; -} -.k-icon.k-i-none { - background-image: none !important; - /* should never be a background on these */ -} -/* In IE7 vertical align: middle can't be overridden */ -.k-ie8 .k-icon, -.k-ie8 .k-sprite, -.k-ie8 .k-button-group .k-tool-icon { - vertical-align: middle; -} -:root * > .k-icon, -:root * > .k-sprite, -:root * > .k-button-group .k-tool-icon { - vertical-align: middle; -} -.k-icon, -.k-sprite { - background-color: transparent; -} -.k-ie7 .k-icon, -.k-ie7 .k-sprite { - text-indent: 0; -} -.k-numerictextbox .k-select .k-link span.k-i-arrow-n { - background-position: 0 -3px; -} -.k-numerictextbox .k-select .k-link span.k-i-arrow-s { - background-position: 0 -35px; -} -.k-state-selected .k-i-arrow-n { - background-position: -16px 0px; -} -.k-link:not(.k-state-disabled):hover > .k-state-selected .k-i-arrow-n, -.k-state-hover > .k-state-selected .k-i-arrow-n, -.k-state-hover > * > .k-state-selected .k-i-arrow-n, -.k-button:not(.k-state-disabled):hover .k-state-selected .k-i-arrow-n, -.k-textbox:hover .k-state-selected .k-i-arrow-n, -.k-button:active .k-state-selected .k-i-arrow-n { - background-position: -32px 0px; -} -.k-numerictextbox .k-link.k-state-selected span.k-i-arrow-n, -.k-numerictextbox .k-state-hover .k-link span.k-i-arrow-n { - background-position: -16px -3px; -} -.k-state-selected .k-i-arrow-s { - background-position: -16px -32px; -} -.k-link:not(.k-state-disabled):hover > .k-state-selected .k-i-arrow-s, -.k-state-hover > .k-state-selected .k-i-arrow-s, -.k-state-hover > * > .k-state-selected .k-i-arrow-s, -.k-button:not(.k-state-disabled):hover .k-state-selected .k-i-arrow-s, -.k-textbox:hover .k-state-selected .k-i-arrow-s, -.k-button:active .k-state-selected .k-i-arrow-s { - background-position: -32px -32px; -} -.k-numerictextbox .k-link.k-state-selected span.k-i-arrow-s, -.k-numerictextbox .k-state-hover .k-link span.k-i-arrow-s { - background-position: -16px -35px; -} -.k-grid-header th > .k-link:hover span.k-i-arrow-n { - background-position: 0px 0px; -} -.k-grid-header th > .k-link:hover span.k-i-arrow-s { - background-position: 0px -32px; -} -.k-group-indicator .k-link:hover span.k-si-arrow-n { - background-position: 0 -129px; -} -.k-group-indicator .k-link:hover span.k-si-arrow-s { - background-position: 0 -159px; -} -.k-group-indicator .k-button:hover span.k-group-delete { - background-position: -32px -16px; -} -.k-scheduler .k-scheduler-toolbar .k-nav-current .k-link .k-i-calendar { - background-position: -32px -176px; -} -.k-i-arrow-n { - background-position: 0px 0px; -} -.k-link:not(.k-state-disabled):hover > .k-i-arrow-n, -.k-state-hover > .k-i-arrow-n, -.k-state-hover > * > .k-i-arrow-n, -.k-button:not(.k-state-disabled):hover .k-i-arrow-n, -.k-textbox:hover .k-i-arrow-n, -.k-button:active .k-i-arrow-n { - background-position: -16px 0px; -} -.k-i-arrow-e { - background-position: 0px -16px; -} -.k-link:not(.k-state-disabled):hover > .k-i-arrow-e, -.k-state-hover > .k-i-arrow-e, -.k-state-hover > * > .k-i-arrow-e, -.k-button:not(.k-state-disabled):hover .k-i-arrow-e, -.k-textbox:hover .k-i-arrow-e, -.k-button:active .k-i-arrow-e { - background-position: -16px -16px; -} -.k-rtl .k-i-arrow-w { - background-position: 0px -16px; -} -.k-rtl .k-link:not(.k-state-disabled):hover > .k-i-arrow-w, -.k-rtl .k-state-hover > .k-i-arrow-w, -.k-rtl .k-state-hover > * > .k-i-arrow-w, -.k-rtl .k-button:not(.k-state-disabled):hover .k-i-arrow-w, -.k-rtl .k-textbox:hover .k-i-arrow-w, -.k-rtl .k-button:active .k-i-arrow-w { - background-position: -16px -16px; -} -.k-i-arrow-s { - background-position: 0px -32px; -} -.k-link:not(.k-state-disabled):hover > .k-i-arrow-s, -.k-state-hover > .k-i-arrow-s, -.k-state-hover > * > .k-i-arrow-s, -.k-button:not(.k-state-disabled):hover .k-i-arrow-s, -.k-textbox:hover .k-i-arrow-s, -.k-button:active .k-i-arrow-s { - background-position: -16px -32px; -} -.k-i-arrow-w { - background-position: 0px -48px; -} -.k-link:not(.k-state-disabled):hover > .k-i-arrow-w, -.k-state-hover > .k-i-arrow-w, -.k-state-hover > * > .k-i-arrow-w, -.k-button:not(.k-state-disabled):hover .k-i-arrow-w, -.k-textbox:hover .k-i-arrow-w, -.k-button:active .k-i-arrow-w { - background-position: -16px -48px; -} -.k-rtl .k-i-arrow-e { - background-position: 0px -48px; -} -.k-rtl .k-link:not(.k-state-disabled):hover > .k-i-arrow-e, -.k-rtl .k-state-hover > .k-i-arrow-e, -.k-rtl .k-state-hover > * > .k-i-arrow-e, -.k-rtl .k-button:not(.k-state-disabled):hover .k-i-arrow-e, -.k-rtl .k-textbox:hover .k-i-arrow-e, -.k-rtl .k-button:active .k-i-arrow-e { - background-position: -16px -48px; -} -.k-i-seek-n { - background-position: 0px -64px; -} -.k-link:not(.k-state-disabled):hover > .k-i-seek-n, -.k-state-hover > .k-i-seek-n, -.k-state-hover > * > .k-i-seek-n, -.k-button:not(.k-state-disabled):hover .k-i-seek-n, -.k-textbox:hover .k-i-seek-n, -.k-button:active .k-i-seek-n { - background-position: -16px -64px; -} -.k-i-seek-e { - background-position: 0px -80px; -} -.k-link:not(.k-state-disabled):hover > .k-i-seek-e, -.k-state-hover > .k-i-seek-e, -.k-state-hover > * > .k-i-seek-e, -.k-button:not(.k-state-disabled):hover .k-i-seek-e, -.k-textbox:hover .k-i-seek-e, -.k-button:active .k-i-seek-e { - background-position: -16px -80px; -} -.k-rtl .k-i-seek-w { - background-position: 0px -80px; -} -.k-rtl .k-link:not(.k-state-disabled):hover > .k-i-seek-w, -.k-rtl .k-state-hover > .k-i-seek-w, -.k-rtl .k-state-hover > * > .k-i-seek-w, -.k-rtl .k-button:not(.k-state-disabled):hover .k-i-seek-w, -.k-rtl .k-textbox:hover .k-i-seek-w, -.k-rtl .k-button:active .k-i-seek-w { - background-position: -16px -80px; -} -.k-i-seek-s { - background-position: 0px -96px; -} -.k-link:not(.k-state-disabled):hover > .k-i-seek-s, -.k-state-hover > .k-i-seek-s, -.k-state-hover > * > .k-i-seek-s, -.k-button:not(.k-state-disabled):hover .k-i-seek-s, -.k-textbox:hover .k-i-seek-s, -.k-button:active .k-i-seek-s { - background-position: -16px -96px; -} -.k-i-seek-w { - background-position: 0px -112px; -} -.k-link:not(.k-state-disabled):hover > .k-i-seek-w, -.k-state-hover > .k-i-seek-w, -.k-state-hover > * > .k-i-seek-w, -.k-button:not(.k-state-disabled):hover .k-i-seek-w, -.k-textbox:hover .k-i-seek-w, -.k-button:active .k-i-seek-w { - background-position: -16px -112px; -} -.k-rtl .k-i-seek-e { - background-position: 0px -112px; -} -.k-rtl .k-link:not(.k-state-disabled):hover > .k-i-seek-e, -.k-rtl .k-state-hover > .k-i-seek-e, -.k-rtl .k-state-hover > * > .k-i-seek-e, -.k-rtl .k-button:not(.k-state-disabled):hover .k-i-seek-e, -.k-rtl .k-textbox:hover .k-i-seek-e, -.k-rtl .k-button:active .k-i-seek-e { - background-position: -16px -112px; -} -.k-si-arrow-n { - background-position: 0 -129px; -} -.k-link:not(.k-state-disabled):hover > .k-si-arrow-n, -.k-state-hover > .k-si-arrow-n, -.k-state-hover > * > .k-si-arrow-n, -.k-button:not(.k-state-disabled):hover .k-si-arrow-n, -.k-textbox:hover .k-si-arrow-n, -.k-button:active .k-si-arrow-n { - background-position: -16px -129px; -} -.k-si-arrow-e { - background-position: 0px -144px; -} -.k-link:not(.k-state-disabled):hover > .k-si-arrow-e, -.k-state-hover > .k-si-arrow-e, -.k-state-hover > * > .k-si-arrow-e, -.k-button:not(.k-state-disabled):hover .k-si-arrow-e, -.k-textbox:hover .k-si-arrow-e, -.k-button:active .k-si-arrow-e { - background-position: -16px -144px; -} -.k-si-arrow-s { - background-position: 0 -159px; -} -.k-link:not(.k-state-disabled):hover > .k-si-arrow-s, -.k-state-hover > .k-si-arrow-s, -.k-state-hover > * > .k-si-arrow-s, -.k-button:not(.k-state-disabled):hover .k-si-arrow-s, -.k-textbox:hover .k-si-arrow-s, -.k-button:active .k-si-arrow-s { - background-position: -16px -159px; -} -.k-si-arrow-w { - background-position: 0px -176px; -} -.k-link:not(.k-state-disabled):hover > .k-si-arrow-w, -.k-state-hover > .k-si-arrow-w, -.k-state-hover > * > .k-si-arrow-w, -.k-button:not(.k-state-disabled):hover .k-si-arrow-w, -.k-textbox:hover .k-si-arrow-w, -.k-button:active .k-si-arrow-w { - background-position: -16px -176px; -} -.k-i-arrowhead-n { - background-position: 0px -256px; -} -.k-link:not(.k-state-disabled):hover > .k-i-arrowhead-n, -.k-state-hover > .k-i-arrowhead-n, -.k-state-hover > * > .k-i-arrowhead-n, -.k-button:not(.k-state-disabled):hover .k-i-arrowhead-n, -.k-textbox:hover .k-i-arrowhead-n, -.k-button:active .k-i-arrowhead-n { - background-position: -16px -256px; -} -.k-i-arrowhead-e { - background-position: 0px -272px; -} -.k-link:not(.k-state-disabled):hover > .k-i-arrowhead-e, -.k-state-hover > .k-i-arrowhead-e, -.k-state-hover > * > .k-i-arrowhead-e, -.k-button:not(.k-state-disabled):hover .k-i-arrowhead-e, -.k-textbox:hover .k-i-arrowhead-e, -.k-button:active .k-i-arrowhead-e { - background-position: -16px -272px; -} -.k-i-arrowhead-s { - background-position: 0px -288px; -} -.k-link:not(.k-state-disabled):hover > .k-i-arrowhead-s, -.k-state-hover > .k-i-arrowhead-s, -.k-state-hover > * > .k-i-arrowhead-s, -.k-button:not(.k-state-disabled):hover .k-i-arrowhead-s, -.k-textbox:hover .k-i-arrowhead-s, -.k-button:active .k-i-arrowhead-s { - background-position: -16px -288px; -} -.k-i-arrowhead-w { - background-position: 0px -304px; -} -.k-link:not(.k-state-disabled):hover > .k-i-arrowhead-w, -.k-state-hover > .k-i-arrowhead-w, -.k-state-hover > * > .k-i-arrowhead-w, -.k-button:not(.k-state-disabled):hover .k-i-arrowhead-w, -.k-textbox:hover .k-i-arrowhead-w, -.k-button:active .k-i-arrowhead-w { - background-position: -16px -304px; -} -.k-i-expand, -.k-plus, -.k-plus-disabled { - background-position: 0px -192px; -} -.k-link:not(.k-state-disabled):hover > .k-i-expand, -.k-link:not(.k-state-disabled):hover > .k-plus, -.k-link:not(.k-state-disabled):hover > .k-plus-disabled, -.k-state-hover > .k-i-expand, -.k-state-hover > .k-plus, -.k-state-hover > .k-plus-disabled, -.k-state-hover > * > .k-i-expand, -.k-state-hover > * > .k-plus, -.k-state-hover > * > .k-plus-disabled, -.k-button:not(.k-state-disabled):hover .k-i-expand, -.k-button:not(.k-state-disabled):hover .k-plus, -.k-button:not(.k-state-disabled):hover .k-plus-disabled, -.k-textbox:hover .k-i-expand, -.k-textbox:hover .k-plus, -.k-textbox:hover .k-plus-disabled, -.k-button:active .k-i-expand, -.k-button:active .k-plus, -.k-button:active .k-plus-disabled { - background-position: -16px -192px; -} -.k-i-expand-w, -.k-rtl .k-i-expand, -.k-rtl .k-plus, -.k-rtl .k-plus-disabled { - background-position: 0px -208px; -} -.k-link:not(.k-state-disabled):hover > .k-i-expand-w, -.k-link:not(.k-state-disabled):hover > .k-rtl .k-i-expand, -.k-link:not(.k-state-disabled):hover > .k-rtl .k-plus, -.k-link:not(.k-state-disabled):hover > .k-rtl .k-plus-disabled, -.k-state-hover > .k-i-expand-w, -.k-state-hover > .k-rtl .k-i-expand, -.k-state-hover > .k-rtl .k-plus, -.k-state-hover > .k-rtl .k-plus-disabled, -.k-state-hover > * > .k-i-expand-w, -.k-state-hover > * > .k-rtl .k-i-expand, -.k-state-hover > * > .k-rtl .k-plus, -.k-state-hover > * > .k-rtl .k-plus-disabled, -.k-button:not(.k-state-disabled):hover .k-i-expand-w, -.k-button:not(.k-state-disabled):hover .k-rtl .k-i-expand, -.k-button:not(.k-state-disabled):hover .k-rtl .k-plus, -.k-button:not(.k-state-disabled):hover .k-rtl .k-plus-disabled, -.k-textbox:hover .k-i-expand-w, -.k-textbox:hover .k-rtl .k-i-expand, -.k-textbox:hover .k-rtl .k-plus, -.k-textbox:hover .k-rtl .k-plus-disabled, -.k-button:active .k-i-expand-w, -.k-button:active .k-rtl .k-i-expand, -.k-button:active .k-rtl .k-plus, -.k-button:active .k-rtl .k-plus-disabled { - background-position: -16px -208px; -} -.k-i-collapse, -.k-minus, -.k-minus-disabled { - background-position: 0px -224px; -} -.k-link:not(.k-state-disabled):hover > .k-i-collapse, -.k-link:not(.k-state-disabled):hover > .k-minus, -.k-link:not(.k-state-disabled):hover > .k-minus-disabled, -.k-state-hover > .k-i-collapse, -.k-state-hover > .k-minus, -.k-state-hover > .k-minus-disabled, -.k-state-hover > * > .k-i-collapse, -.k-state-hover > * > .k-minus, -.k-state-hover > * > .k-minus-disabled, -.k-button:not(.k-state-disabled):hover .k-i-collapse, -.k-button:not(.k-state-disabled):hover .k-minus, -.k-button:not(.k-state-disabled):hover .k-minus-disabled, -.k-textbox:hover .k-i-collapse, -.k-textbox:hover .k-minus, -.k-textbox:hover .k-minus-disabled, -.k-button:active .k-i-collapse, -.k-button:active .k-minus, -.k-button:active .k-minus-disabled { - background-position: -16px -224px; -} -.k-i-collapse-w, -.k-rtl .k-i-collapse, -.k-rtl .k-minus, -.k-rtl .k-minus-disabled { - background-position: 0px -240px; -} -.k-link:not(.k-state-disabled):hover > .k-i-collapse-w, -.k-link:not(.k-state-disabled):hover > .k-rtl .k-i-collapse, -.k-link:not(.k-state-disabled):hover > .k-rtl .k-minus, -.k-link:not(.k-state-disabled):hover > .k-rtl .k-minus-disabled, -.k-state-hover > .k-i-collapse-w, -.k-state-hover > .k-rtl .k-i-collapse, -.k-state-hover > .k-rtl .k-minus, -.k-state-hover > .k-rtl .k-minus-disabled, -.k-state-hover > * > .k-i-collapse-w, -.k-state-hover > * > .k-rtl .k-i-collapse, -.k-state-hover > * > .k-rtl .k-minus, -.k-state-hover > * > .k-rtl .k-minus-disabled, -.k-button:not(.k-state-disabled):hover .k-i-collapse-w, -.k-button:not(.k-state-disabled):hover .k-rtl .k-i-collapse, -.k-button:not(.k-state-disabled):hover .k-rtl .k-minus, -.k-button:not(.k-state-disabled):hover .k-rtl .k-minus-disabled, -.k-textbox:hover .k-i-collapse-w, -.k-textbox:hover .k-rtl .k-i-collapse, -.k-textbox:hover .k-rtl .k-minus, -.k-textbox:hover .k-rtl .k-minus-disabled, -.k-button:active .k-i-collapse-w, -.k-button:active .k-rtl .k-i-collapse, -.k-button:active .k-rtl .k-minus, -.k-button:active .k-rtl .k-minus-disabled { - background-position: -16px -240px; -} -.k-i-pencil, -.k-edit { - background-position: -32px 0px; -} -.k-link:not(.k-state-disabled):hover > .k-i-pencil, -.k-link:not(.k-state-disabled):hover > .k-edit, -.k-state-hover > .k-i-pencil, -.k-state-hover > .k-edit, -.k-state-hover > * > .k-i-pencil, -.k-state-hover > * > .k-edit, -.k-button:not(.k-state-disabled):hover .k-i-pencil, -.k-button:not(.k-state-disabled):hover .k-edit, -.k-textbox:hover .k-i-pencil, -.k-textbox:hover .k-edit, -.k-button:active .k-i-pencil, -.k-button:active .k-edit { - background-position: -48px 0px; -} -.k-i-close, -.k-delete, -.k-group-delete { - background-position: -32px -16px; -} -.k-link:not(.k-state-disabled):hover > .k-i-close, -.k-link:not(.k-state-disabled):hover > .k-delete, -.k-link:not(.k-state-disabled):hover > .k-group-delete, -.k-state-hover > .k-i-close, -.k-state-hover > .k-delete, -.k-state-hover > .k-group-delete, -.k-state-hover > * > .k-i-close, -.k-state-hover > * > .k-delete, -.k-state-hover > * > .k-group-delete, -.k-button:not(.k-state-disabled):hover .k-i-close, -.k-button:not(.k-state-disabled):hover .k-delete, -.k-button:not(.k-state-disabled):hover .k-group-delete, -.k-textbox:hover .k-i-close, -.k-textbox:hover .k-delete, -.k-textbox:hover .k-group-delete, -.k-button:active .k-i-close, -.k-button:active .k-delete, -.k-button:active .k-group-delete { - background-position: -48px -16px; -} -.k-si-close { - background-position: -160px -80px; -} -.k-link:not(.k-state-disabled):hover > .k-si-close, -.k-state-hover > .k-si-close, -.k-state-hover > * > .k-si-close, -.k-button:not(.k-state-disabled):hover .k-si-close, -.k-textbox:hover .k-si-close, -.k-button:active .k-si-close { - background-position: -176px -80px; -} -.k-multiselect .k-delete { - background-position: -160px -80px; -} -.k-multiselect .k-state-hover .k-delete { - background-position: -176px -80px; -} -.k-i-tick, -.k-insert, -.k-update { - background-position: -32px -32px; -} -.k-link:not(.k-state-disabled):hover > .k-i-tick, -.k-link:not(.k-state-disabled):hover > .k-insert, -.k-link:not(.k-state-disabled):hover > .k-update, -.k-state-hover > .k-i-tick, -.k-state-hover > .k-insert, -.k-state-hover > .k-update, -.k-state-hover > * > .k-i-tick, -.k-state-hover > * > .k-insert, -.k-state-hover > * > .k-update, -.k-button:not(.k-state-disabled):hover .k-i-tick, -.k-button:not(.k-state-disabled):hover .k-insert, -.k-button:not(.k-state-disabled):hover .k-update, -.k-textbox:hover .k-i-tick, -.k-textbox:hover .k-insert, -.k-textbox:hover .k-update, -.k-button:active .k-i-tick, -.k-button:active .k-insert, -.k-button:active .k-update { - background-position: -48px -32px; -} -.k-check:checked, -.k-mobile-list .k-edit-field [type=checkbox], -.k-mobile-list .k-edit-field [type=radio] { - background-position: -32px -32px; -} -.k-link:not(.k-state-disabled):hover > .k-check:checked, -.k-link:not(.k-state-disabled):hover > .k-mobile-list .k-edit-field [type=checkbox], -.k-link:not(.k-state-disabled):hover > .k-mobile-list .k-edit-field [type=radio], -.k-state-hover > .k-check:checked, -.k-state-hover > .k-mobile-list .k-edit-field [type=checkbox], -.k-state-hover > .k-mobile-list .k-edit-field [type=radio], -.k-state-hover > * > .k-check:checked, -.k-state-hover > * > .k-mobile-list .k-edit-field [type=checkbox], -.k-state-hover > * > .k-mobile-list .k-edit-field [type=radio], -.k-button:not(.k-state-disabled):hover .k-check:checked, -.k-button:not(.k-state-disabled):hover .k-mobile-list .k-edit-field [type=checkbox], -.k-button:not(.k-state-disabled):hover .k-mobile-list .k-edit-field [type=radio], -.k-textbox:hover .k-check:checked, -.k-textbox:hover .k-mobile-list .k-edit-field [type=checkbox], -.k-textbox:hover .k-mobile-list .k-edit-field [type=radio], -.k-button:active .k-check:checked, -.k-button:active .k-mobile-list .k-edit-field [type=checkbox], -.k-button:active .k-mobile-list .k-edit-field [type=radio] { - background-position: -48px -32px; -} -.k-i-cancel, -.k-cancel, -.k-denied { - background-position: -32px -48px; -} -.k-link:not(.k-state-disabled):hover > .k-i-cancel, -.k-link:not(.k-state-disabled):hover > .k-cancel, -.k-link:not(.k-state-disabled):hover > .k-denied, -.k-state-hover > .k-i-cancel, -.k-state-hover > .k-cancel, -.k-state-hover > .k-denied, -.k-state-hover > * > .k-i-cancel, -.k-state-hover > * > .k-cancel, -.k-state-hover > * > .k-denied, -.k-button:not(.k-state-disabled):hover .k-i-cancel, -.k-button:not(.k-state-disabled):hover .k-cancel, -.k-button:not(.k-state-disabled):hover .k-denied, -.k-textbox:hover .k-i-cancel, -.k-textbox:hover .k-cancel, -.k-textbox:hover .k-denied, -.k-button:active .k-i-cancel, -.k-button:active .k-cancel, -.k-button:active .k-denied { - background-position: -48px -48px; -} -.k-i-plus, -.k-add { - background-position: -32px -64px; -} -.k-link:not(.k-state-disabled):hover > .k-i-plus, -.k-link:not(.k-state-disabled):hover > .k-add, -.k-state-hover > .k-i-plus, -.k-state-hover > .k-add, -.k-state-hover > * > .k-i-plus, -.k-state-hover > * > .k-add, -.k-button:not(.k-state-disabled):hover .k-i-plus, -.k-button:not(.k-state-disabled):hover .k-add, -.k-textbox:hover .k-i-plus, -.k-textbox:hover .k-add, -.k-button:active .k-i-plus, -.k-button:active .k-add { - background-position: -48px -64px; -} -.k-i-funnel, -.k-filter { - background-position: -32px -80px; -} -.k-link:not(.k-state-disabled):hover > .k-i-funnel, -.k-link:not(.k-state-disabled):hover > .k-filter, -.k-state-hover > .k-i-funnel, -.k-state-hover > .k-filter, -.k-state-hover > * > .k-i-funnel, -.k-state-hover > * > .k-filter, -.k-button:not(.k-state-disabled):hover .k-i-funnel, -.k-button:not(.k-state-disabled):hover .k-filter, -.k-textbox:hover .k-i-funnel, -.k-textbox:hover .k-filter, -.k-button:active .k-i-funnel, -.k-button:active .k-filter { - background-position: -48px -80px; -} -.k-i-funnel-clear, -.k-clear-filter { - background-position: -32px -96px; -} -.k-link:not(.k-state-disabled):hover > .k-i-funnel-clear, -.k-link:not(.k-state-disabled):hover > .k-clear-filter, -.k-state-hover > .k-i-funnel-clear, -.k-state-hover > .k-clear-filter, -.k-state-hover > * > .k-i-funnel-clear, -.k-state-hover > * > .k-clear-filter, -.k-button:not(.k-state-disabled):hover .k-i-funnel-clear, -.k-button:not(.k-state-disabled):hover .k-clear-filter, -.k-textbox:hover .k-i-funnel-clear, -.k-textbox:hover .k-clear-filter, -.k-button:active .k-i-funnel-clear, -.k-button:active .k-clear-filter { - background-position: -48px -96px; -} -.k-i-lock { - background-position: -64px 0px; -} -.k-link:not(.k-state-disabled):hover > .k-i-lock, -.k-state-hover > .k-i-lock, -.k-state-hover > * > .k-i-lock, -.k-button:not(.k-state-disabled):hover .k-i-lock, -.k-textbox:hover .k-i-lock, -.k-button:active .k-i-lock { - background-position: -80px 0px; -} -.k-i-unlock { - background-position: -64px -16px; -} -.k-link:not(.k-state-disabled):hover > .k-i-unlock, -.k-state-hover > .k-i-unlock, -.k-state-hover > * > .k-i-unlock, -.k-button:not(.k-state-disabled):hover .k-i-unlock, -.k-textbox:hover .k-i-unlock, -.k-button:active .k-i-unlock { - background-position: -80px -16px; -} -.k-i-refresh { - background-position: -32px -112px; -} -.k-link:not(.k-state-disabled):hover > .k-i-refresh, -.k-state-hover > .k-i-refresh, -.k-state-hover > * > .k-i-refresh, -.k-button:not(.k-state-disabled):hover .k-i-refresh, -.k-textbox:hover .k-i-refresh, -.k-button:active .k-i-refresh { - background-position: -48px -112px; -} -.k-i-exception { - background-position: -160px -304px; -} -.k-link:not(.k-state-disabled):hover > .k-i-exception, -.k-state-hover > .k-i-exception, -.k-state-hover > * > .k-i-exception, -.k-button:not(.k-state-disabled):hover .k-i-exception, -.k-textbox:hover .k-i-exception, -.k-button:active .k-i-exception { - background-position: -176px -304px; -} -.k-i-restore { - background-position: -32px -128px; -} -.k-link:not(.k-state-disabled):hover > .k-i-restore, -.k-state-hover > .k-i-restore, -.k-state-hover > * > .k-i-restore, -.k-button:not(.k-state-disabled):hover .k-i-restore, -.k-textbox:hover .k-i-restore, -.k-button:active .k-i-restore { - background-position: -48px -128px; -} -.k-i-maximize { - background-position: -32px -144px; -} -.k-link:not(.k-state-disabled):hover > .k-i-maximize, -.k-state-hover > .k-i-maximize, -.k-state-hover > * > .k-i-maximize, -.k-button:not(.k-state-disabled):hover .k-i-maximize, -.k-textbox:hover .k-i-maximize, -.k-button:active .k-i-maximize { - background-position: -48px -144px; -} -.k-i-minimize { - background-position: -64px -288px; -} -.k-link:not(.k-state-disabled):hover > .k-i-minimize, -.k-state-hover > .k-i-minimize, -.k-state-hover > * > .k-i-minimize, -.k-button:not(.k-state-disabled):hover .k-i-minimize, -.k-textbox:hover .k-i-minimize, -.k-button:active .k-i-minimize { - background-position: -80px -288px; -} -.k-i-pin { - background-position: -160px -256px; -} -.k-link:not(.k-state-disabled):hover > .k-i-pin, -.k-state-hover > .k-i-pin, -.k-state-hover > * > .k-i-pin, -.k-button:not(.k-state-disabled):hover .k-i-pin, -.k-textbox:hover .k-i-pin, -.k-button:active .k-i-pin { - background-position: -176px -256px; -} -.k-i-unpin { - background-position: -160px -272px; -} -.k-link:not(.k-state-disabled):hover > .k-i-unpin, -.k-state-hover > .k-i-unpin, -.k-state-hover > * > .k-i-unpin, -.k-button:not(.k-state-disabled):hover .k-i-unpin, -.k-textbox:hover .k-i-unpin, -.k-button:active .k-i-unpin { - background-position: -176px -272px; -} -.k-resize-se { - background-position: -32px -160px; -} -.k-link:not(.k-state-disabled):hover > .k-resize-se, -.k-state-hover > .k-resize-se, -.k-state-hover > * > .k-resize-se, -.k-button:not(.k-state-disabled):hover .k-resize-se, -.k-textbox:hover .k-resize-se, -.k-button:active .k-resize-se { - background-position: -48px -160px; -} -.k-i-calendar { - background-position: -32px -176px; -} -.k-link:not(.k-state-disabled):hover > .k-i-calendar, -.k-state-hover > .k-i-calendar, -.k-state-hover > * > .k-i-calendar, -.k-button:not(.k-state-disabled):hover .k-i-calendar, -.k-textbox:hover .k-i-calendar, -.k-button:active .k-i-calendar { - background-position: -48px -176px; -} -.k-i-clock { - background-position: -32px -192px; -} -.k-link:not(.k-state-disabled):hover > .k-i-clock, -.k-state-hover > .k-i-clock, -.k-state-hover > * > .k-i-clock, -.k-button:not(.k-state-disabled):hover .k-i-clock, -.k-textbox:hover .k-i-clock, -.k-button:active .k-i-clock { - background-position: -48px -192px; -} -.k-si-plus { - background-position: -32px -208px; -} -.k-link:not(.k-state-disabled):hover > .k-si-plus, -.k-state-hover > .k-si-plus, -.k-state-hover > * > .k-si-plus, -.k-button:not(.k-state-disabled):hover .k-si-plus, -.k-textbox:hover .k-si-plus, -.k-button:active .k-si-plus { - background-position: -48px -208px; -} -.k-si-minus { - background-position: -32px -224px; -} -.k-link:not(.k-state-disabled):hover > .k-si-minus, -.k-state-hover > .k-si-minus, -.k-state-hover > * > .k-si-minus, -.k-button:not(.k-state-disabled):hover .k-si-minus, -.k-textbox:hover .k-si-minus, -.k-button:active .k-si-minus { - background-position: -48px -224px; -} -.k-i-search { - background-position: -32px -240px; -} -.k-link:not(.k-state-disabled):hover > .k-i-search, -.k-state-hover > .k-i-search, -.k-state-hover > * > .k-i-search, -.k-button:not(.k-state-disabled):hover .k-i-search, -.k-textbox:hover .k-i-search, -.k-button:active .k-i-search { - background-position: -48px -240px; -} -.k-i-custom { - background-position: -115px -113px; -} -.k-link:not(.k-state-disabled):hover > .k-i-custom, -.k-state-hover > .k-i-custom, -.k-state-hover > * > .k-i-custom, -.k-button:not(.k-state-disabled):hover .k-i-custom, -.k-textbox:hover .k-i-custom, -.k-button:active .k-i-custom { - background-position: -141px -113px; -} -.k-editor .k-i-custom { - background-position: -111px -109px; -} -.k-viewHtml { - background-position: -288px -120px; -} -.k-i-insert-n, -.k-insert-top { - background-position: -160px -32px; -} -.k-link:not(.k-state-disabled):hover > .k-i-insert-n, -.k-link:not(.k-state-disabled):hover > .k-insert-top, -.k-state-hover > .k-i-insert-n, -.k-state-hover > .k-insert-top, -.k-state-hover > * > .k-i-insert-n, -.k-state-hover > * > .k-insert-top, -.k-button:not(.k-state-disabled):hover .k-i-insert-n, -.k-button:not(.k-state-disabled):hover .k-insert-top, -.k-textbox:hover .k-i-insert-n, -.k-textbox:hover .k-insert-top, -.k-button:active .k-i-insert-n, -.k-button:active .k-insert-top { - background-position: -176px -32px; -} -.k-i-insert-m, -.k-insert-middle { - background-position: -160px -48px; -} -.k-link:not(.k-state-disabled):hover > .k-i-insert-m, -.k-link:not(.k-state-disabled):hover > .k-insert-middle, -.k-state-hover > .k-i-insert-m, -.k-state-hover > .k-insert-middle, -.k-state-hover > * > .k-i-insert-m, -.k-state-hover > * > .k-insert-middle, -.k-button:not(.k-state-disabled):hover .k-i-insert-m, -.k-button:not(.k-state-disabled):hover .k-insert-middle, -.k-textbox:hover .k-i-insert-m, -.k-textbox:hover .k-insert-middle, -.k-button:active .k-i-insert-m, -.k-button:active .k-insert-middle { - background-position: -176px -48px; -} -.k-i-insert-s, -.k-insert-bottom { - background-position: -160px -64px; -} -.k-link:not(.k-state-disabled):hover > .k-i-insert-s, -.k-link:not(.k-state-disabled):hover > .k-insert-bottom, -.k-state-hover > .k-i-insert-s, -.k-state-hover > .k-insert-bottom, -.k-state-hover > * > .k-i-insert-s, -.k-state-hover > * > .k-insert-bottom, -.k-button:not(.k-state-disabled):hover .k-i-insert-s, -.k-button:not(.k-state-disabled):hover .k-insert-bottom, -.k-textbox:hover .k-i-insert-s, -.k-textbox:hover .k-insert-bottom, -.k-button:active .k-i-insert-s, -.k-button:active .k-insert-bottom { - background-position: -176px -64px; -} -.k-drop-hint { - background-position: 0 -326px; -} -.k-i-note, -.k-warning { - background-position: -160px -240px; -} -.k-link:not(.k-state-disabled):hover > .k-i-note, -.k-link:not(.k-state-disabled):hover > .k-warning, -.k-state-hover > .k-i-note, -.k-state-hover > .k-warning, -.k-state-hover > * > .k-i-note, -.k-state-hover > * > .k-warning, -.k-button:not(.k-state-disabled):hover .k-i-note, -.k-button:not(.k-state-disabled):hover .k-warning, -.k-textbox:hover .k-i-note, -.k-textbox:hover .k-warning, -.k-button:active .k-i-note, -.k-button:active .k-warning { - background-position: -176px -240px; -} -.k-i-sort-asc { - background-position: -112px -240px; -} -.k-link:not(.k-state-disabled):hover > .k-i-sort-asc, -.k-state-hover > .k-i-sort-asc, -.k-state-hover > * > .k-i-sort-asc, -.k-button:not(.k-state-disabled):hover .k-i-sort-asc, -.k-textbox:hover .k-i-sort-asc, -.k-button:active .k-i-sort-asc { - background-position: -128px -240px; -} -.k-i-sort-desc { - background-position: -112px -256px; -} -.k-link:not(.k-state-disabled):hover > .k-i-sort-desc, -.k-state-hover > .k-i-sort-desc, -.k-state-hover > * > .k-i-sort-desc, -.k-button:not(.k-state-disabled):hover .k-i-sort-desc, -.k-textbox:hover .k-i-sort-desc, -.k-button:active .k-i-sort-desc { - background-position: -128px -256px; -} -.k-i-group { - background-position: -112px -272px; -} -.k-link:not(.k-state-disabled):hover > .k-i-group, -.k-state-hover > .k-i-group, -.k-state-hover > * > .k-i-group, -.k-button:not(.k-state-disabled):hover .k-i-group, -.k-textbox:hover .k-i-group, -.k-button:active .k-i-group { - background-position: -128px -272px; -} -.k-i-ungroup { - background-position: -112px -288px; -} -.k-link:not(.k-state-disabled):hover > .k-i-ungroup, -.k-state-hover > .k-i-ungroup, -.k-state-hover > * > .k-i-ungroup, -.k-button:not(.k-state-disabled):hover .k-i-ungroup, -.k-textbox:hover .k-i-ungroup, -.k-button:active .k-i-ungroup { - background-position: -128px -288px; -} -.k-i-columns { - background-position: -112px -304px; -} -.k-link:not(.k-state-disabled):hover > .k-i-columns, -.k-state-hover > .k-i-columns, -.k-state-hover > * > .k-i-columns, -.k-button:not(.k-state-disabled):hover .k-i-columns, -.k-textbox:hover .k-i-columns, -.k-button:active .k-i-columns { - background-position: -128px -304px; -} -.k-i-hbars { - background-position: -64px -32px; -} -.k-link:not(.k-state-disabled):hover > .k-i-hbars, -.k-state-hover > .k-i-hbars, -.k-state-hover > * > .k-i-hbars, -.k-button:not(.k-state-disabled):hover .k-i-hbars, -.k-textbox:hover .k-i-hbars, -.k-button:active .k-i-hbars { - background-position: -80px -32px; -} -.k-i-vbars { - background-position: -64px -48px; -} -.k-link:not(.k-state-disabled):hover > .k-i-vbars, -.k-state-hover > .k-i-vbars, -.k-state-hover > * > .k-i-vbars, -.k-button:not(.k-state-disabled):hover .k-i-vbars, -.k-textbox:hover .k-i-vbars, -.k-button:active .k-i-vbars { - background-position: -80px -48px; -} -.k-i-sum { - background-position: -64px -64px; -} -.k-link:not(.k-state-disabled):hover > .k-i-sum, -.k-state-hover > .k-i-sum, -.k-state-hover > * > .k-i-sum, -.k-button:not(.k-state-disabled):hover .k-i-sum, -.k-textbox:hover .k-i-sum, -.k-button:active .k-i-sum { - background-position: -80px -64px; -} -.k-i-pdf { - background-position: -64px -80px; -} -.k-link:not(.k-state-disabled):hover > .k-i-pdf, -.k-state-hover > .k-i-pdf, -.k-state-hover > * > .k-i-pdf, -.k-button:not(.k-state-disabled):hover .k-i-pdf, -.k-textbox:hover .k-i-pdf, -.k-button:active .k-i-pdf { - background-position: -80px -80px; -} -.k-i-excel { - background-position: -64px -96px; -} -.k-link:not(.k-state-disabled):hover > .k-i-excel, -.k-state-hover > .k-i-excel, -.k-state-hover > * > .k-i-excel, -.k-button:not(.k-state-disabled):hover .k-i-excel, -.k-textbox:hover .k-i-excel, -.k-button:active .k-i-excel { - background-position: -80px -96px; -} -.k-i-rotatecw { - background-position: -64px -112px; -} -.k-link:not(.k-state-disabled):hover > .k-i-rotatecw, -.k-state-hover > .k-i-rotatecw, -.k-state-hover > * > .k-i-rotatecw, -.k-button:not(.k-state-disabled):hover .k-i-rotatecw, -.k-textbox:hover .k-i-rotatecw, -.k-button:active .k-i-rotatecw { - background-position: -80px -112px; -} -.k-i-rotateccw { - background-position: -64px -128px; -} -.k-link:not(.k-state-disabled):hover > .k-i-rotateccw, -.k-state-hover > .k-i-rotateccw, -.k-state-hover > * > .k-i-rotateccw, -.k-button:not(.k-state-disabled):hover .k-i-rotateccw, -.k-textbox:hover .k-i-rotateccw, -.k-button:active .k-i-rotateccw { - background-position: -80px -128px; -} -.k-i-undo { - background-position: -64px -160px; -} -.k-link:not(.k-state-disabled):hover > .k-i-undo, -.k-state-hover > .k-i-undo, -.k-state-hover > * > .k-i-undo, -.k-button:not(.k-state-disabled):hover .k-i-undo, -.k-textbox:hover .k-i-undo, -.k-button:active .k-i-undo { - background-position: -80px -160px; -} -.k-i-redo { - background-position: -64px -144px; -} -.k-link:not(.k-state-disabled):hover > .k-i-redo, -.k-state-hover > .k-i-redo, -.k-state-hover > * > .k-i-redo, -.k-button:not(.k-state-disabled):hover .k-i-redo, -.k-textbox:hover .k-i-redo, -.k-button:active .k-i-redo { - background-position: -80px -144px; -} -.k-i-shape { - background-position: -64px -176px; -} -.k-link:not(.k-state-disabled):hover > .k-i-shape, -.k-state-hover > .k-i-shape, -.k-state-hover > * > .k-i-shape, -.k-button:not(.k-state-disabled):hover .k-i-shape, -.k-textbox:hover .k-i-shape, -.k-button:active .k-i-shape { - background-position: -80px -176px; -} -.k-i-connector { - background-position: -64px -192px; -} -.k-link:not(.k-state-disabled):hover > .k-i-connector, -.k-state-hover > .k-i-connector, -.k-state-hover > * > .k-i-connector, -.k-button:not(.k-state-disabled):hover .k-i-connector, -.k-textbox:hover .k-i-connector, -.k-button:active .k-i-connector { - background-position: -80px -192px; -} -.k-i-kpi { - background-position: -64px -208px; -} -.k-link:not(.k-state-disabled):hover > .k-i-kpi, -.k-state-hover > .k-i-kpi, -.k-state-hover > * > .k-i-kpi, -.k-button:not(.k-state-disabled):hover .k-i-kpi, -.k-textbox:hover .k-i-kpi, -.k-button:active .k-i-kpi { - background-position: -80px -208px; -} -.k-i-dimension { - background-position: -64px -224px; -} -.k-link:not(.k-state-disabled):hover > .k-i-dimension, -.k-state-hover > .k-i-dimension, -.k-state-hover > * > .k-i-dimension, -.k-button:not(.k-state-disabled):hover .k-i-dimension, -.k-textbox:hover .k-i-dimension, -.k-button:active .k-i-dimension { - background-position: -80px -224px; -} -.k-file { - background-position: 0px 0px; -} -.k-link:not(.k-state-disabled):hover > .k-file, -.k-state-hover > .k-file, -.k-state-hover > * > .k-file, -.k-button:not(.k-state-disabled):hover .k-file, -.k-textbox:hover .k-file, -.k-button:active .k-file { - background-position: -16px 0px; -} -.k-i-folder-add, -.k-addfolder { - background-position: -32px -272px; -} -.k-link:not(.k-state-disabled):hover > .k-i-folder-add, -.k-link:not(.k-state-disabled):hover > .k-addfolder, -.k-state-hover > .k-i-folder-add, -.k-state-hover > .k-addfolder, -.k-state-hover > * > .k-i-folder-add, -.k-state-hover > * > .k-addfolder, -.k-button:not(.k-state-disabled):hover .k-i-folder-add, -.k-button:not(.k-state-disabled):hover .k-addfolder, -.k-textbox:hover .k-i-folder-add, -.k-textbox:hover .k-addfolder, -.k-button:active .k-i-folder-add, -.k-button:active .k-addfolder { - background-position: -48px -272px; -} -.k-i-folder-up, -.k-goup { - background-position: -32px -288px; -} -.k-link:not(.k-state-disabled):hover > .k-i-folder-up, -.k-link:not(.k-state-disabled):hover > .k-goup, -.k-state-hover > .k-i-folder-up, -.k-state-hover > .k-goup, -.k-state-hover > * > .k-i-folder-up, -.k-state-hover > * > .k-goup, -.k-button:not(.k-state-disabled):hover .k-i-folder-up, -.k-button:not(.k-state-disabled):hover .k-goup, -.k-textbox:hover .k-i-folder-up, -.k-textbox:hover .k-goup, -.k-button:active .k-i-folder-up, -.k-button:active .k-goup { - background-position: -48px -288px; -} -.k-i-more { - background-position: -64px -32px; -} -.k-link:not(.k-state-disabled):hover > .k-i-more, -.k-state-hover > .k-i-more, -.k-state-hover > * > .k-i-more, -.k-button:not(.k-state-disabled):hover .k-i-more, -.k-textbox:hover .k-i-more, -.k-button:active .k-i-more { - background-position: -80px -32px; -} -.k-file > .k-icon { - background-position: -115px -91px; -} -.k-image { - border: 0; -} -.k-breadcrumbs:hover .k-i-arrow-n { - background-position: 0 0; -} -.k-breadcrumbs:hover .k-i-arrow-e { - background-position: 0 -16px; -} -/* Dropdown icon in k-scheduler-views */ -.k-pager-numbers .k-current-page .k-link:after, -.k-scheduler-toolbar > ul.k-scheduler-views > li.k-current-view .k-link:after { - background-position: 0px -32px; -} -.k-link:not(.k-state-disabled):hover > .k-pager-numbers .k-current-page .k-link:after, -.k-link:not(.k-state-disabled):hover > .k-scheduler-toolbar > ul.k-scheduler-views > li.k-current-view .k-link:after, -.k-state-hover > .k-pager-numbers .k-current-page .k-link:after, -.k-state-hover > .k-scheduler-toolbar > ul.k-scheduler-views > li.k-current-view .k-link:after, -.k-state-hover > * > .k-pager-numbers .k-current-page .k-link:after, -.k-state-hover > * > .k-scheduler-toolbar > ul.k-scheduler-views > li.k-current-view .k-link:after, -.k-button:not(.k-state-disabled):hover .k-pager-numbers .k-current-page .k-link:after, -.k-button:not(.k-state-disabled):hover .k-scheduler-toolbar > ul.k-scheduler-views > li.k-current-view .k-link:after, -.k-textbox:hover .k-pager-numbers .k-current-page .k-link:after, -.k-textbox:hover .k-scheduler-toolbar > ul.k-scheduler-views > li.k-current-view .k-link:after, -.k-button:active .k-pager-numbers .k-current-page .k-link:after, -.k-button:active .k-scheduler-toolbar > ul.k-scheduler-views > li.k-current-view .k-link:after { - background-position: -16px -32px; -} -/* Colors */ -html .k-success-colored { - color: #507f50; - border-color: #d0dfd0; - background-color: #f0fff0; -} -html .k-info-colored { - color: #50607f; - border-color: #d0d9df; - background-color: #f0f9ff; -} -html .k-error-colored { - color: #7f5050; - border-color: #dfd0d0; - background-color: #fff0f0; -} -.k-inline-block { - padding: 0 2px; -} -/* loading */ -.k-loading, -.k-loading-image { - background-color: transparent; - background-repeat: no-repeat; - background-position: center center; -} -.k-loading-mask, -.k-loading-image, -.k-loading-text { - position: absolute; -} -.k-loading-mask { - z-index: 100; -} -.k-loading-text { - text-indent: -4000px; - text-align: center; - /*rtl*/ -} -.k-loading-image, -.k-loading-color { - width: 100%; - height: 100%; -} -.k-loading-image { - top: 0; - left: 0; - z-index: 2; -} -.k-loading-color { - filter: alpha(opacity=30); - opacity: .3; -} -.k-content-frame { - border: 0; - width: 100%; - height: 100%; -} -.k-pane > .k-splitter-overlay { - filter: alpha(opacity=0); - opacity: 0; - position: absolute; -} -/* drag n drop */ -.k-drag-clue { - position: absolute; - z-index: 10003; - border-style: solid; - border-width: 1px; - font-size: .9em; - padding: .2em .4em; - white-space: nowrap; - cursor: default; -} -.k-drag-status { - margin-top: -3px; - margin-right: 4px; - vertical-align: middle; -} -.k-reorder-cue { - position: absolute; - width: 1px; - overflow: visible; -} -.k-reorder-cue .k-icon { - position: absolute; - left: -4px; - width: 8px; - height: 4px; -} -.k-reorder-cue .k-i-arrow-s { - top: -4px; - background-position: -4px -166px; -} -.k-reorder-cue .k-i-arrow-n { - bottom: -4px; - background-position: -4px -134px; -} -/* virtual scrollbar */ -.k-scrollbar { - position: absolute; - overflow: scroll; -} -.k-scrollbar-vertical { - top: 0; - right: 0; - width: 17px; - /* scrollbar width */ - height: 100%; - overflow-x: hidden; -} -.k-touch-scrollbar { - display: none; - position: absolute; - z-index: 200000; - height: 8px; - width: 8px; - border: 1px solid #8a8a8a; - background-color: #858585; -} -@media only screen and (-webkit-min-device-pixel-ratio: 2) { - body .k-touch-scrollbar { - height: 12px; - width: 12px; - border-radius: 7px; - } -} -.k-virtual-scrollable-wrap { - overflow-x: auto; - /*needed by IE8*/ -} -/* current time indicator */ -.k-current-time { - background: #f00; - position: absolute; -} -/* override box sizing for grid layout framework integration (Bootstrap 3, Foundation 4) */ -.k-animation-container, -.k-widget, -.k-widget *, -.k-animation-container *, -.k-widget *:before, -.k-animation-container *:after, -.k-block .k-header, -.k-list-container { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -.k-button, -.k-textbox, -.k-autocomplete, -div.k-window-content, -.k-tabstrip > .k-content > .km-scroll-container, -.k-block, -.k-edit-cell .k-widget, -.k-grid-edit-row .k-widget, -.k-grid-edit-row .text-box, -.km-actionsheet > li, -.km-shim { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -/* Fix for Bootstrap 3 */ -.input-group .form-control { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.form-control.k-widget { - padding: 0; -} -a.k-button:hover { - text-decoration: none; -} -/* override iOS styles in mobile Kendo */ -.k-widget, -.k-widget * { - -moz-background-clip: border-box; - -webkit-background-clip: border-box; - background-clip: border-box; -} -input.k-checkbox, -.k-radio { - display: inline; - opacity: 0; - width: 0; - margin: 0; - position: absolute; -} -.k-checkbox-label { - position: relative; - padding-left: 1.5em; - vertical-align: middle; - line-height: 0.875em; - cursor: pointer; -} -.k-checkbox-label:before { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 1em; - height: 1em; - border-width: 1px; - border-style: solid; -} -.k-checkbox-label:after { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 1em; - height: 1em; - border-width: 1px; - border-style: solid; -} -.k-checkbox:checked + .k-checkbox-label:after { - content: "\2713"; - width: 1em; - height: 1em; - position: absolute; - top: 0; - left: 0; - border-width: 1px; - border-style: solid; - text-align: center; -} -.k-checkbox:disabled + .k-checkbox-label { - cursor: auto; -} -.k-radio-label { - position: relative; - padding-left: 1.5em; - vertical-align: middle; - line-height: 0.875em; - cursor: pointer; -} -.k-radio-label:before { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 14px; - height: 14px; - border-style: solid; -} -.k-radio:checked + .k-radio-label:after { - content: ""; - width: 10px; - height: 10px; - position: absolute; - top: 3px; - left: 3px; -} -.k-radio:disabled + .k-radio-label { - cursor: auto; -} -.k-ie8 input.k-checkbox, -.k-ie8 .k-radio { - display: inline-block; - width: auto; -} -.k-ie8 .k-checkbox-label, -.k-ie8 .k-radio-label { - padding-left: 0; -} -.k-ie8 .k-checkbox-label:before, -.k-ie8 .k-checkbox-label:after, -.k-ie8 .k-radio-label:before, -.k-ie8 .k-radio-label:after { - display: none; -} -/* RTL for checkboxes and radio buttons */ -.k-rtl .k-checkbox-label, -.k-rtl .k-radio-label { - padding-right: 1.5em; -} -.k-rtl .k-checkbox-label:before, -.k-rtl .k-checkbox-label:after, -.k-rtl .k-radio-label:before { - right: 0; -} -.k-rtl .k-radio:checked + .k-radio-label:after { - right: 3px; -} -input.k-checkbox + label { - -webkit-user-select: none; - user-select: none; -} -/* Off-screen container used during export */ -.k-pdf-export-shadow { - position: absolute; - overflow: hidden; - left: -15000px; - width: 14400px; -} -/* Calendar */ -.k-calendar { - position: relative; - display: inline-block; - width: 16.917em; - overflow: hidden; -} -.k-calendar td, -.k-calendar .k-link { - text-decoration: none; -} -.k-calendar .k-action-link { - text-decoration: underline; -} -.k-calendar .k-header, -.k-calendar .k-footer { - position: relative; - text-align: center; - zoom: 1; -} -.k-widget.k-calendar .k-nav-prev, -.k-widget.k-calendar .k-nav-next { - position: absolute; - top: 0.16666em; - line-height: 1.8333em; - height: 1.8333em; -} -.k-widget.k-calendar .k-nav-prev { - left: 1%; -} -.k-widget.k-calendar .k-nav-next { - right: 1%; -} -.k-calendar .k-content { - float: left; - border-spacing: 0; - width: 100%; - height: 14.167em; - border-width: 0; - margin: 0; - table-layout: fixed; - outline: 0; -} -.k-calendar .k-content, -.k-calendar .k-content th { - text-align: right; -} -.k-calendar .k-animation-container .k-content { - height: 100%; -} -.k-widget.k-calendar .k-nav-fast { - display: inline-block; - width: 75%; - height: 1.8333em; - line-height: 1.8333em; - margin: 0.16666em -0.08333em 0.3333em 0; -} -.k-calendar .k-header .k-icon { - vertical-align: middle; -} -.k-calendar .k-header .k-link.k-nav-prev, -.k-calendar .k-header .k-link.k-nav-next { - height: 1.8333em; - width: 1.8333em; -} -.k-calendar th { - border-bottom-style: solid; - border-bottom-width: 1px; - padding: .4em .45em .4em .1em; - font-weight: normal; - cursor: default; -} -.k-calendar td { - padding: 0.08333em; - cursor: pointer; -} -.k-calendar .k-state-focus { - border-style: dotted; - border-width: 0.08333em; - padding: 0; -} -.k-calendar .k-content .k-link { - display: block; - overflow: hidden; - min-height: 1.8333em; - line-height: 1.8333em; - padding: 0 .45em 0 .1em; -} -.k-calendar .k-meta-view .k-link { - padding: .25em 0 .3em; - text-align: center; -} -.k-calendar .k-footer { - clear: both; -} -.k-calendar .k-footer .k-nav-today, -.k-calendar .k-footer > .k-state-disabled { - display: block; - height: 100%; - padding: .5em 0; -} -.k-calendar .k-nav-today:hover { - text-decoration: underline; -} -/* ComboBox & DropDownList */ -span.k-datepicker, -span.k-timepicker, -span.k-datetimepicker, -span.k-colorpicker, -span.k-numerictextbox, -span.k-combobox, -span.k-dropdown, -.k-toolbar .k-split-button { - background-image: none; -} -.k-autocomplete, -.k-combobox, -.k-datepicker, -.k-timepicker, -.k-datetimepicker, -.k-colorpicker, -.k-numerictextbox, -.k-dropdown, -.k-selectbox, -.k-textbox, -.k-toolbar .k-split-button { - position: relative; - display: inline-block; - width: 12.4em; - overflow: visible; - border-width: 0; - vertical-align: middle; -} -.k-filter-menu .k-combobox, -.k-filter-menu .k-datepicker, -.k-filter-menu .k-timepicker, -.k-filter-menu .k-datetimepicker, -.k-filter-menu .k-numerictextbox, -.k-filter-menu .k-dropdown, -.k-filter-menu .k-textbox { - width: 13.2em; -} -.k-autocomplete, -.k-combobox, -.k-datepicker, -.k-timepicker, -.k-datetimepicker, -.k-colorpicker, -.k-numerictextbox, -.k-dropdown, -.k-selectbox, -.k-toolbar .k-split-button { - white-space: nowrap; -} -.k-colorpicker, -.k-toolbar .k-split-button { - width: auto; -} -.k-datetimepicker { - width: 15em; -} -.k-autocomplete, -.k-picker-wrap, -.k-numeric-wrap { - position: relative; - cursor: default; -} -.k-dropdown-wrap { - position: relative; -} -.k-dropdown-wrap, -.k-picker-wrap, -.k-numeric-wrap { - display: block; -} -.k-block, -.k-widget, -.k-grid, -.k-slider, -.k-splitter, -.k-treeview, -.k-panelbar, -.k-content, -.k-header-column-menu { - outline: 0; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -.k-block, -.k-slider, -.k-splitbar, -.k-calendar, -.k-treeview, -.k-pager-wrap, -.k-grid-header .k-link, -.k-header-column-menu { - -webkit-touch-callout: none; -} -.k-popup.k-list-container, -.k-popup.k-calendar-container { - -webkit-touch-callout: none; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); - padding: 2px; - border-width: 1px; - border-style: solid; -} -.k-list-container.k-state-border-down, -.k-autocomplete.k-state-border-down, -.k-dropdown-wrap.k-state-border-down, -.k-picker-wrap.k-state-border-down, -.k-numeric-wrap.k-state-border-down { - border-bottom-width: 0; - padding-bottom: 1px; -} -.k-list-container .km-scroll-container { - padding-bottom: 6px; -} -.k-textbox, -.k-autocomplete, -.k-dropdown-wrap, -.k-picker-wrap, -.k-numeric-wrap { - border-width: 1px; - border-style: solid; - padding: 0 1.9em 0 0; -} -.k-numeric-wrap.k-expand-padding { - padding-right: 0; -} -.k-textbox, -.k-autocomplete { - padding: 0; -} -.k-textbox.k-space-left { - padding-left: 1.9em; -} -.k-textbox.k-space-right { - padding-right: 1.9em; -} -.k-textbox .k-icon { - top: 50%; - margin: -8px 0 0; - position: absolute; -} -.k-space-left .k-icon { - left: 3px; -} -.k-space-right .k-icon { - right: 3px; -} -.k-autocomplete, -.k-dropdown-wrap.k-state-focused, -.k-dropdown-wrap.k-state-hover, -.k-picker-wrap.k-state-focused, -.k-picker-wrap.k-state-hover, -.k-numeric-wrap.k-state-focused, -.k-numeric-wrap.k-state-hover { - -webkit-transition: box-shadow .15s ease-out; - -moz-transition: box-shadow .15s ease-out; - -o-transition: box-shadow .15s ease-out; - transition: box-shadow .15s ease-out; - -webkit-transition: "box-shadow .15s ease-out"; - -moz-transition: "box-shadow .15s ease-out"; - -ms-transition: "box-shadow .15s ease-out"; - -o-transition: "box-shadow .15s ease-out"; - transition: "box-shadow .15s ease-out"; -} -.k-textbox > input, -.k-picker-wrap .k-input, -.k-numeric-wrap .k-input, -.k-combobox .k-input { - width: 100%; - vertical-align: top; -} -.k-picker-wrap .k-input, -.k-numeric-wrap .k-input, -.k-dropdown-wrap .k-input, -.k-selectbox .k-input { - font-family: inherit; - border-width: 0; - outline: 0; -} -.k-dropdown .k-input, -.k-selectbox .k-input { - background: transparent; -} -.k-ie7 .k-picker-wrap .k-input, -.k-ie7 .k-numeric-wrap .k-input, -.k-ie7 .k-combobox .k-input { - margin: -1px 0; -} -/* removes excessive spacing */ -.k-picker-wrap .k-select, -.k-numeric-wrap .k-select, -.k-dropdown-wrap .k-select { - position: absolute; - /* icon positioning */ - top: 0; - right: 0; - display: inline-block; - vertical-align: top; - text-decoration: none; -} -.k-combobox .k-select, -.k-picker-wrap .k-select, -.k-numeric-wrap .k-select { - border-style: solid; - border-width: 0 0 0 1px; - border-color: inherit; - /* skin-related, inherit does not work in ie7- */ -} -span.k-datetimepicker .k-select, -span.k-datetimepicker .k-select + .k-select { - right: 0; -} -.k-textbox > input, -.k-autocomplete .k-input { - display: block; -} -.k-combobox .k-icon { - /*margin-top: 1px;*/ -} -.k-dropdown .k-select, -.k-selectbox .k-select { - overflow: hidden; - border: 0; - text-decoration: none; - font: inherit; - color: inherit; -} -.k-dropdown .k-input, -.k-selectbox .k-input { - display: block; - overflow: hidden; - text-overflow: ellipsis; -} -.k-textbox > input, -.k-autocomplete .k-input, -.k-picker-wrap .k-input, -.k-numeric-wrap .k-input, -.k-dropdown-wrap .k-input, -.k-selectbox .k-input { - height: 1.65em; - line-height: 1.65em; - padding: 0.177em 0; - text-indent: 0.33em; - border: 0; - margin: 0; -} -/* fix missing bottom border on browser zoom in Chrome */ -.k-webkit .k-combobox .k-dropdown-wrap:before, -.k-webkit .k-picker-wrap:before, -.k-webkit .k-numeric-wrap:before { - content: "\a0"; - display: inline-block; - width: 0; - height: 1.65em; - padding-bottom: 0.4em; -} -/* above style breaks NumericTextBox layout due display:block style applied to the input */ -.km.root .k-combobox .k-dropdown-wrap:before, -.km.root .k-picker-wrap:before, -.km.root .k-numeric-wrap:before { - content: none; -} -.k-combobox .k-input, -.k-picker-wrap .k-input, -.k-numeric-wrap .k-input { - display: inline; -} -.k-ie7 .k-autocomplete .k-input, -.k-ie7 .k-picker-wrap .k-input, -.k-ie7 .k-numeric-wrap .k-input, -.k-ie7 .k-dropdown-wrap .k-input, -.k-ie7 .k-selectbox .k-input { - text-indent: 0; -} -.k-picker-wrap .k-select, -.k-numeric-wrap .k-select, -.k-dropdown-wrap .k-select { - min-height: 1.65em; - line-height: 2em; - vertical-align: middle; - -moz-box-sizing: border-box; - text-align: center; - width: 1.9em; - height: 100%; -} -.k-numeric-wrap .k-select { - padding: 0; -} -body .k-datetimepicker .k-select { - border-radius: 0; -} -.k-ie7 .k-picker-wrap .k-icon, -.k-ie7 .k-dropdown-wrap .k-icon { - line-height: 2em; - font-size: 1em; - padding-top: 16px; - height: 0; -} -.k-combobox .k-icon, -.k-dropdown, -.k-selectbox .k-icon { - cursor: pointer; -} -.k-popup { - border-style: solid; - border-width: 1px; -} -.k-popup .k-item, -.k-list-optionlabel { - cursor: default; -} -.k-popup .k-calendar { - border: 0; -} -.k-list { - height: 100%; -} -.k-popup .k-list .k-item, -.k-fieldselector .k-list .k-item, -.k-list-optionlabel, -.k-popup > .k-group-header, -.k-popup > .k-virtual-wrap > .k-group-header { - padding: 1px 5px 1px 5px; - line-height: 1.8em; - min-height: 1.8em; -} -.k-popup > .k-group-header, -.k-popup > .k-virtual-wrap > .k-group-header { - padding-right: 22px; -} -.k-overflow-container .k-item { - padding: 1px; -} -.k-overflow-container > .k-state-disabled .k-button, -.k-overflow-container .k-button.k-state-disabled, -.k-overflow-container .k-button.k-state-disabled:hover { - border: 0 ; - background: none; -} -.k-popup .k-list .k-state-hover, -.k-popup .k-list .k-state-focused, -.k-popup .k-list .k-state-selected, -.k-overflow-container .k-state-hover, -.k-overflow-container .k-state-focused, -.k-overflow-container .k-state-selected, -.k-fieldselector .k-list .k-item, -.k-list-optionlabel.k-state-focused, -.k-list-optionlabel.k-state-selected { - padding: 0 4px; - border-width: 1px; - border-style: solid; -} -.k-list-filter { - position: relative; -} -.k-list-filter > .k-textbox { - padding-right: 20px; - width: 100%; -} -.k-list-filter > .k-icon { - position: absolute; - right: 6px; - top: 1px; -} -/* MultiSelect */ -.k-multiselect-wrap { - position: relative; - border-width: 0px; - border-style: solid; - border-radius: 4px; - border-color: #C5C5C5; - background-color: #FFF; - min-height: 2.04em; -} -.k-multiselect-wrap .k-input { - background-color: transparent; - height: 1.31em; - line-height: 1.31em; - padding: 0.18em 0; - text-indent: 0.33em; - border: 0; - margin: 1px 0 0; - float: left; -} -.k-multiselect-wrap li { - margin: 1px 0 1px 1px; - padding: .1em 1.6em .1em .4em; - line-height: 1.5em; - float: left; - position: relative; -} -.k-autocomplete .k-loading, -.k-multiselect .k-loading { - position: absolute; - right: 3px; - bottom: 4px; -} -.k-multiselect .k-loading-hidden { - visibility: hidden; -} -.k-multiselect-wrap .k-select { - position: absolute; - top: 0; - bottom: 0; - right: 0; - padding: .1em .2em; -} -/* Date/Time Pickers */ -.k-datetimepicker .k-picker-wrap { - padding-right: 3.8em; -} -.k-datetimepicker .k-select { - width: 3.8em; -} -.k-datetimepicker .k-picker-wrap .k-icon { - margin: 0 2px; -} -.k-picker-wrap .k-icon { - cursor: pointer; -} -.k-button, -.k-textbox, -.k-timepicker, -.k-datepicker, -.k-datetimepicker { - display: inline-block; - vertical-align: middle; -} -.k-picker-wrap .k-input { - margin: 0; -} -.k-time-popup .k-item { - padding: 1px 3px; -} -/* inputs */ -.k-input { - padding: 0.25em 0; -} -.k-input, -.k-textbox > input { - outline: 0; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -.k-textbox { - outline: 0; -} -input.k-textbox, -textarea.k-textbox { - padding: 2px .3em; -} -input.k-textbox { - height: 2.13em; - text-indent: 0.33em; - line-height: 1.6em; -} -.k-ie input.k-textbox { - text-indent: 0.165em; -} -.k-ff input.k-textbox { - height: 2.17em; -} -.k-ie7 input.k-textbox { - line-height: 1.72em; - height: 1.72em; - text-indent: 0.33em; -} -textarea.k-textbox { - height: auto; -} -.k-ie7 .k-textbox { - padding: 1px 0; - text-indent: 0; -} -/* NumericTextBox */ -span.k-numerictextbox { - background-color: transparent; -} -.k-numerictextbox .k-input { - margin: 0; -} -.k-numerictextbox .k-link { - display: block; - height: 1em; - line-height: 1em; - vertical-align: middle; - border-width: 0; - padding: 0; -} -.k-numerictextbox .k-icon { - height: 11px; -} -.k-numeric-wrap .k-input::-webkit-inner-spin-button { - -webkit-appearance: none; -} -/* ColorPicker */ -.k-colorpicker .k-picker-wrap { - line-height: 2em; -} -.k-colorpicker .k-selected-color { - vertical-align: top; - line-height: 0; - display: inline-block; - height: 2em; - width: 2em; -} -.k-colorpicker .k-tool-icon { - position: relative; - top: -2px; - display: inline-block; - padding: 3px 3px 2px; - font-size: 0; - line-height: 0; - margin-right: 3px; - margin-left: 2px; - margin-bottom: 3px; - background-repeat: no-repeat; - vertical-align: middle; - width: 16px; - height: 16px; - -ms-high-contrast-adjust: none; -} -.k-colorpicker .k-tool-icon .k-selected-color { - display: block; - height: 3px; - width: 16px; - position: absolute; - left: 3px; - bottom: -3px; - border-radius: 0 !important; -} -.k-colorpicker .k-icon { - cursor: pointer; -} -.k-disabled-overlay { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - background-color: #fff; - opacity: 0.5; - filter: alpha(opacity=50); -} -.k-colorpalette { - position: relative; - line-height: 0; - border-width: 0; - display: inline-block; -} -.k-colorpalette .k-palette { - border-collapse: collapse; - position: relative; - width: 100%; - height: 100%; -} -.k-colorpalette .k-item { - width: 14px; - height: 14px; - overflow: hidden; - -ms-high-contrast-adjust: none; -} -.k-colorpalette .k-item.k-state-selected { - z-index: 100; - background: transparent; - box-shadow: 0 1px 4px #000, inset 0 0 3px #fff; - position: relative; -} -.k-flatcolorpicker { - position: relative; - display: inline-block; - width: 250px; - padding-bottom: 5px; -} -div.k-flatcolorpicker { - background-color: transparent; - background-image: none; -} -.k-flatcolorpicker .k-selected-color { - background-image: url("textures/transtexture.png"); - background-position: 50% 50%; - text-align: right; -} -.k-flatcolorpicker .k-selected-color input.k-color-value { - font-family: Consolas, "Ubuntu Mono", "Lucida Console", "Courier New", monospace; - padding: .75em .3em .65em 1em; - border: 0; - margin: 0; - width: 70%; -} -.k-flatcolorpicker .k-hsv-rectangle { - position: relative; - -khtml-user-select: none; - -webkit-user-select: none; - -moz-user-select: -moz-none; - -ms-user-select: none; - user-select: none; - -ms-touch-action: pinch-zoom double-tap-zoom; -} -.k-flatcolorpicker .k-hsv-rectangle .k-draghandle { - cursor: pointer; - position: absolute; - z-index: 10; - left: 50%; - top: 50%; - width: 8px; - height: 8px; - border: 1px solid #eee; - margin-left: -5px; - margin-top: -5px; - border-radius: 6px; - -webkit-box-shadow: 0 1px 2px #444444; - box-shadow: 0 1px 2px #444444; - background: transparent; -} -.k-flatcolorpicker .k-hsv-rectangle .k-draghandle:hover, -.k-flatcolorpicker .k-hsv-rectangle .k-draghandle:focus { - background: transparent; - border-color: #fff; - -webkit-box-shadow: 0 1px 5px #000000; - box-shadow: 0 1px 5px #000000; -} -.k-flatcolorpicker .k-hsv-rectangle.k-dragging, -.k-flatcolorpicker .k-hsv-rectangle.k-dragging * { - cursor: none; -} -.k-flatcolorpicker .k-slider-horizontal { - height: 20px; - width: 90%; - margin: 0 5%; -} -.k-flatcolorpicker .k-slider-horizontal .k-slider-track { - -webkit-box-shadow: 0 1px 0 #fff, 0 -1px 0 #999; - box-shadow: 0 1px 0 #fff, 0 -1px 0 #999; -} -.k-flatcolorpicker .k-hue-slider, -.k-flatcolorpicker .k-transparency-slider { - display: block; -} -.k-flatcolorpicker .k-hue-slider .k-slider-selection, -.k-flatcolorpicker .k-transparency-slider .k-slider-selection { - background: transparent; -} -.k-flatcolorpicker .k-hue-slider .k-draghandle, -.k-flatcolorpicker .k-transparency-slider .k-draghandle { - background: transparent; - border: 3px solid #eee; - margin-top: 1px; - height: 8px; - width: 8px; - -webkit-box-shadow: 0 1px 4px #444444; - box-shadow: 0 1px 4px #444444; -} -.k-flatcolorpicker .k-hue-slider .k-draghandle:hover, -.k-flatcolorpicker .k-transparency-slider .k-draghandle:hover, -.k-flatcolorpicker .k-hue-slider .k-draghandle:focus, -.k-flatcolorpicker .k-transparency-slider .k-draghandle:focus { - background: transparent; - border-color: #fff; - -webkit-box-shadow: 0 1px 5px #000000; - box-shadow: 0 1px 5px #000000; - border-width: 2px; - padding: 1px; -} -.k-flatcolorpicker .k-hue-slider .k-slider-track { - background: -moz-linear-gradient(left, #ff0000 0%, #ffff00 16%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 84%, #ff0004 100%); - /* FF3.6+ */ - background: -webkit-gradient(linear, left top, right top, color-stop(0%, #ff0000), color-stop(16%, #ffff00), color-stop(33%, #00ff00), color-stop(50%, #00ffff), color-stop(67%, #0000ff), color-stop(84%, #ff00ff), color-stop(100%, #ff0004)); - /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(left, #ff0000 0%, #ffff00 16%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 84%, #ff0004 100%); - /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(left, #ff0000 0%, #ffff00 16%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 84%, #ff0004 100%); - /* Opera 11.10+ */ - background: -ms-linear-gradient(left, #ff0000 0%, #ffff00 16%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 84%, #ff0004 100%); - /* IE10+ */ - background: -left-linear-gradient(left,#ff0000 0%,#ffff00 16%,#00ff00 33%,#00ffff 50%,#0000ff 67%,#ff00ff 84%,#ff0004 100%); - /* W3C */ -} -.k-flatcolorpicker .k-transparency-slider .k-slider-track { - background-image: url("textures/transparency.png"); - background-size: 100% auto; - background-position: 100% 50%; - background-repeat: no-repeat; -} -.k-flatcolorpicker .k-controls { - margin-top: 10px; - margin-bottom: 5px; - text-align: center; - font-size: 90%; -} -.k-flatcolorpicker .k-controls .k-button { - width: 6em; -} -.k-flatcolorpicker .k-hsv-gradient { - background: -moz-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%), /* FF3.6+ */ -moz-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%); - /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(100%, #000000)), /* Chrome,Safari4+ */ -webkit-gradient(linear, left top, right top, color-stop(0%, #ffffff), color-stop(100%, rgba(255, 255, 255, 0))); - /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%), /* Chrome10+,Safari5.1+ */ -webkit-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%); - /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%), /* Opera 11.10+ */ -o-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%); - /* Opera 11.10+ */ - background: -ms-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%), /* IE10+ */ -ms-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%); - /* IE10+ */ - background: -top-linear-gradient(top,rgba(0,0,0,0) 0%,#000000 100%), /* W3C */ -left-linear-gradient(left,#ffffff 0%,rgba(255,255,255,0) 100%); - /* W3C */ - height: 180px; - margin-bottom: 5px; -} -.k-ie9 .k-flatcolorpicker .k-hue-slider .k-slider-track { - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmMDAwMCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjE2JSIgc3RvcC1jb2xvcj0iI2ZmZmYwMCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjMzJSIgc3RvcC1jb2xvcj0iIzAwZmYwMCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzAwZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjY3JSIgc3RvcC1jb2xvcj0iIzAwMDBmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ijg0JSIgc3RvcC1jb2xvcj0iI2ZmMDBmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZjAwMDQiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); -} -.k-ie9 .k-flatcolorpicker .k-hsv-gradient { - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiIHN0b3Atb3BhY2l0eT0iMCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); -} -.k-ie7 .k-flatcolorpicker .k-hue-slider .k-slider-track, -.k-ie8 .k-flatcolorpicker .k-hue-slider .k-slider-track { - background: url("textures/hue.png") repeat 0 50%; -} -.k-ie7 .k-flatcolorpicker .k-transparency-slider .k-slider-track, -.k-ie8 .k-flatcolorpicker .k-transparency-slider .k-slider-track { - background: url("textures/transparency.png") repeat 0 50%; -} -.k-ie7 .k-flatcolorpicker .k-hsv-gradient, -.k-ie8 .k-flatcolorpicker .k-hsv-gradient { - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#00ffffff',GradientType=1) progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#ff000000',GradientType=0); -} diff --git a/src/user/plugins/admin/themes/grav/css/datepicker/kendo.flat.min.css b/src/user/plugins/admin/themes/grav/css/datepicker/kendo.flat.min.css deleted file mode 100644 index bfccf16..0000000 --- a/src/user/plugins/admin/themes/grav/css/datepicker/kendo.flat.min.css +++ /dev/null @@ -1 +0,0 @@ -.k-in,.k-item,.k-window-action{border-color:transparent}.k-block,.k-widget{background-color:#fff}.k-block,.k-widget,.k-input,.k-textbox,.k-group,.k-content,.k-header,.k-filter-row>th,.k-editable-area,.k-separator,.k-colorpicker .k-i-arrow-s,.k-textbox>input,.k-autocomplete,.k-dropdown-wrap,.k-toolbar,.k-group-footer td,.k-grid-footer,.k-footer-template td,.k-state-default,.k-state-default .k-select,.k-state-disabled,.k-grid-header,.k-grid-header-wrap,.k-grid-header-locked,.k-grid-footer-locked,.k-grid-content-locked,.k-grid td,.k-grid td.k-state-selected,.k-grid-footer-wrap,.k-pager-wrap,.k-pager-wrap .k-link,.k-pager-refresh,.k-grouping-header,.k-grouping-header .k-group-indicator,.k-panelbar>.k-item>.k-link,.k-panel>.k-item>.k-link,.k-panelbar .k-panel,.k-panelbar .k-content,.k-treemap-tile,.k-calendar th,.k-slider-track,.k-splitbar,.k-dropzone-active,.k-tiles,.k-toolbar,.k-tooltip,.k-button-group .k-tool,.k-upload-files{border-color:#ccc}.k-group,.k-toolbar,.k-grouping-header,.k-pager-wrap,.k-group-footer td,.k-grid-footer,.k-footer-template td,.k-widget .k-status,.k-calendar th,.k-dropzone-hovered,.k-widget.k-popup{background-color:#253a47}.k-grouping-row td,td.k-group-cell,.k-resize-handle-inner{background-color:#253a47}.k-list-container{border-color:#253a47;background-color:#253a47}.k-content,.k-editable-area,.k-panelbar>li.k-item,.k-panel>li.k-item,.k-tiles{background-color:#fff}.k-alt,.k-separator,.k-resource.k-alt,.k-pivot-layout>tbody>tr:first-child>td:first-child{background-color:#f5f5f5}.k-pivot-rowheaders .k-alt .k-alt,.k-header.k-alt{background-color:#e0e0e0}.k-textbox,.k-autocomplete.k-header,.k-dropdown-wrap.k-state-active,.k-picker-wrap.k-state-active,.k-numeric-wrap.k-state-active{border-color:#ccc;background-color:#253a47}.k-textbox>input,.k-autocomplete .k-input,.k-dropdown-wrap .k-input,.k-autocomplete.k-state-focused .k-input,.k-dropdown-wrap.k-state-focused .k-input,.k-picker-wrap.k-state-focused .k-input,.k-numeric-wrap.k-state-focused .k-input{border-color:#ccc}input.k-textbox,textarea.k-textbox,input.k-textbox:hover,textarea.k-textbox:hover,.k-textbox>input{background:0}.k-input,input.k-textbox,textarea.k-textbox,input.k-textbox:hover,textarea.k-textbox:hover,.k-textbox>input,.k-multiselect-wrap{background-color:#fff;color:#737c81}.k-input[readonly]{background-color:#fff;color:#737c81}.k-block,.k-widget,.k-popup,.k-content,.k-toolbar,.k-dropdown .k-input{color:#737c81}.k-inverse{color:#fff}.k-block{color:#fff}.k-link:link,.k-link:visited,.k-nav-current.k-state-hover .k-link{color:#fff}.k-tabstrip-items .k-link,.k-panelbar>li>.k-link{color:#737c81}.k-header,.k-treemap-title,.k-grid-header .k-header>.k-link{color:#fff}.k-header,.k-grid-header,.k-toolbar,.k-dropdown-wrap,.k-picker-wrap,.k-numeric-wrap,.k-grouping-header,.k-pager-wrap,.k-textbox,.k-button,.k-progressbar,.k-draghandle,.k-autocomplete,.k-state-highlight,.k-tabstrip-items .k-item,.k-panelbar .k-tabstrip-items .k-item,.km-pane-wrapper>.km-pane>.km-view>.km-content{background-image:none;background-position:50% 50%;background-color:#253a47}.k-widget.k-tooltip{background-image:none}.k-block,.k-header,.k-grid-header,.k-toolbar,.k-grouping-header,.k-pager-wrap,.k-button,.k-draghandle,.k-treemap-tile,html .km-pane-wrapper .k-header{background-color:#253a47}.k-icon:hover,.k-state-hover .k-icon,.k-state-selected .k-icon,.k-state-focused .k-icon,.k-column-menu .k-state-hover .k-sprite,.k-column-menu .k-state-active .k-sprite,.k-pager-numbers .k-current-page .k-link:hover:after,.k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view.k-state-hover>.k-link:after{opacity:1}.k-icon,.k-state-disabled .k-icon,.k-column-menu .k-sprite,.k-pager-numbers .k-current-page .k-link:after,.k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view>.k-link:after{opacity:1}.k-mobile-list .k-check:checked,.k-mobile-list .k-edit-field [type=checkbox]:checked,.k-mobile-list .k-edit-field [type=radio]:checked{opacity:1}.k-tool{border-color:transparent}.k-icon,.k-tool-icon,.k-grouping-dropclue,.k-drop-hint,.k-column-menu .k-sprite,.k-grid-mobile .k-resize-handle-inner:before,.k-grid-mobile .k-resize-handle-inner:after,.k-pager-numbers .k-current-page .k-link:after,.k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view>.k-link:after{background-image:url('Flat/sprite.png');border-color:transparent}.k-mobile-list .k-check:checked,.k-mobile-list .k-edit-field [type=checkbox]:checked,.k-mobile-list .k-edit-field [type=radio]:checked{background-image:url('Flat/sprite.png');border-color:transparent}.k-loading,.k-state-hover .k-loading{background-image:url('Flat/loading.gif');background-position:50% 50%}.k-loading-image{background-image:url('Flat/loading-image.gif')}.k-loading-color{background-color:#fff}.k-button{color:#fff;border-color:#253a47;background-color:#253a47}.k-draghandle{border-color:#41bea8;background-color:#41bea8;-webkit-box-shadow:0;box-shadow:0}.k-draghandle:hover{border-color:#54c5b0;background-color:#54c5b0;-webkit-box-shadow:0;box-shadow:0}.k-scheduler{color:#fff;background-color:#fff}.k-scheduler-layout{color:#737c81}.k-scheduler-datecolumn,.k-scheduler-groupcolumn{background-color:#fff;color:#737c81}.k-scheduler-times tr,.k-scheduler-times th,.k-scheduler-table td,.k-scheduler-header th,.k-scheduler-header-wrap,.k-scheduler-times{border-color:#ccc}.k-nonwork-hour{background-color:#f5f5f5}.k-gantt .k-nonwork-hour{background-color:rgba(0,0,0,0.02)}.k-gantt .k-header.k-nonwork-hour{background-color:rgba(0,0,0,0.2)}.k-scheduler-table .k-today,.k-today>.k-scheduler-datecolumn,.k-today>.k-scheduler-groupcolumn{background-color:#f7f7f7}.k-scheduler-now-arrow{border-left-color:#2c4554}.k-scheduler-now-line{background-color:#2c4554}.k-event,.k-task-complete{border-color:#54c5b0;background:#54c5b0 0 -257px none repeat-x;color:#fff}.k-event-inverse{color:#737c81}.k-event.k-state-selected{background-position:0 0}.k-ie7 .k-event .k-resize-handle,.k-event .k-resize-handle:after,.k-ie7 .k-task-single .k-resize-handle,.k-task-single .k-resize-handle:after{background-color:#fff}.k-scheduler-marquee:before,.k-scheduler-marquee:after{border-color:#41bea8}.k-panelbar .k-content,.k-panelbar .k-panel,.k-panelbar .k-item{background-color:#253a47;color:#fff;border-color:#446b83}.k-panelbar>li>.k-link{color:#fff}.k-panelbar>.k-item>.k-link{border-color:#446b83}.k-panel>li.k-item{background-color:#253a47}.k-state-active,.k-state-active:hover,.k-active-filter,.k-tabstrip .k-state-active{background-color:#41bea8;border-color:#41bea8;color:#fff}.k-fieldselector .k-list-container{background-color:#41bea8}.k-button:focus,.k-button.k-state-focused{border-color:#339483}.k-button:hover,.k-button.k-state-hover{color:#fff;border-color:#54c5b0;background-color:#54c5b0}.k-button:active,.k-button.k-state-active{color:#fff;background-color:#41bea8;border-color:#41bea8}.k-button:active:hover,.k-button.k-state-active:hover{color:#fff;border-color:#54c5b0;background-color:#54c5b0}.k-button[disabled],.k-button.k-state-disabled,.k-state-disabled .k-button,.k-state-disabled .k-button:hover,.k-button.k-state-disabled:hover,.k-state-disabled .k-button:active,.k-button.k-state-disabled:active{color:#c2c2c2;border-color:#ccc;background-color:#f5f5f5;background-image:none}.k-button:focus:not(.k-state-disabled):not([disabled]){-webkit-box-shadow:none;box-shadow:none}.k-button:focus:active:not(.k-state-disabled):not([disabled]){-webkit-box-shadow:none;box-shadow:none}.k-menu .k-state-hover>.k-state-active{background-color:transparent}.k-state-highlight{background:#41bea8;color:#fff}.k-state-focused,.k-grouping-row .k-state-focused{border-color:#339483}.k-calendar .k-link{color:#737c81}.k-calendar .k-footer{padding:0}.k-calendar .k-footer .k-nav-today{color:#fff;text-decoration:none;background-color:#253a47}.k-calendar .k-footer .k-nav-today:hover,.k-calendar .k-footer .k-nav-today.k-state-hover{background-color:#54c5b0;text-decoration:none}.k-calendar .k-footer .k-nav-today:active{background-color:#41bea8}.k-calendar .k-link.k-nav-fast{color:#fff}.k-calendar .k-nav-fast.k-state-hover{text-decoration:underline;background-color:#253a47;color:#fff}.k-calendar .k-link.k-state-hover,.k-window-titlebar .k-link{border-radius:13px}.k-calendar .k-footer .k-link{border-radius:0}.k-calendar th{background-color:#fff}.k-calendar-container.k-group{border-color:#253a47}.k-state-selected,.k-state-selected:link,.k-state-selected:visited,.k-list>.k-state-selected,.k-list>.k-state-highlight,.k-panel>.k-state-selected,.k-ghost-splitbar-vertical,.k-ghost-splitbar-horizontal,.k-draghandle.k-state-selected:hover,.k-scheduler .k-scheduler-toolbar .k-state-selected,.k-scheduler .k-today.k-state-selected,.k-marquee-color{color:#fff;background-color:#41bea8;border-color:#41bea8}.k-virtual-item.k-first,.k-group-header+.k-list>.k-item.k-first,.k-static-header+.k-list>.k-item.k-first{border-top-color:#54c5b0}.k-popup>.k-group-header,.k-popup>.k-virtual-wrap>.k-group-header{background:#54c5b0;color:#fff}.k-popup .k-list .k-item>.k-group{background:#54c5b0;color:#fff;border-bottom-left-radius:1.8px}.k-marquee-text{color:#fff}.k-state-focused,.k-list>.k-state-focused,.k-listview>.k-state-focused,.k-grid-header th.k-state-focused,td.k-state-focused,.k-button.k-state-focused{-webkit-box-shadow:inset 0 0 0 1px #339483;box-shadow:inset 0 0 0 1px #339483}.k-state-focused.k-state-selected,.k-list>.k-state-focused.k-state-selected,.k-listview>.k-state-focused.k-state-selected,td.k-state-focused.k-state-selected{-webkit-box-shadow:inset 0 0 0 1px #339483;box-shadow:inset 0 0 0 1px #339483}.k-ie8 .k-panelbar span.k-state-focused,.k-ie8 .k-menu li.k-state-focused,.k-ie8 .k-listview>.k-state-focused,.k-ie8 .k-grid-header th.k-state-focused,.k-ie8 td.k-state-focused,.k-ie8 .k-tool.k-state-hover,.k-ie8 .k-button:focus,.k-ie8 .k-button.k-state-focused,.k-ie7 .k-panelbar span.k-state-focused,.k-ie7 .k-menu li.k-state-focused,.k-ie7 .k-listview>.k-state-focused,.k-ie7 .k-grid-header th.k-state-focused,.k-ie7 td.k-state-focused,.k-ie7 .k-tool.k-state-hover,.k-ie7 .k-button:focus,.k-ie7 .k-button.k-state-focused{background-color:#54c5b0}.k-list>.k-state-selected.k-state-focused,.k-list-optionlabel.k-state-selected.k-state-focused{-webkit-box-shadow:none;box-shadow:none}.k-state-selected>.k-link,.k-panelbar>li>.k-state-selected,.k-panelbar>li.k-state-default>.k-link.k-state-selected{color:#fff}.k-state-hover,.k-state-hover:hover,.k-splitbar-horizontal-hover:hover,.k-splitbar-vertical-hover:hover,.k-list>.k-state-hover,.k-scheduler .k-scheduler-toolbar ul li.k-state-hover,.k-pager-wrap .k-link:hover,.k-dropdown .k-state-focused,.k-filebrowser-dropzone,.k-mobile-list .k-item>.k-link:active,.k-mobile-list .k-item>.k-label:active,.k-mobile-list .k-edit-label.k-check:active,.k-mobile-list .k-recur-view .k-check:active{color:#fff;background-color:#54c5b0;border-color:#54c5b0}.k-mobile-list .k-scheduler-timezones .k-edit-field:nth-child(2):active{color:#fff;background-color:#54c5b0;border-color:#54c5b0}.k-ie7 .k-window-titlebar .k-state-hover,.k-ie8 .k-window-titlebar .k-state-hover{border-color:#54c5b0}.k-state-hover>.k-select,.k-state-focused>.k-select{border-color:#54c5b0}.k-button:hover,.k-button.k-state-hover,.k-button:focus,.k-button.k-state-focused,.k-textbox:hover,.k-state-hover,.k-state-hover:hover,.k-pager-wrap .k-link:hover,.k-other-month.k-state-hover .k-link,div.k-filebrowser-dropzone em,.k-draghandle:hover{background-image:none}.k-pager-wrap{background-color:#253a47;color:#fff}.k-autocomplete.k-state-active,.k-picker-wrap.k-state-active,.k-numeric-wrap.k-state-active,.k-dropdown-wrap.k-state-active,.k-state-active,.k-state-active:hover,.k-state-active>.k-link,.k-button:active,.k-panelbar>.k-item>.k-state-focused{background-image:none}.k-state-selected,.k-button:active,.k-button.k-state-active,.k-draghandle.k-state-selected:hover{background-image:none}.k-button:active,.k-button.k-state-active,.k-draghandle.k-state-selected:hover{background-position:50% 50%}.k-tool-icon{background-image:url('Flat/sprite.png')}.k-state-hover>.k-link,.k-other-month.k-state-hover .k-link,div.k-filebrowser-dropzone em{color:#fff}.k-autocomplete.k-state-hover,.k-autocomplete.k-state-focused,.k-picker-wrap.k-state-hover,.k-picker-wrap.k-state-focused,.k-numeric-wrap.k-state-hover,.k-numeric-wrap.k-state-focused,.k-dropdown-wrap.k-state-hover,.k-dropdown-wrap.k-state-focused{background-color:#54c5b0;background-image:none;background-position:50% 50%;border-color:#54c5b0}.km-pane-wrapper .k-mobile-list input:not([type="checkbox"]):not([type="radio"]),.km-pane-wrapper .km-pane .k-mobile-list select:not([multiple]),.km-pane-wrapper .k-mobile-list textarea,.k-dropdown .k-state-focused .k-input{color:#737c81}.k-dropdown .k-state-hover .k-input{color:#fff}.k-state-error{border-color:#2c4554;background-color:#fff;color:#2c4554}.k-state-disabled{opacity:.7}.k-ie7 .k-state-disabled,.k-ie8 .k-state-disabled{filter:alpha(opacity=70)}.k-tile-empty.k-state-selected,.k-loading-mask.k-state-selected{border-width:0;background-image:none;background-color:transparent}.k-state-disabled,.k-state-disabled .k-link,.k-state-disabled .k-button,.k-other-month,.k-other-month .k-link,.k-dropzone em,.k-dropzone .k-upload-status,.k-tile-empty strong,.k-slider .k-draghandle{color:#c2c2c2}.k-progressbar-indeterminate{background:url('Flat/indeterminate.gif')}.k-progressbar-indeterminate .k-progress-status-wrap,.k-progressbar-indeterminate .k-state-selected{display:none}.k-slider-track{background-color:#ccc}.k-slider-selection{background-color:#41bea8}.k-slider-horizontal .k-tick{background-image:url('Flat/slider-h.gif')}.k-slider-vertical .k-tick{background-image:url('Flat/slider-v.gif')}.k-widget.k-tooltip{border-color:#253a47;background-color:#253a47;color:#fff}.k-widget.k-tooltip-validation{border-color:#ffd673;background-color:#ffd673;color:#737c81}.input-prepend .k-tooltip-validation,.input-append .k-tooltip-validation{font-size:12px;position:relative;top:3px}.k-callout-n{border-bottom-color:#253a47}.k-callout-w{border-right-color:#253a47}.k-callout-s{border-top-color:#253a47}.k-callout-e{border-left-color:#253a47}.k-tooltip-validation .k-callout-n{border-bottom-color:#ffd673}.k-tooltip-validation .k-callout-w{border-right-color:#ffd673}.k-tooltip-validation .k-callout-s{border-top-color:#ffd673}.k-tooltip-validation .k-callout-e{border-left-color:#ffd673}.k-splitbar{background-color:#ccc}.k-restricted-size-vertical,.k-restricted-size-horizontal{background-color:#2c4554}.k-file{background-color:#41bea8;border-color:#ccc}.k-file-progress{color:#2b7d6f}.k-file-progress .k-progress{background-color:#dcf2f8}.k-file-success{color:#308d7c}.k-file-success .k-progress{background-color:#e6f6e9}.k-file-error{color:#60676b}.k-file-error .k-progress{background-color:#ffe0d9}.k-tile{border-color:#fff}.k-textbox:hover,.k-tiles li.k-state-hover{border-color:#54c5b0}.k-tiles li.k-state-selected{border-color:#41bea8}.k-filebrowser .k-tile .k-folder,.k-filebrowser .k-tile .k-file{background-image:url('Flat/imagebrowser.png');background-size:auto auto}.k-leaf,.k-leaf.k-state-hover:hover{color:#fff}.k-leaf.k-inverse,.k-leaf.k-inverse.k-state-hover:hover{color:#000}.k-widget,.k-button{-webkit-box-shadow:none;box-shadow:none}.k-slider,.k-treeview,.k-upload{-webkit-box-shadow:none;box-shadow:none}.k-state-hover{-webkit-box-shadow:none;box-shadow:none}.k-autocomplete.k-state-focused,.k-dropdown-wrap.k-state-focused,.k-picker-wrap.k-state-focused,.k-numeric-wrap.k-state-focused{-webkit-box-shadow:none;box-shadow:none}.k-state-selected{-webkit-box-shadow:none;box-shadow:none}.k-state-active{-webkit-box-shadow:none;box-shadow:none}.k-grid td.k-state-selected.k-state-focused{background-color:#4cc2ad}.k-popup,.k-menu .k-menu-group,.k-grid .k-filter-options,.k-time-popup,.k-datepicker-calendar,.k-autocomplete.k-state-border-down,.k-autocomplete.k-state-border-up,.k-dropdown-wrap.k-state-active,.k-picker-wrap.k-state-active,.k-multiselect.k-state-focused,.k-filebrowser .k-image,.k-tooltip{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,0.25);box-shadow:0 2px 2px 0 rgba(0,0,0,0.25)}.k-treemap-tile.k-state-hover{-webkit-box-shadow:inset 0 0 0 3px #ccc;box-shadow:inset 0 0 0 3px #ccc}.k-window{border-color:rgba(0,0,0,0.25);-webkit-box-shadow:0 0 0 1px rgba(128,128,128,0.25);box-shadow:0 0 0 1px rgba(128,128,128,0.25);background-color:#fff}.k-window.k-state-focused{border-color:rgba(0,0,0,0.25);-webkit-box-shadow:0 0 0 1px rgba(0,0,0,0.25);box-shadow:0 0 0 1px rgba(0,0,0,0.25)}.k-window.k-window-maximized,.k-window-maximized .k-window-titlebar,.k-window-maximized .k-window-content{border-radius:0}.k-shadow{-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,0.25);box-shadow:0 1px 2px 0 rgba(0,0,0,0.25)}.k-inset{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.25);box-shadow:inset 0 1px 1px rgba(0,0,0,0.25)}.k-editor-inline ::selection{background-color:#41bea8;text-shadow:none;color:#fff}.k-editor-inline ::-moz-selection{background-color:#41bea8;text-shadow:none;color:#fff}.k-widget.k-notification.k-notification-info{background-color:#e5f5fa;color:#339483;border-color:#b6e3f1}.k-widget.k-notification.k-notification-success{background-color:#eaf7ec;color:#3db39d;border-color:#c1e8c7}.k-widget.k-notification.k-notification-warning{background-color:#fff4d9;color:#ff704f;border-color:#fff0ca}.k-widget.k-notification.k-notification-error{background-color:#ffe0d9;color:#959da1;border-color:#ffb6a6}.k-gantt .k-treelist{background:#f5f5f5}.k-gantt .k-treelist .k-alt{background-color:#dbdbdb}.k-gantt .k-treelist .k-state-selected,.k-gantt .k-treelist .k-state-selected td,.k-gantt .k-treelist .k-alt.k-state-selected,.k-gantt .k-treelist .k-alt.k-state-selected>td{background-color:#41bea8}.k-task-dot:after{background-color:#737c81;border-color:#737c81}.k-task-dot:hover:after{background-color:#41bea8}.k-task-summary{border-color:#b6bbbe;background:#b6bbbe}.k-task-milestone,.k-task-summary-complete{border-color:#737c81;background:#737c81}.k-state-selected.k-task-summary{border-color:#a0dfd3;background:#a0dfd3}.k-state-selected.k-task-milestone,.k-state-selected .k-task-summary-complete{border-color:#41bea8;background:#41bea8}.k-task-single{background-color:#6fcebd;border-color:#54c5b0;color:#fff}.k-state-selected.k-task-single{border-color:#41bea8}.k-line{background-color:#737c81;color:#737c81}.k-state-selected.k-line{background-color:#41bea8;color:#41bea8}.k-resource{background-color:#fff}.k-i-kpi-decrease,.k-i-kpi-denied,.k-i-kpi-equal,.k-i-kpi-hold,.k-i-kpi-increase,.k-i-kpi-open{background-image:url('Flat/sprite_kpi.png')}.k-block,.k-button,.k-textbox,.k-drag-clue,.k-touch-scrollbar,.k-window,.k-window-titleless .k-window-content,.k-window-action,.k-inline-block,.k-grid .k-filter-options,.k-grouping-header .k-group-indicator,.k-autocomplete,.k-multiselect,.k-combobox,.k-dropdown,.k-dropdown-wrap,.k-datepicker,.k-timepicker,.k-colorpicker,.k-datetimepicker,.k-notification,.k-numerictextbox,.k-picker-wrap,.k-numeric-wrap,.k-colorpicker,.k-list-container,.k-calendar-container,.k-calendar td,.k-calendar .k-link,.k-treeview .k-in,.k-editor-inline,.k-tooltip,.k-tile,.k-slider-track,.k-slider-selection,.k-upload{border-radius:3px}.k-tool{text-align:center;vertical-align:middle}.k-tool.k-group-start,.k-toolbar .k-split-button .k-button,.k-toolbar .k-button-group .k-group-start{border-radius:3px 0 0 3px}.k-rtl .k-tool.k-group-start,.k-rtl .k-toolbar .k-split-button .k-button,.k-rtl .k-toolbar .k-button-group .k-group-start{border-radius:0 3px 3px 0}.k-tool.k-group-end,.k-toolbar .k-button-group .k-group-end,.k-toolbar .k-split-button .k-split-button-arrow{border-radius:0 3px 3px 0}.k-rtl .k-tool.k-group-end,.k-rtl .k-toolbar .k-button-group .k-group-end,.k-rtl .k-toolbar .k-split-button .k-split-button-arrow{border-radius:3px 0 0 3px}.k-group-start.k-group-end.k-tool{border-radius:3px}.k-calendar-container.k-state-border-up,.k-list-container.k-state-border-up,.k-autocomplete.k-state-border-up,.k-multiselect.k-state-border-up,.k-dropdown-wrap.k-state-border-up,.k-picker-wrap.k-state-border-up,.k-numeric-wrap.k-state-border-up,.k-window-content,.k-filter-menu{border-radius:0 0 3px 3px}.k-autocomplete.k-state-border-up .k-input,.k-dropdown-wrap.k-state-border-up .k-input,.k-picker-wrap.k-state-border-up .k-input,.k-picker-wrap.k-state-border-up .k-selected-color,.k-numeric-wrap.k-state-border-up .k-input{border-radius:0 0 0 3px}.k-multiselect.k-state-border-up .k-multiselect-wrap{border-radius:0 0 3px 3px}.k-window-titlebar,.k-block>.k-header,.k-tabstrip-items .k-item,.k-panelbar .k-tabstrip-items .k-item,.k-tabstrip-items .k-link,.k-calendar-container.k-state-border-down,.k-list-container.k-state-border-down,.k-autocomplete.k-state-border-down,.k-multiselect.k-state-border-down,.k-dropdown-wrap.k-state-border-down,.k-picker-wrap.k-state-border-down,.k-numeric-wrap.k-state-border-down{border-radius:3px 3px 0 0}.k-split-button.k-state-border-down>.k-button{border-radius:3px 0 0 0}.k-split-button.k-state-border-up>.k-button{border-radius:0 0 0 3px}.k-split-button.k-state-border-down>.k-split-button-arrow{border-radius:0 3px 0 0}.k-split-button.k-state-border-up>.k-split-button-arrow{border-radius:0 0 3px 0}.k-dropdown-wrap .k-input,.k-picker-wrap .k-input,.k-numeric-wrap .k-input{border-radius:1.8px 0 0 1.8px}.k-rtl .k-dropdown-wrap .k-input,.k-rtl .k-picker-wrap .k-input,.k-rtl .k-numeric-wrap .k-input{border-radius:0 1.8px 1.8px 0}.k-numeric-wrap .k-link{border-radius:0 1.8px 0 0}.k-numeric-wrap .k-link+.k-link{border-radius:0 0 1.8px 0}.k-colorpicker .k-selected-color{border-radius:1.8px 0 0 1.8px}.k-rtl .k-colorpicker .k-selected-color{border-radius:0 1.8px 1.8px 0}.k-autocomplete.k-state-border-down .k-input{border-radius:3px 3px 0 0}.k-dropdown-wrap.k-state-border-down .k-input,.k-picker-wrap.k-state-border-down .k-input,.k-picker-wrap.k-state-border-down .k-selected-color,.k-numeric-wrap.k-state-border-down .k-input{border-radius:3px 0 0 0}.k-numeric-wrap .k-link.k-state-selected{background-color:#253a47}.k-multiselect.k-state-border-down .k-multiselect-wrap{border-radius:1.8px 1.8px 0 0}.k-dropdown-wrap .k-select,.k-picker-wrap .k-select,.k-numeric-wrap .k-select,.k-datetimepicker .k-select+.k-select,.k-list-container.k-state-border-right{border-radius:0 3px 3px 0}.k-rtl .k-dropdown-wrap .k-select,.k-rtl .k-picker-wrap .k-select,.k-rtl .k-numeric-wrap .k-select,.k-rtl .k-datetimepicker .k-select+.k-select,.k-rtl .k-list-container.k-state-border-right{border-radius:3px 0 0 3px}.k-numeric-wrap.k-expand-padding .k-input{border-radius:3px}.k-textbox>input,.k-autocomplete .k-input,.k-multiselect-wrap{border-radius:1.8px}.k-list .k-state-hover,.k-list .k-state-focused,.k-list .k-state-highlight,.k-list .k-state-selected,.k-fieldselector .k-list .k-item,.k-list-optionlabel,.k-dropzone{border-radius:2px}.k-slider .k-button,.k-grid .k-slider .k-button{border-radius:13px}.k-draghandle{border-radius:13px}.k-scheduler-toolbar>ul li:first-child,.k-scheduler-toolbar>ul li:first-child .k-link,.k-scheduler-toolbar>ul.k-scheduler-views li:first-child+li,.k-scheduler-toolbar>ul.k-scheduler-views li:first-child+li .k-link{border-radius:3px 0 0 3px}.k-rtl .k-scheduler-toolbar>ul li:first-child,.k-rtl .k-scheduler-toolbar>ul li:first-child .k-link,.k-rtl .k-scheduler-toolbar>ul.k-scheduler-views li:first-child+li,.k-rtl .k-scheduler-toolbar>ul.k-scheduler-views li:first-child+li .k-link,.km-view.k-popup-edit-form .k-scheduler-toolbar>ul li:last-child,.km-view.k-popup-edit-form .k-scheduler-toolbar>ul li:last-child .k-link{border-radius:0 3px 3px 0}.k-scheduler-phone .k-scheduler-toolbar>ul li.k-nav-today,.k-scheduler-phone .k-scheduler-toolbar>ul li.k-nav-today .k-link,.k-edit-field>.k-scheduler-navigation{border-radius:3px}.k-scheduler-toolbar .k-nav-next,.k-scheduler-toolbar ul+ul li:last-child,.k-scheduler-toolbar .k-nav-next .k-link,.k-scheduler-toolbar ul+ul li:last-child .k-link{border-top-right-radius:3px;border-bottom-right-radius:3px}.k-rtl .k-scheduler-toolbar .k-nav-next,.k-rtl .k-scheduler-toolbar ul+ul li:last-child,.k-rtl .k-scheduler-toolbar .k-nav-next .k-link,.k-rtl .k-scheduler-toolbar ul+ul li:last-child .k-link{border-radius:3px 0 0 3px}.k-scheduler div.k-scheduler-footer ul li,.k-scheduler div.k-scheduler-footer .k-link{border-radius:3px}.k-more-events,.k-event,.k-task-single,.k-task-complete,.k-event .k-link{border-radius:1.8px}.k-scheduler-mobile .k-event{border-radius:.8px}.k-grid-mobile .k-column-active+th.k-header{border-left-color:#737c81}html .km-pane-wrapper .km-widget,.k-ie .km-pane-wrapper .k-widget,.k-ie .km-pane-wrapper .k-group,.k-ie .km-pane-wrapper .k-content,.k-ie .km-pane-wrapper .k-header,.k-ie .km-pane-wrapper .k-popup-edit-form .k-edit-field .k-button,.km-pane-wrapper .k-mobile-list .k-item,.km-pane-wrapper .k-mobile-list .k-edit-label,.km-pane-wrapper .k-mobile-list .k-edit-field{color:#737c81}@media screen and (-ms-high-contrast:active) and (-ms-high-contrast:none){div.km-pane-wrapper a{color:#737c81}.km-pane-wrapper .k-icon{background-image:url('Flat/sprite_2x.png');background-size:21.2em 21em}}.km-pane-wrapper .k-mobile-list .k-item,.km-pane-wrapper .k-mobile-list .k-edit-field,.km-pane-wrapper .k-mobile-list .k-recur-view>.k-edit-field .k-check{background-color:#fff;border-top:1px solid #ccc}.km-pane-wrapper .k-mobile-list .k-edit-field textarea{outline-width:0}.km-pane-wrapper .k-mobile-list .k-item.k-state-selected{background-color:#41bea8;border-top-color:#41bea8}.km-pane-wrapper .k-mobile-list .k-recur-view>.k-edit-field .k-check:first-child{border-top-color:transparent}.km-pane-wrapper .k-mobile-list .k-item:last-child{-webkit-box-shadow:inset 0 -1px 0 #ccc;box-shadow:inset 0 -1px 0 #ccc}.km-pane-wrapper .k-mobile-list>ul>li>.k-link,.km-pane-wrapper .k-mobile-list .k-recur-view>.k-edit-label:nth-child(3),.km-pane-wrapper #recurrence .km-scroll-container>.k-edit-label:first-child{color:#808080}.km-pane-wrapper .k-mobile-list>ul>li>.k-link{border-bottom:1px solid #ccc}.km-pane-wrapper .k-mobile-list .k-edit-field{-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.km-actionsheet .k-grid-delete,.km-actionsheet .k-scheduler-delete,.km-pane-wrapper .k-scheduler-delete,.km-pane-wrapper .k-filter-menu .k-button[type=reset]{color:#fff;border-color:#2c4554;background-color:red;background-image:-webkit-gradient(linear,50% 0,50% 100%,from(rgba(255,255,255,.3)),to(rgba(255,255,255,.15)));background-image:-webkit-linear-gradient(top,rgba(255,255,255,.3),rgba(255,255,255,.15));background-image:-moz-linear-gradient(top,rgba(255,255,255,.3),rgba(255,255,255,.15));background-image:-ms-linear-gradient(top,rgba(255,255,255,.3),rgba(255,255,255,.15));background-image:linear-gradient(to bottom,rgba(255,255,255,.3),rgba(255,255,255,.15))}.km-actionsheet .k-grid-delete:active,.km-actionsheet .k-scheduler-delete:active,.km-pane-wrapper .k-scheduler-delete:active,.km-pane-wrapper .k-filter-menu .k-button[type=reset]:active{background-color:#900}.k-autocomplete.k-state-default,.k-picker-wrap.k-state-default,.k-numeric-wrap.k-state-default,.k-dropdown-wrap.k-state-default{background-image:none;background-position:50% 50%;background-color:#41bea8;border-color:#41bea8}.k-autocomplete.k-state-hover,.k-picker-wrap.k-state-hover,.k-numeric-wrap.k-state-hover,.k-dropdown-wrap.k-state-hover{background-color:#54c5b0;background-image:none;background-position:50% 50%;border-color:#54c5b0}.k-multiselect.k-header{border-color:#41bea8}.k-multiselect.k-header.k-state-hover{border-color:#54c5b0}.k-autocomplete.k-state-focused,.k-picker-wrap.k-state-focused,.k-numeric-wrap.k-state-focused,.k-dropdown-wrap.k-state-focused,.k-multiselect.k-header.k-state-focused{background-color:#54c5b0;background-image:none;background-position:50% 50%;border-color:#339483;-webkit-box-shadow:none;box-shadow:none}.k-list-container{color:#fff}.k-dropdown .k-input,.k-dropdown .k-state-focused .k-input,.k-menu .k-popup{color:#fff}.k-state-default>.k-select{border-color:#41bea8}.k-state-hover>.k-select{border-color:#54c5b0}.k-state-focused>.k-select{border-color:#339483}.k-tabstrip:focus{-webkit-box-shadow:none;box-shadow:none}.k-tabstrip-items .k-state-default .k-link,.k-panelbar>li.k-state-default>.k-link{color:#fff}.k-tabstrip-items .k-state-hover .k-link,.k-panelbar>li.k-state-hover>.k-link,.k-panelbar>li.k-state-default>.k-link.k-state-hover{color:#fff}.k-panelbar .k-state-focused.k-state-hover{background:#54c5b0;-webkit-box-shadow:none;box-shadow:none}.k-tabstrip-items .k-state-default,.k-ie7 .k-tabstrip-items .k-state-default .k-loading{border-color:#253a47}.k-tabstrip-items .k-state-hover,.k-ie7 .k-tabstrip-items .k-state-hover .k-loading{border-color:#54c5b0}.k-tabstrip-items .k-state-active,.k-panelbar .k-tabstrip-items .k-state-active,.k-ie7 .k-tabstrip-items .k-state-active .k-loading{background-color:#41bea8;background-image:none;border-color:#41bea8}.k-tabstrip .k-content.k-state-active{background-color:#fff;color:#737c81}.k-menu.k-header,.k-menu .k-item{border-color:#253a47}.k-column-menu,.k-column-menu .k-item,.k-overflow-container .k-overflow-group{border-color:#446b83}.k-overflow-container .k-overflow-group{box-shadow:inset 0 1px 0 #98b6c9,0 1px 0 #98b6c9}.k-toolbar-first-visible.k-overflow-group,.k-overflow-container .k-overflow-group+.k-overflow-group{box-shadow:0 1px 0 #98b6c9}.k-toolbar-last-visible.k-overflow-group{box-shadow:inset 0 1px 0 #98b6c9}.k-column-menu .k-separator{border-color:#446b83;background-color:transparent}.k-menu .k-group{border-color:#253a47}.k-grid-filter.k-state-active{background-color:#41bea8}.k-grouping-row td,.k-group-footer td,.k-grid-footer td{color:#fff;border-color:#446b83;font-weight:bold}.k-grouping-header{color:#fff}.k-grid td.k-state-focused{-webkit-box-shadow:inset 0 0 0 1px inset 0 0 0 1px #339483;box-shadow:inset 0 0 0 1px inset 0 0 0 1px #339483}.k-header,.k-grid-header-wrap,.k-grid .k-grouping-header,.k-grid-header,.k-pager-wrap,.k-pager-wrap .k-textbox,.k-pager-wrap .k-link,.k-grouping-header .k-group-indicator,.k-gantt-toolbar .k-state-default{border-color:#446b83}.k-primary,.k-overflow-container .k-primary{color:#fff;border-color:#41bea8;background-image:none;background-position:50% 50%;background-color:#41bea8;-webkit-box-shadow:none;box-shadow:none}.k-primary:focus,.k-primary.k-state-focused{color:#fff;border-color:#253a47;background-image:none;-webkit-box-shadow:none;box-shadow:none}.k-primary:hover{color:#fff;border-color:#54c5b0;background-image:none;background-color:#54c5b0;-webkit-box-shadow:none;box-shadow:none}.k-primary:focus:active:not(.k-state-disabled):not([disabled]),.k-primary:focus:not(.k-state-disabled):not([disabled]){-webkit-box-shadow:none;box-shadow:none}.k-primary:active{color:#fff;border-color:#253a47;background-image:none;background-color:#253a47;-webkit-box-shadow:none;box-shadow:none}.k-primary.k-state-disabled,.k-state-disabled .k-primary,.k-primary.k-state-disabled:hover,.k-state-disabled .k-primary:hover,.k-primary.k-state-disabled:hover,.k-state-disabled .k-primary:active,.k-primary.k-state-disabled:active{color:#c2c2c2;border-color:#ccc;background-color:#f5f5f5;background-image:none;-webkit-box-shadow:none;box-shadow:none}.k-pager-numbers .k-link,.k-treeview .k-in{border-color:transparent}.k-treeview .k-icon,.k-scheduler-table .k-icon,.k-grid .k-hierarchy-cell .k-icon{background-color:#ccc;border-radius:13px}.k-scheduler-table .k-state-hover .k-icon{background-color:transparent}.k-button:focus{outline:0}.k-editor .k-tool:focus{outline:0;border-color:#339483;-webkit-box-shadow:none;box-shadow:none}.k-checkbox-label:before{border-color:transparent;border-radius:1px}.k-checkbox-label:after{border-color:#41bea8;background:#fff;border-radius:1px}.k-checkbox-label:hover:after,.k-checkbox:checked+.k-checkbox-label:hover:after{border-color:#72cfbe;box-shadow:none}.k-checkbox:checked+.k-checkbox-label:after{background-color:#fff;border-color:#41bea8;border-radius:1px;color:#41bea8}.k-checkbox-label:active:before{box-shadow:none;border-color:transparent;border-radius:1px}.k-checkbox-label:active:after{border-color:#253a47;border-radius:1px}.k-checkbox:checked+.k-checkbox-label:active:after{border-color:#253a47}.k-checkbox:checked+.k-checkbox-label:active:before{box-shadow:none;border-radius:1px}.k-checkbox:disabled+.k-checkbox-label{color:#c2c2c2}.k-checkbox:disabled+.k-checkbox-label:hover:after,.k-checkbox:disabled+.k-checkbox-label:active:before{box-shadow:none}.k-checkbox:checked:disabled+.k-checkbox-label:after{background:#fff;color:#c2c2c2}.k-checkbox:disabled+.k-checkbox-label:after,.k-checkbox:checked:disabled+.k-checkbox-label:active:after,.k-checkbox:disabled+.k-checkbox-label:hover:before,.k-checkbox:checked:disabled+.k-checkbox-label:hover:after{background:#fff;border-color:#ccc;border-radius:1px}.k-radio-label:before{border-color:#41bea8;border-radius:50%;background-color:#fff;border-width:1px}.k-radio-label:hover:before,.k-radio:checked+.k-radio-label:hover:before{border-color:#72cfbe;box-shadow:none}.k-radio:checked+.k-radio-label:before{border-color:#41bea8}.k-radio:checked+.k-radio-label:after{background-color:#41bea8;border-radius:50%}.k-radio-label:active:before{box-shadow:none;border-radius:50%;border-color:#253a47}.k-radio:checked+.k-radio-label:active:before{box-shadow:none;border-radius:50%;border-color:#253a47}.k-radio:disabled+.k-radio-label{color:#c2c2c2}.k-radio:disabled+.k-radio-label:before{border-color:#bfbfbf}.k-radio:disabled+.k-radio-label:active:before{box-shadow:none;background:#fff}.k-radio:disabled+.k-radio-label:before{background:#fff}.k-radio:disabled+.k-radio-label:hover:after,.k-radio:disabled+.k-radio-label:hover:before{box-shadow:none}.k-checkbox:focus+.k-checkbox-label:after,.k-radio:focus+.k-radio-label:before{border-color:#253a47;box-shadow:none}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.k-icon:not(.k-loading),.k-grouping-dropclue,.k-drop-hint,.k-callout,.k-tool-icon,.k-state-hover .k-tool-icon,.k-state-active .k-tool-icon,.k-state-active.k-state-hover .k-tool-icon,.k-state-selected .k-tool-icon,.k-state-selected.k-state-hover .k-tool-icon,.k-column-menu .k-sprite,.k-mobile-list .k-check:checked,.k-mobile-list .k-edit-field [type=checkbox]:checked,.k-mobile-list .k-edit-field [type=radio]:checked{background-image:url('Flat/sprite_2x.png');background-size:340px 336px}.k-dropdown-wrap .k-input,.k-picker-wrap .k-input,.k-numeric-wrap .k-input{border-radius:1.8px 0 0 1.8px}.k-i-kpi-decrease,.k-i-kpi-denied,.k-i-kpi-equal,.k-i-kpi-hold,.k-i-kpi-increase,.k-i-kpi-open{background-image:url('Flat/sprite_kpi_2x.png');background-size:96px 16px}}@media screen and (-ms-high-contrast:active){.k-editor-toolbar-wrap .k-dropdown-wrap.k-state-focused,.k-editor-toolbar-wrap .k-button-group .k-tool:focus{border-color:#fff}}.ktb-checkbox-label-after{border-color:#41bea8;background:#fff}.ktb-checkbox-label-hover-after,.ktb-checkbox-checked+.ktb-checkbox-label-hover-after{border-color:#72cfbe}.ktb-checkbox-checked+.ktb-checkbox-label-after{background-color:#fff;border-color:#41bea8;color:#41bea8}.ktb-checkbox-label-hover-after,.ktb-checkbox-checked+.ktb-checkbox-label-hover-after{border-color:#72cfbe}.ktb-checkbox-label-active-after{border-color:#253a47}.ktb-checkbox-checked-disabled+.ktb-checkbox-label-after,.ktb-checkbox-disabled+.ktb-checkbox-label-after,.ktb-checkbox-checked-disabled+.ktb-checkbox-label-active-after,.ktb-checkbox-disabled+.ktb-checkbox-label-hover-before,.ktb-checkbox-checked-disabled+.ktb-checkbox-label-hover-after{background:#fff;color:#c2c2c2;border-color:#ccc}.ktb-radio-label-before{border-color:#41bea8;background-color:#fff}.ktb-radio-checked+.ktb-radio-label-after{background-color:#41bea8}.ktb-radio-checked+.ktb-radio-label-before{border-color:#41bea8}.ktb-radio-label-hover-before,.ktb-radio-checked+.ktb-radio-label-hover-before{border-color:#72cfbe}.ktb-radio-label-active-before{border-color:#253a47}.ktb-radio-checked+.ktb-radio-label-after{background-color:#41bea8}.ktb-radio-disabled+.ktb-radio-label-before,.ktb-radio-disabled+.ktb-radio-label-active-before{background:#fff;border-color:#ccc}@media only screen and (max-width:1024px){.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-webkit .k-pager-numbers .k-current-page .k-link,.k-ff .k-pager-numbers .k-current-page .k-link,.k-ie11 .k-pager-numbers .k-current-page .k-link{background-image:none;background-position:50% 50%;background-color:#41bea8;border-color:#ccc}.k-webkit .k-pager-numbers .k-current-page .k-link,.k-ff .k-pager-numbers .k-current-page .k-link,.k-ie11 .k-pager-numbers .k-current-page .k-link{border-color:#446b83}.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view{border-radius:3px}.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li{border-radius:0}.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li.k-current-view,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li.k-current-view,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li.k-current-view{border-radius:1.8px 1.8px 0 0}.k-webkit .k-scheduler-toolbar>ul li:first-child,.k-ff .k-scheduler-toolbar>ul li:first-child,.k-ie11 .k-scheduler-toolbar>ul li:first-child,.k-webkit .k-scheduler-toolbar>ul li:first-child .k-link,.k-ff .k-scheduler-toolbar>ul li:first-child .k-link,.k-ie11 .k-scheduler-toolbar>ul li:first-child .k-link,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views li,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views li,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views li,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views li .k-link,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views li .k-link,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views li .k-link{border-radius:0}.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views li:last-child,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views li:last-child,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views li:last-child,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views li:last-child .k-link,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views li:last-child .k-link,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views li:last-child .k-link{border-radius:0 0 1.8px 1.8px}.k-webkit .k-pager-numbers .k-current-page .k-link:hover,.k-ff .k-pager-numbers .k-current-page .k-link:hover,.k-ie11 .k-pager-numbers .k-current-page .k-link:hover,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover{border-color:#54c5b0;background-image:none;background-color:#54c5b0}.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view>.k-link,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view>.k-link,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view>.k-link{color:#737c81;min-width:75px}.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover>.k-link,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover>.k-link,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover>.k-link{color:#fff}.k-webkit .k-pager-numbers .k-current-page .k-link:after,.k-ff .k-pager-numbers .k-current-page .k-link:after,.k-ie11 .k-pager-numbers .k-current-page .k-link:after,.k-webkit .k-scheduler-views>li.k-state-selected>.k-link:after,.k-ff .k-scheduler-views>li.k-state-selected>.k-link:after,.k-ie11 .k-scheduler-views>li.k-state-selected>.k-link:after{display:block;content:"";position:absolute;top:50%;margin-top:-0.5em;right:.333em;width:1.333em;height:1.333em}.k-webkit .k-pager-numbers.k-state-expanded,.k-ff .k-pager-numbers.k-state-expanded,.k-ie11 .k-pager-numbers.k-state-expanded,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded{border-width:1px 1px 0 1px;border-style:solid;border-color:#446b83;background-color:#253a47;border-radius:3px 3px 0 0;-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,0.25);box-shadow:0 2px 2px 0 rgba(0,0,0,0.25)}.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded{border-width:1px;background-image:none;border-radius:3px}.k-webkit .k-pager-numbers .k-state-selected,.k-ff .k-pager-numbers .k-state-selected,.k-ie11 .k-pager-numbers .k-state-selected,.k-webkit .k-pager-numbers .k-link,.k-ff .k-pager-numbers .k-link,.k-ie11 .k-pager-numbers .k-link{border-radius:2px}}.k-button-group .k-tool,.k-toolbar,.k-grid-toolbar .k-button{border-color:#446b83}.k-grid-toolbar .k-button:hover,.k-grid-toolbar .k-button.k-state-hovered{border-color:#54c5b0}.k-grid-toolbar .k-button:focus,.k-grid-toolbar .k-button.k-state-focused{border-color:#339483}.k-grid-toolbar .k-autocomplete,.k-grid .k-autocomplete,.k-editor-toolbar .k-autocomplete,.k-grid-toolbar .k-picker-wrap,.k-grid .k-picker-wrap,.k-editor-toolbar .k-picker-wrap,.k-grid-toolbar .k-numeric-wrap,.k-grid .k-numeric-wrap,.k-editor-toolbar .k-numeric-wrap,.k-grid-toolbar .k-dropdown-wrap,.k-grid .k-dropdown-wrap,.k-editor-toolbar .k-dropdown-wrap{background-color:#253a47;background-image:none;background-position:50% 50%;border-color:#446b83}.k-grid-toolbar .k-autocomplete.k-state-hover,.k-grid .k-autocomplete.k-state-hover,.k-editor-toolbar .k-autocomplete.k-state-hover,.k-grid-toolbar .k-picker-wrap.k-state-hover,.k-grid .k-picker-wrap.k-state-hover,.k-editor-toolbar .k-picker-wrap.k-state-hover,.k-grid-toolbar .k-numeric-wrap.k-state-hover,.k-grid .k-numeric-wrap.k-state-hover,.k-editor-toolbar .k-numeric-wrap.k-state-hover,.k-grid-toolbar .k-dropdown-wrap.k-state-hover,.k-grid .k-dropdown-wrap.k-state-hover,.k-editor-toolbar .k-dropdown-wrap.k-state-hover{background-color:#54c5b0;background-image:none;background-position:50% 50%;border-color:#54c5b0}.k-grid-toolbar .k-autocomplete.k-state-focused,.k-grid .k-autocomplete.k-state-focused,.k-editor-toolbar .k-autocomplete.k-state-focused,.k-grid-toolbar .k-picker-wrap.k-state-focused,.k-grid .k-picker-wrap.k-state-focused,.k-editor-toolbar .k-picker-wrap.k-state-focused,.k-grid-toolbar .k-numeric-wrap.k-state-focused,.k-grid .k-numeric-wrap.k-state-focused,.k-editor-toolbar .k-numeric-wrap.k-state-focused,.k-grid-toolbar .k-dropdown-wrap.k-state-focused,.k-grid .k-dropdown-wrap.k-state-focused,.k-editor-toolbar .k-dropdown-wrap.k-state-focused{background-color:#54c5b0;background-image:none;background-position:50% 50%;border-color:#54c5b0}.k-popup.k-group{color:#fff;border-color:#253a47}.k-popup.k-group .k-state-default>.k-select{border-color:#446b83}.k-popup.k-group .k-state-hover>.k-select{border-color:#54c5b0}.k-popup.k-group .k-state-focused>.k-select{border-color:#41bea8}.k-grid-toolbar,.k-dropdown .k-input,.k-dropdown .k-state-focused .k-input,.k-menu .k-popup{color:#fff}.k-checkbox:checked+.k-checkbox-label:active:after{border-color:#253a47} diff --git a/src/user/plugins/admin/themes/grav/css/featherlight.min.css b/src/user/plugins/admin/themes/grav/css/featherlight.min.css deleted file mode 100644 index bf553f6..0000000 --- a/src/user/plugins/admin/themes/grav/css/featherlight.min.css +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Featherlight - ultra slim jQuery lightbox - * Version 0.4.9 - http://noelboss.github.io/featherlight/ - * - * Copyright 2014, Noël Raoul Bossart (http://www.noelboss.com) - * MIT Licensed. -**/ -@media all{.featherlight{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:2;text-align:center;white-space:nowrap;cursor:pointer;background:#333;background:rgba(0,0,0,0)}.featherlight:last-of-type{background:rgba(0,0,0,.8)}.featherlight:before{content:'';display:inline-block;height:100%;vertical-align:middle;margin-right:-.25em}.featherlight .featherlight-content{position:relative;text-align:left;vertical-align:middle;display:inline-block;overflow:auto;padding:25px 25px 0;border-bottom:25px solid transparent;min-width:30%;margin-left:5%;margin-right:5%;max-height:95%;background:#fff;cursor:auto;white-space:normal}.featherlight .featherlight-inner{display:block}.featherlight .featherlight-close-icon{position:absolute;z-index:9999;top:0;right:0;line-height:25px;width:25px;cursor:pointer;text-align:center;font:Arial,sans-serif;background:#fff;background:rgba(255,255,255,.3);color:#000}.featherlight .featherlight-image{width:100%}.featherlight-iframe .featherlight-content{border-bottom:0;padding:0}.featherlight iframe{border:0}}@media only screen and (max-width:1024px){.featherlight .featherlight-content{margin-left:10px;margin-right:10px;max-height:98%;padding:10px 10px 0;border-bottom:10px solid transparent}} \ No newline at end of file diff --git a/src/user/plugins/admin/themes/grav/css/font-awesome.min.css b/src/user/plugins/admin/themes/grav/css/font-awesome.min.css deleted file mode 100644 index ee4e978..0000000 --- a/src/user/plugins/admin/themes/grav/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"} diff --git a/src/user/plugins/admin/themes/grav/css/hint.base.min.css b/src/user/plugins/admin/themes/grav/css/hint.base.min.css deleted file mode 100644 index 51d84a7..0000000 --- a/src/user/plugins/admin/themes/grav/css/hint.base.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! Hint.css (base version) - v1.3.5 - 2015-06-16 -* http://kushagragour.in/lab/hint/ -* Copyright (c) 2015 Kushagra Gour; Licensed MIT */ - -.hint--bottom:after,.hint--top:after{margin-left:-18px}.hint,[data-hint]{position:relative;display:inline-block}.hint:after,.hint:before,[data-hint]:after,[data-hint]:before{position:absolute;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;-webkit-transition:.3s ease;-moz-transition:.3s ease;transition:.3s ease;-webkit-transition-delay:0ms;-moz-transition-delay:0ms;transition-delay:0ms}.hint--always:after,.hint--always:before,.hint:focus:after,.hint:focus:before,.hint:hover:after,.hint:hover:before,[data-hint]:focus:after,[data-hint]:focus:before,[data-hint]:hover:after,[data-hint]:hover:before{opacity:1;visibility:visible}.hint:hover:after,.hint:hover:before,[data-hint]:hover:after,[data-hint]:hover:before{-webkit-transition-delay:100ms;-moz-transition-delay:100ms;transition-delay:100ms}.hint:before,[data-hint]:before{content:'';position:absolute;background:0 0;border:6px solid transparent;z-index:1000001}.hint:after,[data-hint]:after{content:attr(data-hint);background:#383838;color:#fff;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap}.hint--top:before{border-top-color:#383838;margin-bottom:-12px}.hint--bottom:before{border-bottom-color:#383838;margin-top:-12px}.hint--top:after,.hint--top:before{bottom:100%;left:50%}.hint--top:focus:after,.hint--top:focus:before,.hint--top:hover:after,.hint--top:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.hint--bottom:after,.hint--bottom:before{top:100%;left:50%}.hint--bottom:focus:after,.hint--bottom:focus:before,.hint--bottom:hover:after,.hint--bottom:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.hint--right:before{border-right-color:#383838;margin-left:-12px;margin-bottom:-6px}.hint--right:after{margin-bottom:-14px}.hint--right:after,.hint--right:before{left:100%;bottom:50%}.hint--right:focus:after,.hint--right:focus:before,.hint--right:hover:after,.hint--right:hover:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translateX(8px)}.hint--left:before{border-left-color:#383838;margin-right:-12px;margin-bottom:-6px}.hint--left:after{margin-bottom:-14px}.hint--left:after,.hint--left:before{right:100%;bottom:50%}.hint--left:focus:after,.hint--left:focus:before,.hint--left:hover:after,.hint--left:hover:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translateX(-8px)}.hint--always.hint--top:after,.hint--always.hint--top:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.hint--always.hint--bottom:after,.hint--always.hint--bottom:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.hint--always.hint--left:after,.hint--always.hint--left:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translateX(-8px)}.hint--always.hint--right:after,.hint--always.hint--right:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translateX(8px)} \ No newline at end of file diff --git a/src/user/plugins/admin/themes/grav/css/nucleus-ie10.css b/src/user/plugins/admin/themes/grav/css/nucleus-ie10.css deleted file mode 100644 index c1d2f2a..0000000 --- a/src/user/plugins/admin/themes/grav/css/nucleus-ie10.css +++ /dev/null @@ -1,24 +0,0 @@ -button { - overflow: visible; -} - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; - padding: 0; -} - -.fixed-blocks { - display: block; -} - -.feature-items { - overflow: hidden; -} - -.modular .features .feature { - margin: 1%; - display: inline-block; - vertical-align: top; - float: none; -} \ No newline at end of file diff --git a/src/user/plugins/admin/themes/grav/css/nucleus-ie9.css b/src/user/plugins/admin/themes/grav/css/nucleus-ie9.css deleted file mode 100644 index 46df376..0000000 --- a/src/user/plugins/admin/themes/grav/css/nucleus-ie9.css +++ /dev/null @@ -1,62 +0,0 @@ -/* IE9 Resets and Normalization */ -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section, -summary { - display: block; -} - -audio, -canvas, -progress, -video { - display: inline-block; -} - -[hidden], -template { - display: none; -} - -abbr[title] { - border-bottom: 1px dotted; -} - -img { - border: 0; -} - -svg:not(:root) { - overflow: hidden; -} - -figure { - margin: 1em 40px; -} - -button { - overflow: visible; -} - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; - padding: 0; -} - -legend { - border: 0; - padding: 0; -} - -textarea { - overflow: auto; -} \ No newline at end of file diff --git a/src/user/plugins/admin/themes/grav/css/prism.css b/src/user/plugins/admin/themes/grav/css/prism.css deleted file mode 100644 index 00005b3..0000000 --- a/src/user/plugins/admin/themes/grav/css/prism.css +++ /dev/null @@ -1,121 +0,0 @@ -/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */ -/** - * prism.js default theme for JavaScript, CSS and HTML - * Based on dabblet (http://dabblet.com) - * @author Lea Verou - */ - -code[class*="language-"], -pre[class*="language-"] { - color: black; - text-shadow: 0 1px white; - direction: ltr; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - - - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, -code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { - text-shadow: none; - background: #b3d4fc; -} - -pre[class*="language-"]::selection, pre[class*="language-"] ::selection, -code[class*="language-"]::selection, code[class*="language-"] ::selection { - text-shadow: none; - background: #b3d4fc; -} - -@media print { - code[class*="language-"], - pre[class*="language-"] { - text-shadow: none; - } -} - -/* Code blocks */ -pre[class*="language-"] { - padding: 1em; - margin: .5em 0; - overflow: auto; -} - -/* Inline code */ -:not(pre) > code[class*="language-"] { - padding: .1em; - border-radius: .3em; -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: slategray; -} - -.token.punctuation { - color: #999; -} - -.namespace { - opacity: .7; -} - -.token.property, -.token.tag, -.token.boolean, -.token.number, -.token.constant, -.token.symbol { - color: #905; -} - -.token.selector, -.token.attr-name, -.token.string, -.token.builtin { - color: #690; -} - -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string, -.token.variable { - color: #a67f59; - background: hsla(0,0%,100%,.5); -} - -.token.atrule, -.token.attr-value, -.token.keyword { - color: #07a; -} - - -.token.regex, -.token.important { - color: #e90; -} - -.token.important { - font-weight: bold; -} - -.token.entity { - cursor: help; -} - diff --git a/src/user/plugins/admin/themes/grav/css/pure-0.5.0/grids-min.css b/src/user/plugins/admin/themes/grav/css/pure-0.5.0/grids-min.css deleted file mode 100644 index 4b66e7e..0000000 --- a/src/user/plugins/admin/themes/grav/css/pure-0.5.0/grids-min.css +++ /dev/null @@ -1,15 +0,0 @@ -/*! -Pure v0.5.0 -Copyright 2014 Yahoo! Inc. All rights reserved. -Licensed under the BSD License. -https://github.com/yui/pure/blob/master/LICENSE.md -*/ -.pure-g{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-flex;-webkit-flex-flow:row wrap;display:-ms-flexbox;-ms-flex-flow:row wrap}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class *="pure-u"]{font-family:sans-serif}.pure-u-1,.pure-u-1-1,.pure-u-1-2,.pure-u-1-3,.pure-u-2-3,.pure-u-1-4,.pure-u-3-4,.pure-u-1-5,.pure-u-2-5,.pure-u-3-5,.pure-u-4-5,.pure-u-5-5,.pure-u-1-6,.pure-u-5-6,.pure-u-1-8,.pure-u-3-8,.pure-u-5-8,.pure-u-7-8,.pure-u-1-12,.pure-u-5-12,.pure-u-7-12,.pure-u-11-12,.pure-u-1-24,.pure-u-2-24,.pure-u-3-24,.pure-u-4-24,.pure-u-5-24,.pure-u-6-24,.pure-u-7-24,.pure-u-8-24,.pure-u-9-24,.pure-u-10-24,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1-24{width:4.1667%;*width:4.1357%}.pure-u-1-12,.pure-u-2-24{width:8.3333%;*width:8.3023%}.pure-u-1-8,.pure-u-3-24{width:12.5%;*width:12.469%}.pure-u-1-6,.pure-u-4-24{width:16.6667%;*width:16.6357%}.pure-u-1-5{width:20%;*width:19.969%}.pure-u-5-24{width:20.8333%;*width:20.8023%}.pure-u-1-4,.pure-u-6-24{width:25%;*width:24.969%}.pure-u-7-24{width:29.1667%;*width:29.1357%}.pure-u-1-3,.pure-u-8-24{width:33.3333%;*width:33.3023%}.pure-u-3-8,.pure-u-9-24{width:37.5%;*width:37.469%}.pure-u-2-5{width:40%;*width:39.969%}.pure-u-5-12,.pure-u-10-24{width:41.6667%;*width:41.6357%}.pure-u-11-24{width:45.8333%;*width:45.8023%}.pure-u-1-2,.pure-u-12-24{width:50%;*width:49.969%}.pure-u-13-24{width:54.1667%;*width:54.1357%}.pure-u-7-12,.pure-u-14-24{width:58.3333%;*width:58.3023%}.pure-u-3-5{width:60%;*width:59.969%}.pure-u-5-8,.pure-u-15-24{width:62.5%;*width:62.469%}.pure-u-2-3,.pure-u-16-24{width:66.6667%;*width:66.6357%}.pure-u-17-24{width:70.8333%;*width:70.8023%}.pure-u-3-4,.pure-u-18-24{width:75%;*width:74.969%}.pure-u-19-24{width:79.1667%;*width:79.1357%}.pure-u-4-5{width:80%;*width:79.969%}.pure-u-5-6,.pure-u-20-24{width:83.3333%;*width:83.3023%}.pure-u-7-8,.pure-u-21-24{width:87.5%;*width:87.469%}.pure-u-11-12,.pure-u-22-24{width:91.6667%;*width:91.6357%}.pure-u-23-24{width:95.8333%;*width:95.8023%}.pure-u-1,.pure-u-1-1,.pure-u-5-5,.pure-u-24-24{width:100%} - -/* Custom */ -[class *="pure-u"] {display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto;} -.pure-u-1-7 {width: 14.285%;}.pure-u-2-7 {width: 28.571%;}.pure-u-3-7 {width: 42.857%;}.pure-u-4-7 {width: 57.142%;}.pure-u-5-7 {width: 71.428%;}.pure-u-6-7 {width: 85.714%;} -.pure-u-1-9 {width: 11.111%;}.pure-u-2-9 {width: 22.222%;}.pure-u-3-9 {width: 33.333%;}.pure-u-4-9 {width: 44.444%;}.pure-u-5-9 {width: 55.555%;}.pure-u-6-9 {width: 66.666%;}.pure-u-7-9 {width: 77.777%;}.pure-u-8-9 {width: 88.888%;} -.pure-u-1-10 {width: 10%;}.pure-u-2-10 {width: 20%;}.pure-u-3-10 {width: 30%;}.pure-u-4-10 {width: 40%;}.pure-u-5-10 {width: 50%;}.pure-u-6-10 {width: 60%;}.pure-u-7-10 {width: 70%;}.pure-u-8-10 {width: 80%;}.pure-u-9-10 {width: 90%;} - -.pure-u-1-11 {width: 9.090%;}.pure-u-2-11 {width: 18.181%;}.pure-u-3-11 {width: 27.272%;}.pure-u-4-11 {width: 36.363%;}.pure-u-5-11 {width: 45.454%;}.pure-u-6-11 {width: 54.545%;}.pure-u-7-11 {width: 63.636%;}.pure-u-8-11 {width: 72.727%;}.pure-u-9-11 {width: 81.818%;}.pure-u-10-11 {width: 90.909%;} diff --git a/src/user/plugins/admin/themes/grav/css/selectize.min.css b/src/user/plugins/admin/themes/grav/css/selectize.min.css deleted file mode 100644 index 5007e50..0000000 --- a/src/user/plugins/admin/themes/grav/css/selectize.min.css +++ /dev/null @@ -1 +0,0 @@ -.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder{visibility:visible!important;background:#f2f2f2!important;background:rgba(0,0,0,0.06)!important;border:0 none!important;-webkit-box-shadow:inset 0 0 12px 4px #fff;box-shadow:inset 0 0 12px 4px #fff}.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after{content:'!';visibility:hidden}.selectize-control.plugin-drag_drop .ui-sortable-helper{-webkit-box-shadow:0 2px 5px rgba(0,0,0,0.2);box-shadow:0 2px 5px rgba(0,0,0,0.2)}.selectize-dropdown-header{position:relative;padding:5px 8px;border-bottom:1px solid #d0d0d0;background:#f8f8f8;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.selectize-dropdown-header-close{position:absolute;right:8px;top:50%;color:#303030;opacity:.4;margin-top:-12px;line-height:20px;font-size:20px!important}.selectize-dropdown-header-close:hover{color:#000}.selectize-dropdown.plugin-optgroup_columns .optgroup{border-right:1px solid #f2f2f2;border-top:0 none;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child{border-right:0 none}.selectize-dropdown.plugin-optgroup_columns .optgroup:before{display:none}.selectize-dropdown.plugin-optgroup_columns .optgroup-header{border-top:0 none}.selectize-control.plugin-remove_button [data-value]{position:relative;padding-right:24px!important}.selectize-control.plugin-remove_button [data-value] .remove{z-index:1;position:absolute;top:0;right:0;bottom:0;width:17px;text-align:center;font-weight:700;font-size:12px;color:inherit;text-decoration:none;vertical-align:middle;display:inline-block;padding:2px 0 0;border-left:1px solid #d0d0d0;-webkit-border-radius:0 2px 2px 0;-moz-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-control.plugin-remove_button [data-value] .remove:hover{background:rgba(0,0,0,0.05)}.selectize-control.plugin-remove_button [data-value].active .remove{border-left-color:#cacaca}.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover{background:none}.selectize-control.plugin-remove_button .disabled [data-value] .remove{border-left-color:#fff}.selectize-control{position:relative}.selectize-dropdown,.selectize-input,.selectize-input input{color:#303030;font-family:inherit;font-size:13px;line-height:18px;-webkit-font-smoothing:inherit}.selectize-input,.selectize-control.single .selectize-input.input-active{background:#fff;cursor:text;display:inline-block}.selectize-input{border:1px solid #d0d0d0;padding:8px;display:inline-block;width:100%;overflow:hidden;position:relative;z-index:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.1);box-shadow:inset 0 1px 1px rgba(0,0,0,0.1);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.selectize-control.multi .selectize-input.has-items{padding:6px 8px 3px}.selectize-input.full{background-color:#fff}.selectize-input.disabled,.selectize-input.disabled *{cursor:default!important}.selectize-input.focus{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.15)}.selectize-input.dropdown-active{-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.selectize-input > *{vertical-align:baseline;display:-moz-inline-stack;display:inline-block;zoom:1;*display:inline}.selectize-control.multi .selectize-input > div{cursor:pointer;margin:0 3px 3px 0;padding:2px 6px;background:#f2f2f2;color:#303030;border:0 solid #d0d0d0}.selectize-control.multi .selectize-input > div.active{background:#e8e8e8;color:#303030;border:0 solid #cacaca}.selectize-control.multi .selectize-input.disabled > div,.selectize-control.multi .selectize-input.disabled > div.active{color:#7d7d7d;background:#fff;border:0 solid #fff}.selectize-input > input{padding:0!important;min-height:0!important;max-height:none!important;max-width:100%!important;margin:0 2px 0 0 !important;text-indent:0!important;border:0 none!important;background:none!important;line-height:inherit!important;-webkit-user-select:auto!important;-webkit-box-shadow:none!important;box-shadow:none!important}.selectize-input > input::-ms-clear{display:none}.selectize-input > input:focus{outline:none!important}.selectize-input::after{content:' ';display:block;clear:left}.selectize-input.dropdown-active::before{content:' ';display:block;position:absolute;background:#f0f0f0;height:1px;bottom:0;left:0;right:0}.selectize-dropdown{position:absolute;z-index:10;border:1px solid #d0d0d0;background:#fff;margin:-1px 0 0;border-top:0 none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1);-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.selectize-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.selectize-dropdown [data-selectable] .highlight{background:rgba(125,168,208,0.2);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.selectize-dropdown [data-selectable],.selectize-dropdown .optgroup-header{padding:5px 8px}.selectize-dropdown .optgroup:first-child .optgroup-header{border-top:0 none}.selectize-dropdown .optgroup-header{color:#303030;background:#fff;cursor:default}.selectize-dropdown .active{background-color:#f5fafd;color:#495c68}.selectize-dropdown .active.create{color:#495c68}.selectize-dropdown .create{color:rgba(48,48,48,0.5)}.selectize-dropdown-content{overflow-y:auto;overflow-x:hidden;max-height:200px}.selectize-control.single .selectize-input,.selectize-control.single .selectize-input input{cursor:pointer}.selectize-control.single .selectize-input.input-active,.selectize-control.single .selectize-input.input-active input{cursor:text}.selectize-control.single .selectize-input:after{content:' ';display:block;position:absolute;top:50%;right:15px;margin-top:-3px;width:0;height:0;border-style:solid;border-width:5px 5px 0;border-color:gray transparent transparent}.selectize-control.single .selectize-input.dropdown-active:after{margin-top:-4px;border-width:0 5px 5px;border-color:transparent transparent gray}.selectize-control.rtl.single .selectize-input:after{left:15px;right:auto}.selectize-control.rtl .selectize-input > input{margin:0 4px 0 -2px !important}.selectize-control .selectize-input.disabled{opacity:.5;background-color:#fafafa} diff --git a/src/user/plugins/admin/themes/grav/css/uikit.css b/src/user/plugins/admin/themes/grav/css/uikit.css deleted file mode 100755 index 25ad80d..0000000 --- a/src/user/plugins/admin/themes/grav/css/uikit.css +++ /dev/null @@ -1,6986 +0,0 @@ -/*! UIkit 2.10.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ - -/* ======================================================================== - Component: Base - ========================================================================== */ -/* - * 1. Normalizes default `font-family` and sets `font-size` here to support `rem` units - * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom - * 3. Style - */ -html { - /* 1 */ - font: normal 14px / 20px "Helvetica Neue", Helvetica, Arial, sans-serif; - /* 2 */ - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - /* 3 */ - background: #ffffff; - color: #444444; -} -/* - * Removes default margin. - */ -body { - margin: 0; -} -/* Links - ========================================================================== */ -/* - * Remove the gray background color from active links in IE 10. - */ -a { - background: transparent; -} -/* - * Improves readability when focused and also mouse hovered in all browsers. - */ -a:active, -a:hover { - outline: 0; -} -/* - * Style - */ -a, -.uk-link { - color: #0077dd; - text-decoration: none; - cursor: pointer; -} -a:hover, -.uk-link:hover { - color: #005599; - text-decoration: underline; -} -/* Text-level semantics - ========================================================================== */ -/* - * Addresses styling not present in Chrome, Safari, Opera and IE 8/9/10. - */ -abbr[title] { - border-bottom: 1px dotted; -} -/* - * Addresses style set to `bolder` in Firefox - */ -b, -strong { - font-weight: bold; -} -/* - * 1. Address odd `em`-unit font size rendering in all browsers. - * 2. Consolas has a better baseline in running text compared to `Courier` - */ -:not(pre) > code, -:not(pre) > kbd, -:not(pre) > samp { - /* 1 */ - font-size: 12px; - /* 2 */ - font-family: Consolas, monospace, serif; - /* 3 */ - color: #dd0055; - white-space: nowrap; -} -/* - * Emphasize - */ -em { - color: #dd0055; -} -/* - * Insert - */ -ins { - background: #ffffaa; - color: #444444; - text-decoration: none; -} -/* - * Mark - * Note: Addresses styling not present in IE 8/9. - */ -mark { - background: #ffffaa; - color: #444444; -} -/* - * Quote - */ -q { - font-style: italic; -} -/* - * Addresses inconsistent and variable font size in all browsers. - */ -small { - font-size: 80%; -} -/* - * Prevents `sub` and `sup` affecting `line-height` in all browsers. - */ -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -/* Images - ========================================================================== */ -/* - * 1. Responsiveness: Sets a maximum width relative to the parent and auto scales the height - * 2. Corrects `max-width` behavior if padding and border are used - * 3. Remove border when inside `a` element in IE 8/9/10. - * 4. Remove the gap between images and the bottom of their containers - */ -img { - /* 1 */ - max-width: 100%; - height: auto; - /* 2 */ - -moz-box-sizing: border-box; - box-sizing: border-box; - /* 3 */ - border: 0; - /* 4 */ - vertical-align: middle; -} -/* - * Preserve original image dimensions - */ -.uk-img-preserve, -.uk-img-preserve img { - max-width: none; -} -/* - * Correct overflow not hidden in IE 9/10/11. - */ -svg:not(:root) { - overflow: hidden; -} -/* Block elements - ========================================================================== */ -/* - * Reset margin - */ -blockquote, -figure { - margin: 0; -} -/* - * Margins - */ -p, -ul, -ol, -dl, -blockquote, -pre, -address, -fieldset, -figure { - margin: 0 0 15px 0; -} -* + p, -* + ul, -* + ol, -* + dl, -* + blockquote, -* + pre, -* + address, -* + fieldset, -* + figure { - margin-top: 15px; -} -/* Headings - ========================================================================== */ -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 0 0 15px 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-weight: normal; - color: #444444; - text-transform: none; -} -/* - * Margins - */ -* + h1, -* + h2, -* + h3, -* + h4, -* + h5, -* + h6 { - margin-top: 25px; -} -/* - * Sizes - */ -h1, -.uk-h1 { - font-size: 36px; - line-height: 42px; -} -h2, -.uk-h2 { - font-size: 24px; - line-height: 30px; -} -h3, -.uk-h3 { - font-size: 18px; - line-height: 24px; -} -h4, -.uk-h4 { - font-size: 16px; - line-height: 22px; -} -h5, -.uk-h5 { - font-size: 14px; - line-height: 20px; -} -h6, -.uk-h6 { - font-size: 12px; - line-height: 18px; -} -/* Lists - ========================================================================== */ -ul, -ol { - padding-left: 30px; -} -/* - * Reset margin for nested lists - */ -ul > li > ul, -ul > li > ol, -ol > li > ol, -ol > li > ul { - margin: 0; -} -/* Description lists - ========================================================================== */ -dt { - font-weight: bold; -} -dd { - margin-left: 0; -} -/* Horizontal rules - ========================================================================== */ -/* - * 1. Address differences between Firefox and other browsers. - * 2. Style - */ -hr { - /* 1 */ - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; - /* 2 */ - margin: 15px 0; - border: 0; - border-top: 1px solid #dddddd; -} -/* Address - ========================================================================== */ -address { - font-style: normal; -} -/* Blockquotes - ========================================================================== */ -blockquote { - padding-left: 15px; - border-left: 5px solid #dddddd; - font-size: 16px; - line-height: 22px; - font-style: italic; -} -/* Preformatted text - ========================================================================== */ -/* - * 1. Contain overflow in all browsers. - */ -pre { - padding: 10px; - background: #f5f5f5; - font: 12px / 18px Consolas, monospace, serif; - color: #444444; - -moz-tab-size: 4; - tab-size: 4; - /* 1 */ - overflow: auto; -} -/* Selection pseudo-element - ========================================================================== */ -::-moz-selection { - background: #3399ff; - color: #ffffff; - text-shadow: none; -} -::selection { - background: #3399ff; - color: #ffffff; - text-shadow: none; -} -/* HTML5 elements - ========================================================================== */ -/* - * Corrects `block` display not defined in IE 8/9. - */ -article, -aside, -details, -figcaption, -figure, -footer, -header, -main, -nav, -section, -summary { - display: block; -} -/* - * Addresses inconsistent vertical alignment of `progress` in Chrome, Firefox and Opera. - */ -progress { - vertical-align: baseline; -} -/* - * Prevent displaying `audio` without controls in Chrome, Safari and Opera - */ -audio:not([controls]) { - display: none; -} -/* - * Address `[hidden]` styling not present in IE 8/9. - * Hide the `template` element in IE and Safari - */ -[hidden], -template { - display: none; -} -/* Iframe - ========================================================================== */ -iframe { - border: 0; -} -/* Fix viewport for IE10 snap mode - ========================================================================== */ -@media screen and (max-width: 400px) { - @-ms-viewport { - width: device-width; - } -} -/* ======================================================================== - Component: Grid - ========================================================================== */ -/* - * Micro clearfix - */ -.uk-grid:before, -.uk-grid:after { - content: " "; - display: table; -} -.uk-grid:after { - clear: both; -} -/* - * 1. Needed for the gutter - * 2. Makes grid more robust so that it can be used with other block elements like lists - */ -.uk-grid { - /* 1 */ - margin: 0 0 0 -25px; - /* 2 */ - padding: 0; - list-style: none; -} -/* - * Grid cell - * 1. Makes grid more robust so that it can be used with other block elements - * 2. Create horizontal gutter - * 3. `float` is set by default so columns always behave the same and create a new block format context - */ -.uk-grid > * { - /* 1 */ - margin: 0; - /* 2 */ - padding-left: 25px; - /* 3 */ - float: left; -} -/* - * Remove margin from the last-child - */ -.uk-grid > * > :last-child { - margin-bottom: 0; -} -/* Grid gutter - ========================================================================== */ -/* - * Vertical gutter - */ -.uk-grid + .uk-grid { - margin-top: 25px; -} -/* - * This class is set by JavaScript and applies a vertical gutter if the columns stack or float into the next row - * Higher specificity to override margin - */ -.uk-grid > .uk-grid-margin { - margin-top: 25px; -} -/* - * Vertical gutter for panels - */ -.uk-grid > * > .uk-panel + .uk-panel { - margin-top: 25px; -} -/* - * Larger gutter for large screens - */ -/* Large screen and bigger */ -@media (min-width: 1220px) { - /* Horizontal gutter */ - .uk-grid:not(.uk-grid-preserve) { - margin-left: -35px; - } - .uk-grid:not(.uk-grid-preserve) > * { - padding-left: 35px; - } - /* Vertical gutter */ - .uk-grid:not(.uk-grid-preserve) + .uk-grid { - margin-top: 35px; - } - .uk-grid:not(.uk-grid-preserve) > .uk-grid-margin { - margin-top: 35px; - } - /* Vertical gutter for panels */ - .uk-grid:not(.uk-grid-preserve) > * > .uk-panel + .uk-panel { - margin-top: 35px; - } -} -/* - * Small gutter - * Higher specificity to override large gutter - */ -.uk-grid.uk-grid-small { - margin-left: -10px; -} -.uk-grid.uk-grid-small > * { - padding-left: 10px; -} -.uk-grid.uk-grid-small + .uk-grid-small { - margin-top: 10px; -} -.uk-grid.uk-grid-small > .uk-grid-margin { - margin-top: 10px; -} -.uk-grid.uk-grid-small > * > .uk-panel + .uk-panel { - margin-top: 10px; -} -/* Modifier: `uk-grid-divider` - ========================================================================== */ -/* - * Horizontal divider - * Does not work with `uk-push-*`, `uk-pull-*` and not if the columns float into the next row - */ -.uk-grid-divider:not(:empty) { - margin-left: -25px; - margin-right: -25px; -} -.uk-grid-divider > * { - padding-left: 25px; - padding-right: 25px; -} -.uk-grid-divider > [class*='uk-width-1-']:not(.uk-width-1-1):nth-child(n+2), -.uk-grid-divider > [class*='uk-width-2-']:nth-child(n+2), -.uk-grid-divider > [class*='uk-width-3-']:nth-child(n+2), -.uk-grid-divider > [class*='uk-width-4-']:nth-child(n+2), -.uk-grid-divider > [class*='uk-width-5-']:nth-child(n+2), -.uk-grid-divider > [class*='uk-width-6-']:nth-child(n+2), -.uk-grid-divider > [class*='uk-width-7-']:nth-child(n+2), -.uk-grid-divider > [class*='uk-width-8-']:nth-child(n+2), -.uk-grid-divider > [class*='uk-width-9-']:nth-child(n+2) { - border-left: 1px solid #dddddd; -} -/* Tablet and bigger */ -@media (min-width: 768px) { - .uk-grid-divider > [class*='uk-width-medium-']:not(.uk-width-medium-1-1):nth-child(n+2) { - border-left: 1px solid #dddddd; - } -} -/* Desktop and bigger */ -@media (min-width: 960px) { - .uk-grid-divider > [class*='uk-width-large-']:not(.uk-width-large-1-1):nth-child(n+2) { - border-left: 1px solid #dddddd; - } -} -/* Large screen and bigger */ -@media (min-width: 1220px) { - /* - * Large gutter - */ - .uk-grid-divider:not(.uk-grid-preserve):not(:empty) { - margin-left: -35px; - margin-right: -35px; - } - .uk-grid-divider:not(.uk-grid-preserve) > * { - padding-left: 35px; - padding-right: 35px; - } - .uk-grid-divider:not(.uk-grid-preserve):empty { - margin-top: 35px; - margin-bottom: 35px; - } -} -/* - * Vertical divider - */ -.uk-grid-divider:empty { - margin-top: 25px; - margin-bottom: 25px; - border-top: 1px solid #dddddd; -} -/* Even grid cell widths - ========================================================================== */ -[class*='uk-grid-width'] > * { - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100%; -} -.uk-grid-width-1-2 > * { - width: 50%; -} -.uk-grid-width-1-3 > * { - width: 33.333%; -} -.uk-grid-width-1-4 > * { - width: 25%; -} -.uk-grid-width-1-5 > * { - width: 20%; -} -.uk-grid-width-1-6 > * { - width: 16.666%; -} -.uk-grid-width-1-10 > * { - width: 10%; -} -/* Phone landscape and bigger */ -@media (min-width: 480px) { - .uk-grid-width-small-1-2 > * { - width: 50%; - } - .uk-grid-width-small-1-3 > * { - width: 33.333%; - } - .uk-grid-width-small-1-4 > * { - width: 25%; - } - .uk-grid-width-small-1-5 > * { - width: 20%; - } - .uk-grid-width-small-1-6 > * { - width: 16.666%; - } - .uk-grid-width-small-1-10 > * { - width: 10%; - } -} -/* Tablet and bigger */ -@media (min-width: 768px) { - .uk-grid-width-medium-1-2 > * { - width: 50%; - } - .uk-grid-width-medium-1-3 > * { - width: 33.333%; - } - .uk-grid-width-medium-1-4 > * { - width: 25%; - } - .uk-grid-width-medium-1-5 > * { - width: 20%; - } - .uk-grid-width-medium-1-6 > * { - width: 16.666%; - } - .uk-grid-width-medium-1-10 > * { - width: 10%; - } -} -/* Desktop and bigger */ -@media (min-width: 960px) { - .uk-grid-width-large-1-2 > * { - width: 50%; - } - .uk-grid-width-large-1-3 > * { - width: 33.333%; - } - .uk-grid-width-large-1-4 > * { - width: 25%; - } - .uk-grid-width-large-1-5 > * { - width: 20%; - } - .uk-grid-width-large-1-6 > * { - width: 16.666%; - } - .uk-grid-width-large-1-10 > * { - width: 10%; - } -} -/* Large screen and bigger */ -@media (min-width: 1220px) { - .uk-grid-width-xlarge-1-2 > * { - width: 50%; - } - .uk-grid-width-xlarge-1-3 > * { - width: 33.333%; - } - .uk-grid-width-xlarge-1-4 > * { - width: 25%; - } - .uk-grid-width-xlarge-1-5 > * { - width: 20%; - } - .uk-grid-width-xlarge-1-6 > * { - width: 16.666%; - } - .uk-grid-width-xlarge-1-10 > * { - width: 10%; - } -} -/* Sub-objects: `uk-width-*` - ========================================================================== */ -[class*='uk-width'] { - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100%; -} -/* - * Widths - */ -/* Whole */ -.uk-width-1-1 { - width: 100%; -} -/* Halves */ -.uk-width-1-2, -.uk-width-2-4, -.uk-width-3-6, -.uk-width-5-10 { - width: 50%; -} -/* Thirds */ -.uk-width-1-3, -.uk-width-2-6 { - width: 33.333%; -} -.uk-width-2-3, -.uk-width-4-6 { - width: 66.666%; -} -/* Quarters */ -.uk-width-1-4 { - width: 25%; -} -.uk-width-3-4 { - width: 75%; -} -/* Fifths */ -.uk-width-1-5, -.uk-width-2-10 { - width: 20%; -} -.uk-width-2-5, -.uk-width-4-10 { - width: 40%; -} -.uk-width-3-5, -.uk-width-6-10 { - width: 60%; -} -.uk-width-4-5, -.uk-width-8-10 { - width: 80%; -} -/* Sixths */ -.uk-width-1-6 { - width: 16.666%; -} -.uk-width-5-6 { - width: 83.333%; -} -/* Tenths */ -.uk-width-1-10 { - width: 10%; -} -.uk-width-3-10 { - width: 30%; -} -.uk-width-7-10 { - width: 70%; -} -.uk-width-9-10 { - width: 90%; -} -/* Phone landscape and bigger */ -@media (min-width: 480px) { - /* Whole */ - .uk-width-small-1-1 { - width: 100%; - } - /* Halves */ - .uk-width-small-1-2, - .uk-width-small-2-4, - .uk-width-small-3-6, - .uk-width-small-5-10 { - width: 50%; - } - /* Thirds */ - .uk-width-small-1-3, - .uk-width-small-2-6 { - width: 33.333%; - } - .uk-width-small-2-3, - .uk-width-small-4-6 { - width: 66.666%; - } - /* Quarters */ - .uk-width-small-1-4 { - width: 25%; - } - .uk-width-small-3-4 { - width: 75%; - } - /* Fifths */ - .uk-width-small-1-5, - .uk-width-small-2-10 { - width: 20%; - } - .uk-width-small-2-5, - .uk-width-small-4-10 { - width: 40%; - } - .uk-width-small-3-5, - .uk-width-small-6-10 { - width: 60%; - } - .uk-width-small-4-5, - .uk-width-small-8-10 { - width: 80%; - } - /* Sixths */ - .uk-width-small-1-6 { - width: 16.666%; - } - .uk-width-small-5-6 { - width: 83.333%; - } - /* Tenths */ - .uk-width-small-1-10 { - width: 10%; - } - .uk-width-small-3-10 { - width: 30%; - } - .uk-width-small-7-10 { - width: 70%; - } - .uk-width-small-9-10 { - width: 90%; - } -} -/* Tablet and bigger */ -@media (min-width: 768px) { - /* Whole */ - .uk-width-medium-1-1 { - width: 100%; - } - /* Halves */ - .uk-width-medium-1-2, - .uk-width-medium-2-4, - .uk-width-medium-3-6, - .uk-width-medium-5-10 { - width: 50%; - } - /* Thirds */ - .uk-width-medium-1-3, - .uk-width-medium-2-6 { - width: 33.333%; - } - .uk-width-medium-2-3, - .uk-width-medium-4-6 { - width: 66.666%; - } - /* Quarters */ - .uk-width-medium-1-4 { - width: 25%; - } - .uk-width-medium-3-4 { - width: 75%; - } - /* Fifths */ - .uk-width-medium-1-5, - .uk-width-medium-2-10 { - width: 20%; - } - .uk-width-medium-2-5, - .uk-width-medium-4-10 { - width: 40%; - } - .uk-width-medium-3-5, - .uk-width-medium-6-10 { - width: 60%; - } - .uk-width-medium-4-5, - .uk-width-medium-8-10 { - width: 80%; - } - /* Sixths */ - .uk-width-medium-1-6 { - width: 16.666%; - } - .uk-width-medium-5-6 { - width: 83.333%; - } - /* Tenths */ - .uk-width-medium-1-10 { - width: 10%; - } - .uk-width-medium-3-10 { - width: 30%; - } - .uk-width-medium-7-10 { - width: 70%; - } - .uk-width-medium-9-10 { - width: 90%; - } -} -/* Desktop and bigger */ -@media (min-width: 960px) { - /* Whole */ - .uk-width-large-1-1 { - width: 100%; - } - /* Halves */ - .uk-width-large-1-2, - .uk-width-large-2-4, - .uk-width-large-3-6, - .uk-width-large-5-10 { - width: 50%; - } - /* Thirds */ - .uk-width-large-1-3, - .uk-width-large-2-6 { - width: 33.333%; - } - .uk-width-large-2-3, - .uk-width-large-4-6 { - width: 66.666%; - } - /* Quarters */ - .uk-width-large-1-4 { - width: 25%; - } - .uk-width-large-3-4 { - width: 75%; - } - /* Fifths */ - .uk-width-large-1-5, - .uk-width-large-2-10 { - width: 20%; - } - .uk-width-large-2-5, - .uk-width-large-4-10 { - width: 40%; - } - .uk-width-large-3-5, - .uk-width-large-6-10 { - width: 60%; - } - .uk-width-large-4-5, - .uk-width-large-8-10 { - width: 80%; - } - /* Sixths */ - .uk-width-large-1-6 { - width: 16.666%; - } - .uk-width-large-5-6 { - width: 83.333%; - } - /* Tenths */ - .uk-width-large-1-10 { - width: 10%; - } - .uk-width-large-3-10 { - width: 30%; - } - .uk-width-large-7-10 { - width: 70%; - } - .uk-width-large-9-10 { - width: 90%; - } -} -/* Sub-object: `uk-push-*` and `uk-pull-*` - ========================================================================== */ -/* - * Source ordering - * Works only with `uk-width-medium-*` - */ -/* Tablet and bigger */ -@media (min-width: 768px) { - [class*='uk-push-'], - [class*='uk-pull-'] { - position: relative; - } - /* - * Push - */ - /* Halves */ - .uk-push-1-2, - .uk-push-2-4, - .uk-push-3-6, - .uk-push-5-10 { - left: 50%; - } - /* Thirds */ - .uk-push-1-3, - .uk-push-2-6 { - left: 33.333%; - } - .uk-push-2-3, - .uk-push-4-6 { - left: 66.666%; - } - /* Quarters */ - .uk-push-1-4 { - left: 25%; - } - .uk-push-3-4 { - left: 75%; - } - /* Fifths */ - .uk-push-1-5, - .uk-push-2-10 { - left: 20%; - } - .uk-push-2-5, - .uk-push-4-10 { - left: 40%; - } - .uk-push-3-5, - .uk-push-6-10 { - left: 60%; - } - .uk-push-4-5, - .uk-push-8-10 { - left: 80%; - } - /* Sixths */ - .uk-push-1-6 { - left: 16.666%; - } - .uk-push-5-6 { - left: 83.333%; - } - /* Tenths */ - .uk-push-1-10 { - left: 10%; - } - .uk-push-3-10 { - left: 30%; - } - .uk-push-7-10 { - left: 70%; - } - .uk-push-9-10 { - left: 90%; - } - /* - * Pull - */ - /* Halves */ - .uk-pull-1-2, - .uk-pull-2-4, - .uk-pull-3-6, - .uk-pull-5-10 { - left: -50%; - } - /* Thirds */ - .uk-pull-1-3, - .uk-pull-2-6 { - left: -33.333%; - } - .uk-pull-2-3, - .uk-pull-4-6 { - left: -66.666%; - } - /* Quarters */ - .uk-pull-1-4 { - left: -25%; - } - .uk-pull-3-4 { - left: -75%; - } - /* Fifths */ - .uk-pull-1-5, - .uk-pull-2-10 { - left: -20%; - } - .uk-pull-2-5, - .uk-pull-4-10 { - left: -40%; - } - .uk-pull-3-5, - .uk-pull-6-10 { - left: -60%; - } - .uk-pull-4-5, - .uk-pull-8-10 { - left: -80%; - } - /* Sixths */ - .uk-pull-1-6 { - left: -16.666%; - } - .uk-pull-5-6 { - left: -83.333%; - } - /* Tenths */ - .uk-pull-1-10 { - left: -10%; - } - .uk-pull-3-10 { - left: -30%; - } - .uk-pull-7-10 { - left: -70%; - } - .uk-pull-9-10 { - left: -90%; - } -} -/* ======================================================================== - Component: Panel - ========================================================================== */ -/* - * 1. Needed for `a` elements - * 2. Create position context for badges - */ -.uk-panel { - /* 1 */ - display: block; - /* 2 */ - position: relative; -} -/* - * Micro clearfix to make panels more robust - */ -.uk-panel:before, -.uk-panel:after { - content: " "; - display: table; -} -.uk-panel:after { - clear: both; -} -/* - * Remove margin from the last-child if not `uk-widget-title` - */ -.uk-panel > :not(.uk-panel-title):last-child { - margin-bottom: 0; -} -/* Sub-object: `uk-panel-title` - ========================================================================== */ -.uk-panel-title { - margin-top: 0; - margin-bottom: 15px; - font-size: 18px; - line-height: 24px; - font-weight: normal; - text-transform: none; - color: #444444; -} -/* Sub-object: `uk-panel-badge` - ========================================================================== */ -.uk-panel-badge { - position: absolute; - top: 0; - right: 0; - z-index: 1; -} -/* Modifier: `uk-panel-box` - ========================================================================== */ -.uk-panel-box { - padding: 15px; - background: #f5f5f5; - color: #444444; -} -.uk-panel-box .uk-panel-title { - color: #444444; -} -.uk-panel-box .uk-panel-badge { - top: 10px; - right: 10px; -} -.uk-panel-box .uk-panel-teaser { - margin: -15px -15px 15px -15px; -} -/* - * Nav in panel - */ -.uk-panel-box > .uk-nav-side { - margin: 0 -15px; -} -/* - * Sub-modifier: `uk-panel-box-primary` - */ -.uk-panel-box-primary { - background-color: #ebf7fd; - color: #2d7091; -} -.uk-panel-box-primary .uk-panel-title { - color: #2d7091; -} -/* - * Sub-modifier: `uk-panel-box-secondary` - */ -.uk-panel-box-secondary { - background-color: #eeeeee; - color: #444444; -} -.uk-panel-box-secondary .uk-panel-title { - color: #444444; -} -/* Modifier: `uk-panel-header` - ========================================================================== */ -.uk-panel-header .uk-panel-title { - padding-bottom: 10px; - border-bottom: 1px solid #dddddd; - color: #444444; -} -/* Modifier: `uk-panel-space` - ========================================================================== */ -.uk-panel-space { - padding: 30px; -} -.uk-panel-space .uk-panel-badge { - top: 30px; - right: 30px; -} -/* Modifier: `uk-panel-divider` - ========================================================================== */ -.uk-panel + .uk-panel-divider { - margin-top: 50px !important; -} -.uk-panel + .uk-panel-divider:before { - content: ""; - display: block; - position: absolute; - top: -25px; - left: 0; - right: 0; - border-top: 1px solid #dddddd; -} -/* Large screen and bigger */ -@media (min-width: 1220px) { - .uk-panel + .uk-panel-divider { - margin-top: 70px !important; - } - .uk-panel + .uk-panel-divider:before { - top: -35px; - } -} -/* ======================================================================== - Component: Article - ========================================================================== */ -/* - * Micro clearfix to make articles more robust - */ -.uk-article:before, -.uk-article:after { - content: " "; - display: table; -} -.uk-article:after { - clear: both; -} -/* - * Remove margin from the last-child - */ -.uk-article > :last-child { - margin-bottom: 0; -} -/* - * Vertical gutter for articles - */ -.uk-article + .uk-article { - margin-top: 25px; -} -/* Sub-object `uk-article-title` - ========================================================================== */ -.uk-article-title { - font-size: 36px; - line-height: 42px; - font-weight: normal; - text-transform: none; -} -.uk-article-title a { - color: inherit; - text-decoration: none; -} -/* Sub-object `uk-article-meta` - ========================================================================== */ -.uk-article-meta { - font-size: 12px; - line-height: 18px; - color: #999999; -} -/* Sub-object `uk-article-lead` - ========================================================================== */ -.uk-article-lead { - color: #444444; - font-size: 18px; - line-height: 24px; - font-weight: normal; -} -/* Sub-object `uk-article-divider` - ========================================================================== */ -.uk-article-divider { - margin-bottom: 25px; - border-color: #dddddd; -} -* + .uk-article-divider { - margin-top: 25px; -} -/* ======================================================================== - Component: Comment - ========================================================================== */ -/* Sub-object `uk-comment-header` - ========================================================================== */ -.uk-comment-header { - margin-bottom: 15px; -} -/* - * Micro clearfix - */ -.uk-comment-header:before, -.uk-comment-header:after { - content: " "; - display: table; -} -.uk-comment-header:after { - clear: both; -} -/* Sub-object `uk-comment-avatar` - ========================================================================== */ -.uk-comment-avatar { - margin-right: 15px; - float: left; -} -/* Sub-object `uk-comment-title` - ========================================================================== */ -.uk-comment-title { - margin: 5px 0 0 0; - font-size: 16px; - line-height: 22px; -} -/* Sub-object `uk-comment-meta` - ========================================================================== */ -.uk-comment-meta { - margin: 2px 0 0 0; - font-size: 11px; - line-height: 16px; - color: #999999; -} -/* Sub-object `uk-comment-body` - ========================================================================== */ -/* - * Remove margin from the last-child - */ -.uk-comment-body > :last-child { - margin-bottom: 0; -} -/* Sub-object `uk-comment-list` - ========================================================================== */ -.uk-comment-list { - padding: 0; - list-style: none; -} -.uk-comment-list .uk-comment + ul { - margin: 15px 0 0 0; - list-style: none; -} -.uk-comment-list > li:nth-child(n+2), -.uk-comment-list .uk-comment + ul > li:nth-child(n+2) { - margin-top: 15px; -} -/* Tablet and bigger */ -@media (min-width: 768px) { - .uk-comment-list .uk-comment + ul { - padding-left: 100px; - } -} -/* Modifier `uk-comment-primary` - ========================================================================== */ -/* ======================================================================== - Component: Nav - ========================================================================== */ -.uk-nav, -.uk-nav ul { - margin: 0; - padding: 0; - list-style: none; -} -/* - * Items - */ -.uk-nav li > a { - display: block; - text-decoration: none; -} -.uk-nav > li > a { - padding: 5px 15px; -} -/* - * Nested items - */ -.uk-nav ul { - padding-left: 15px; -} -.uk-nav ul a { - padding: 2px 0; -} -/* - * Item subtitle - */ -.uk-nav li > a > div { - font-size: 12px; - line-height: 18px; -} -/* Sub-object: `uk-nav-header` - ========================================================================== */ -.uk-nav-header { - padding: 5px 15px; - text-transform: uppercase; - font-weight: bold; - font-size: 12px; -} -.uk-nav-header:not(:first-child) { - margin-top: 15px; -} -/* Sub-object: `uk-nav-divider` - ========================================================================== */ -.uk-nav-divider { - margin: 9px 15px; -} -/* Sub-object: `uk-nav-sub` - ========================================================================== */ -/* - * `ul` needed for higher specificity to override padding - */ -ul.uk-nav-sub { - padding: 5px 0 5px 15px; -} -/* Modifier: `uk-nav-parent-icon` - ========================================================================== */ -.uk-nav-parent-icon > .uk-parent > a:after { - content: "\f104"; - width: 20px; - margin-right: -10px; - float: right; - font-family: FontAwesome; - text-align: center; -} -.uk-nav-parent-icon > .uk-parent.uk-open > a:after { - content: "\f107"; -} -/* Modifier `uk-nav-side` - ========================================================================== */ -/* - * Items - */ -.uk-nav-side > li > a { - color: #444444; -} -/* - * Hover - * 1. Apply hover style also to focus state - * 2. Remove default focus style - */ -.uk-nav-side > li > a:hover, -.uk-nav-side > li > a:focus { - background: rgba(0, 0, 0, 0.05); - color: #444444; - /* 2 */ - outline: none; -} -/* Active */ -.uk-nav-side > li.uk-active > a { - background: #00a8e6; - color: #ffffff; -} -/* - * Sub-object: `uk-nav-header` - */ -.uk-nav-side .uk-nav-header { - color: #444444; -} -/* - * Sub-object: `uk-nav-divider` - */ -.uk-nav-side .uk-nav-divider { - border-top: 1px solid #dddddd; -} -/* - * Nested items - */ -.uk-nav-side ul a { - color: #0077dd; -} -.uk-nav-side ul a:hover { - color: #005599; -} -/* Modifier `uk-nav-dropdown` - ========================================================================== */ -/* - * Items - */ -.uk-nav-dropdown > li > a { - color: #444444; -} -/* - * Hover - * 1. Apply hover style also to focus state - * 2. Remove default focus style - */ -.uk-nav-dropdown > li > a:hover, -.uk-nav-dropdown > li > a:focus { - background: #00a8e6; - color: #ffffff; - /* 2 */ - outline: none; -} -/* - * Sub-object: `uk-nav-header` - */ -.uk-nav-dropdown .uk-nav-header { - color: #999999; -} -/* - * Sub-object: `uk-nav-divider` - */ -.uk-nav-dropdown .uk-nav-divider { - border-top: 1px solid #dddddd; -} -/* - * Nested items - */ -.uk-nav-dropdown ul a { - color: #0077dd; -} -.uk-nav-dropdown ul a:hover { - color: #005599; -} -/* Modifier `uk-nav-navbar` - ========================================================================== */ -/* - * Items - */ -.uk-nav-navbar > li > a { - color: #444444; -} -/* - * Hover - * 1. Apply hover style also to focus state - * 2. Remove default focus style - */ -.uk-nav-navbar > li > a:hover, -.uk-nav-navbar > li > a:focus { - background: #00a8e6; - color: #ffffff; - /* 2 */ - outline: none; -} -/* - * Sub-object: `uk-nav-header` - */ -.uk-nav-navbar .uk-nav-header { - color: #999999; -} -/* - * Sub-object: `uk-nav-divider` - */ -.uk-nav-navbar .uk-nav-divider { - border-top: 1px solid #dddddd; -} -/* - * Nested items - */ -.uk-nav-navbar ul a { - color: #0077dd; -} -.uk-nav-navbar ul a:hover { - color: #005599; -} -/* Modifier `uk-nav-offcanvas` - ========================================================================== */ -/* - * Items - */ -.uk-nav-offcanvas > li > a { - color: #cccccc; - padding: 10px 15px; -} -/* - * Hover - * No hover on touch devices because it behaves buggy in fixed offcanvas - * 1. Apply hover style also to focus state - * 2. Remove default focus style - */ -.uk-nav-offcanvas > .uk-open > a, -html:not(.uk-touch) .uk-nav-offcanvas > li > a:hover, -html:not(.uk-touch) .uk-nav-offcanvas > li > a:focus { - background: #404040; - color: #ffffff; - /* 2 */ - outline: none; -} -/* - * Active - * `html .uk-nav` needed for higher specificity to override hover - */ -html .uk-nav.uk-nav-offcanvas > li.uk-active > a { - background: #1a1a1a; - color: #ffffff; -} -/* - * Sub-object: `uk-nav-header` - */ -.uk-nav-offcanvas .uk-nav-header { - color: #777777; -} -/* - * Sub-object: `uk-nav-divider` - */ -.uk-nav-offcanvas .uk-nav-divider { - border-top: 1px solid #1a1a1a; -} -/* - * Nested items - * No hover on touch devices because it behaves buggy in fixed offcanvas - */ -.uk-nav-offcanvas ul a { - color: #cccccc; -} -html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { - color: #ffffff; -} -/* ======================================================================== - Component: Navbar - ========================================================================== */ -.uk-navbar { - background: #eeeeee; - color: #444444; -} -/* - * Micro clearfix - */ -.uk-navbar:before, -.uk-navbar:after { - content: " "; - display: table; -} -.uk-navbar:after { - clear: both; -} -/* Sub-object: `uk-navbar-nav` - ========================================================================== */ -.uk-navbar-nav { - margin: 0; - padding: 0; - list-style: none; - float: left; -} -/* - * 1. Create position context for dropdowns - */ -.uk-navbar-nav > li { - float: left; - /* 1 */ - position: relative; -} -/* - * 1. Dimensions - * 2. Style - */ -.uk-navbar-nav > li > a { - display: block; - -moz-box-sizing: border-box; - box-sizing: border-box; - text-decoration: none; - /* 1 */ - height: 40px; - padding: 0 15px; - line-height: 40px; - /* 2 */ - color: #444444; - font-size: 14px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-weight: normal; -} -/* Appear not as link */ -.uk-navbar-nav > li > a[href='#'] { - cursor: text; -} -/* - * Hover - * 1. Apply hover style also to focus state - * 2. Also apply if dropdown is opened - * 3. Remove default focus style - */ -.uk-navbar-nav > li:hover > a, -.uk-navbar-nav > li > a:focus, -.uk-navbar-nav > li.uk-open > a { - background-color: #f5f5f5; - color: #444444; - /* 3 */ - outline: none; -} -/* OnClick */ -.uk-navbar-nav > li > a:active { - background-color: #dddddd; - color: #444444; -} -/* Active */ -.uk-navbar-nav > li.uk-active > a { - background-color: #f5f5f5; - color: #444444; -} -/* Sub-objects: `uk-navbar-nav-subtitle` - ========================================================================== */ -.uk-navbar-nav .uk-navbar-nav-subtitle { - line-height: 28px; -} -.uk-navbar-nav-subtitle > div { - margin-top: -6px; - font-size: 10px; - line-height: 12px; -} -/* Sub-objects: `uk-navbar-content`, `uk-navbar-brand`, `uk-navbar-toggle` - ========================================================================== */ -/* - * Imitate navbar items - */ -.uk-navbar-content, -.uk-navbar-brand, -.uk-navbar-toggle { - -moz-box-sizing: border-box; - box-sizing: border-box; - display: block; - height: 40px; - padding: 0 15px; - float: left; -} -/* - * Helper to center all child elements vertically - */ -.uk-navbar-content:before, -.uk-navbar-brand:before, -.uk-navbar-toggle:before { - content: ''; - display: inline-block; - height: 100%; - vertical-align: middle; -} -/* Sub-objects: `uk-navbar-content` - ========================================================================== */ -/* - * Better sibling spacing - */ -.uk-navbar-content + .uk-navbar-content:not(.uk-navbar-center) { - padding-left: 0; -} -/* - * Link colors - */ -.uk-navbar-content > a:not([class]) { - color: #0077dd; -} -.uk-navbar-content > a:not([class]):hover { - color: #005599; -} -/* Sub-objects: `uk-navbar-brand` - ========================================================================== */ -.uk-navbar-brand { - font-size: 18px; - color: #444444; - text-decoration: none; -} -/* - * 1. Apply hover style also to focus state - * 2. Remove default focus style - */ -.uk-navbar-brand:hover, -.uk-navbar-brand:focus { - color: #444444; - text-decoration: none; - /* 2 */ - outline: none; -} -/* Sub-object: `uk-navbar-toggle` - ========================================================================== */ -.uk-navbar-toggle { - font-size: 18px; - color: #444444; - text-decoration: none; -} -/* - * 1. Apply hover style also to focus state - * 2. Remove default focus style - */ -.uk-navbar-toggle:hover, -.uk-navbar-toggle:focus { - color: #444444; - text-decoration: none; - /* 2 */ - outline: none; -} -/* - * 1. Center icon vertically - */ -.uk-navbar-toggle:after { - content: "\f0c9"; - font-family: FontAwesome; - /* 1 */ - vertical-align: middle; -} -.uk-navbar-toggle-alt:after { - content: "\f002"; -} -/* Sub-object: `uk-navbar-center` - ========================================================================== */ -/* - * The element with this class needs to be last child in the navbar - * 1. This hack is needed because other float elements shift centered text - */ -.uk-navbar-center { - float: none; - text-align: center; - /* 1 */ - max-width: 50%; - margin-left: auto; - margin-right: auto; -} -/* Sub-object: `uk-navbar-flip` - ========================================================================== */ -.uk-navbar-flip { - float: right; -} -/* ======================================================================== - Component: Subnav - ========================================================================== */ -/* - * 1. Remove default list style - * 2. Remove whitespace between child elements when using `inline-block` - */ -.uk-subnav { - /* 1 */ - padding: 0; - list-style: none; - /* 2 */ - font-size: 0.001px; -} -/* Items - ========================================================================== */ -/* - * 1. Create position context for dropdowns - * 2. Reset whitespace hack - */ -.uk-subnav > li { - /* 1 */ - position: relative; - /* 2 */ - font-size: 1rem; - vertical-align: top; -} -.uk-subnav > li, -.uk-subnav > li > a, -.uk-subnav > li > span { - display: inline-block; -} -.uk-subnav > li:nth-child(n+2) { - margin-left: 10px; -} -/* - * Items - */ -.uk-subnav > li > a { - color: #0077dd; -} -.uk-subnav > li > a:hover { - color: #005599; -} -/* - * Active - */ -/* - * Disabled - */ -.uk-subnav > li > span { - color: #999999; -} -/* Modifier: 'subnav-line' - ========================================================================== */ -.uk-subnav-line > li:nth-child(n+2):before { - content: ""; - display: inline-block; - height: 10px; - margin-right: 10px; - border-left: 1px solid #dddddd; -} -/* Modifier: 'subnav-pill' - ========================================================================== */ -.uk-subnav-pill > li > a, -.uk-subnav-pill > li > span { - padding: 3px 9px; - text-decoration: none; -} -/* - * Hover - * 1. Apply hover style also to focus state - * 2. Remove default focus style - */ -.uk-subnav-pill > li > a:hover, -.uk-subnav-pill > li > a:focus { - background: #eeeeee; - color: #444444; - /* 2 */ - outline: none; -} -/* - * Active - * `li` needed for higher specificity to override hover - */ -.uk-subnav-pill > li.uk-active > a { - background: #00a8e6; - color: #ffffff; -} -/* ======================================================================== - Component: Breadcrumb - ========================================================================== */ -/* - * 1. Remove default list style - * 2. Remove whitespace between child elements when using `inline-block` - */ -.uk-breadcrumb { - /* 1 */ - padding: 0; - list-style: none; - /* 2 */ - font-size: 0.001px; -} -/* Items - ========================================================================== */ -/* - * Reset whitespace hack - */ -.uk-breadcrumb > li { - font-size: 1rem; - vertical-align: top; -} -.uk-breadcrumb > li, -.uk-breadcrumb > li > a, -.uk-breadcrumb > li > span { - display: inline-block; -} -.uk-breadcrumb > li:nth-child(n+2):before { - content: "/"; - display: inline-block; - margin: 0 8px; -} -/* - * Disabled - */ -.uk-breadcrumb > li:not(.uk-active) > span { - color: #999999; -} -/* ======================================================================== - Component: Pagination - ========================================================================== */ -/* - * 1. Remove default list style - * 2. Center pagination by default - * 3. Remove whitespace between child elements when using `inline-block` - */ -.uk-pagination { - /* 1 */ - padding: 0; - list-style: none; - /* 2 */ - text-align: center; - /* 3 */ - font-size: 0.001px; -} -/* - * Micro clearfix - * Needed if `uk-pagination-previous` or `uk-pagination-next` sub-objects are used - */ -.uk-pagination:before, -.uk-pagination:after { - content: " "; - display: table; -} -.uk-pagination:after { - clear: both; -} -/* Items - ========================================================================== */ -/* - * 1. Reset whitespace hack - * 2. Remove the gap at the bottom of it container - */ -.uk-pagination > li { - display: inline-block; - /* 1 */ - font-size: 1rem; - /* 2 */ - vertical-align: top; -} -.uk-pagination > li:nth-child(n+2) { - margin-left: 5px; -} -/* - * 1. Makes pagination more robust against different box-sizing use - * 2. Reset text-align to center if alignment modifier is used - */ -.uk-pagination > li > a, -.uk-pagination > li > span { - display: inline-block; - min-width: 16px; - padding: 3px 5px; - line-height: 20px; - text-decoration: none; - /* 1 */ - -moz-box-sizing: content-box; - box-sizing: content-box; - /* 2 */ - text-align: center; -} -/* - * Links - */ -.uk-pagination > li > a { - background: #eeeeee; - color: #444444; -} -/* - * Hover - * 1. Apply hover style also to focus state - * 2. Remove default focus style - */ -.uk-pagination > li > a:hover, -.uk-pagination > li > a:focus { - background-color: #f5f5f5; - color: #444444; - /* 2 */ - outline: none; -} -/* OnClick */ -.uk-pagination > li > a:active { - background-color: #dddddd; - color: #444444; -} -/* - * Active - */ -.uk-pagination > .uk-active > span { - background: #00a8e6; - color: #ffffff; -} -/* - * Disabled - */ -.uk-pagination > .uk-disabled > span { - background-color: #f5f5f5; - color: #999999; -} -/* Previous and next navigation - ========================================================================== */ -.uk-pagination-previous { - float: left; -} -.uk-pagination-next { - float: right; -} -/* Alignment modifiers - ========================================================================== */ -.uk-pagination-left { - text-align: left; -} -.uk-pagination-right { - text-align: right; -} -/* ======================================================================== - Component: Tab - ========================================================================== */ -.uk-tab { - margin: 0; - padding: 0; - list-style: none; - border-bottom: 1px solid #dddddd; -} -/* - * Micro clearfix on the deepest container - */ -.uk-tab:before, -.uk-tab:after { - content: " "; - display: table; -} -.uk-tab:after { - clear: both; -} -/* - * Items - * 1. Create position context for dropdowns - */ -.uk-tab > li { - margin-bottom: -1px; - float: left; - /* 1 */ - position: relative; -} -.uk-tab > li > a { - display: block; - padding: 8px 12px 8px 12px; - border: 1px solid transparent; - border-bottom-width: 0; - color: #0077dd; - text-decoration: none; -} -.uk-tab > li:nth-child(n+2) > a { - margin-left: 5px; -} -/* - * Hover - * 1. Apply hover style also to focus state - * 2. Also apply if dropdown is opened - * 3. Remove default focus style - */ -.uk-tab > li > a:hover, -.uk-tab > li > a:focus, -.uk-tab > li.uk-open > a { - border-color: #f5f5f5; - background: #f5f5f5; - color: #005599; - /* 2 */ - outline: none; -} -.uk-tab > li:not(.uk-active) > a:hover, -.uk-tab > li:not(.uk-active) > a:focus, -.uk-tab > li.uk-open:not(.uk-active) > a { - margin-bottom: 1px; - padding-bottom: 7px; -} -/* Active */ -.uk-tab > li.uk-active > a { - border-color: #dddddd; - border-bottom-color: transparent; - background: #ffffff; - color: #444444; -} -/* Disabled */ -.uk-tab > li.uk-disabled > a { - color: #999999; - cursor: auto; -} -.uk-tab > li.uk-disabled > a:hover, -.uk-tab > li.uk-disabled > a:focus, -.uk-tab > li.uk-disabled.uk-active > a { - background: none; - border-color: transparent; -} -/* Modifier: 'tab-flip' - ========================================================================== */ -.uk-tab-flip > li { - float: right; -} -.uk-tab-flip > li:nth-child(n+2) > a { - margin-left: 0; - margin-right: 5px; -} -/* Modifier: 'tab-responsive' - ========================================================================== */ -.uk-tab > li.uk-tab-responsive > a { - margin-left: 0; - margin-right: 0; -} -/* - * Icon - */ -.uk-tab-responsive > a:before { - content: "\f0c9\00a0"; - font-family: FontAwesome; -} -/* Modifier: 'tab-center' - ========================================================================== */ -.uk-tab-center { - border-bottom: 1px solid #dddddd; -} -.uk-tab-center-bottom { - border-bottom: none; - border-top: 1px solid #dddddd; -} -.uk-tab-center:before, -.uk-tab-center:after { - content: " "; - display: table; -} -.uk-tab-center:after { - clear: both; -} -/* - * 1. Using `right` to prevent vertical scrollbar caused by centering if to many tabs - */ -.uk-tab-center .uk-tab { - position: relative; - right: 50%; - border: none; - float: right; -} -.uk-tab-center .uk-tab > li { - position: relative; - right: -50%; -} -.uk-tab-center .uk-tab > li > a { - text-align: center; -} -/* Modifier: 'tab-bottom' - ========================================================================== */ -.uk-tab-bottom { - border-top: 1px solid #dddddd; - border-bottom: none; -} -.uk-tab-bottom > li { - margin-top: -1px; - margin-bottom: 0; -} -.uk-tab-bottom > li > a { - padding-top: 8px; - padding-bottom: 8px; - border-bottom-width: 1px; - border-top-width: 0; -} -.uk-tab-bottom > li:not(.uk-active) > a:hover, -.uk-tab-bottom > li:not(.uk-active) > a:focus, -.uk-tab-bottom > li.uk-open:not(.uk-active) > a { - margin-bottom: 0; - margin-top: 1px; - padding-bottom: 8px; - padding-top: 7px; -} -.uk-tab-bottom > li.uk-active > a { - border-top-color: transparent; - border-bottom-color: #dddddd; -} -/* Modifier: 'tab-grid' - ========================================================================== */ -/* - * 1. Create position context to prevent hidden border because of negative `z-index` - */ -.uk-tab-grid { - margin-left: -5px; - border-bottom: none; - /* 1 */ - position: relative; - z-index: 0; -} -.uk-tab-grid:before { - display: block; - position: absolute; - left: 5px; - right: 0; - bottom: -1px; - border-top: 1px solid #dddddd; - /* 1 */ - z-index: -1; -} -.uk-tab-grid > li:first-child > a { - margin-left: 5px; -} -.uk-tab-grid > li > a { - text-align: center; -} -/* - * If `uk-tab-bottom` - */ -.uk-tab-grid.uk-tab-bottom { - border-top: none; -} -.uk-tab-grid.uk-tab-bottom:before { - top: -1px; - bottom: auto; -} -/* Modifier: 'tab-left', 'tab-right' - ========================================================================== */ -/* Tablet and bigger */ -@media (min-width: 768px) { - .uk-tab-left, - .uk-tab-right { - border-bottom: none; - } - .uk-tab-left > li, - .uk-tab-right > li { - margin-bottom: 0; - float: none; - } - .uk-tab-left > li > a, - .uk-tab-right > li > a { - padding-top: 8px; - padding-bottom: 8px; - } - .uk-tab-left > li:nth-child(n+2) > a, - .uk-tab-right > li:nth-child(n+2) > a { - margin-left: 0; - margin-top: 5px; - } - .uk-tab-left > li.uk-active > a, - .uk-tab-right > li.uk-active > a { - border-color: #dddddd; - } - /* - * Modifier: 'tab-left' - */ - .uk-tab-left { - border-right: 1px solid #dddddd; - } - .uk-tab-left > li { - margin-right: -1px; - } - .uk-tab-left > li > a { - border-bottom-width: 1px; - border-right-width: 0; - } - .uk-tab-left > li:not(.uk-active) > a:hover, - .uk-tab-left > li:not(.uk-active) > a:focus { - margin-bottom: 0; - margin-right: 1px; - padding-bottom: 8px; - padding-right: 11px; - } - .uk-tab-left > li.uk-active > a { - border-right-color: transparent; - } - /* - * Modifier: 'tab-right' - */ - .uk-tab-right { - border-left: 1px solid #dddddd; - } - .uk-tab-right > li { - margin-left: -1px; - } - .uk-tab-right > li > a { - border-bottom-width: 1px; - border-left-width: 0; - } - .uk-tab-right > li:not(.uk-active) > a:hover, - .uk-tab-right > li:not(.uk-active) > a:focus { - margin-bottom: 0; - margin-left: 1px; - padding-bottom: 8px; - padding-left: 11px; - } - .uk-tab-right > li.uk-active > a { - border-left-color: transparent; - } -} -/* ======================================================================== - Component: List - ========================================================================== */ -.uk-list { - padding: 0; - list-style: none; -} -/* - * Micro clearfix to make list more robust - */ -.uk-list > li:before, -.uk-list > li:after { - content: " "; - display: table; -} -.uk-list > li:after { - clear: both; -} -/* - * Remove margin from the last-child - */ -.uk-list > li > :last-child { - margin-bottom: 0; -} -/* - * Nested lists - */ -.uk-list ul { - margin: 0; - padding-left: 20px; - list-style: none; -} -/* Modifier: `uk-list-line` - ========================================================================== */ -.uk-list-line > li:nth-child(n+2) { - margin-top: 5px; - padding-top: 5px; - border-top: 1px solid #dddddd; -} -/* Modifier: `uk-list-striped` - ========================================================================== */ -.uk-list-striped > li { - padding: 5px 5px; -} -.uk-list-striped > li:nth-of-type(odd) { - background: #f5f5f5; -} -/* Modifier: `uk-list-space` - ========================================================================== */ -.uk-list-space > li:nth-child(n+2) { - margin-top: 10px; -} -/* ======================================================================== - Component: Description list - ========================================================================== */ -/* Modifier: `uk-description-list-horizontal` - ========================================================================== */ -/* Tablet and bigger */ -@media (min-width: 768px) { - .uk-description-list-horizontal { - overflow: hidden; - } - .uk-description-list-horizontal > dt { - width: 160px; - float: left; - clear: both; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .uk-description-list-horizontal > dd { - margin-left: 180px; - } -} -/* Modifier: `uk-description-list-line` - ========================================================================== */ -.uk-description-list-line > dt { - font-weight: normal; -} -.uk-description-list-line > dt:nth-child(n+2) { - margin-top: 5px; - padding-top: 5px; - border-top: 1px solid #dddddd; -} -.uk-description-list-line > dd { - color: #999999; -} -/* ======================================================================== - Component: Table - ========================================================================== */ -/* - * 1. Remove most spacing between table cells. - * 2. Block element behavior - * 3. Style - */ -.uk-table { - /* 1 */ - border-collapse: collapse; - border-spacing: 0; - /* 2 */ - width: 100%; - /* 3 */ - margin-bottom: 15px; -} -/* - * Add margin if adjacent element - */ -* + .uk-table { - margin-top: 15px; -} -.uk-table th, -.uk-table td { - padding: 8px 8px; -} -/* - * Set alignment - */ -.uk-table th { - text-align: left; -} -.uk-table td { - vertical-align: top; -} -.uk-table thead th { - vertical-align: bottom; -} -/* - * Caption and footer - */ -.uk-table caption, -.uk-table tfoot { - font-size: 12px; - font-style: italic; -} -.uk-table caption { - text-align: left; - color: #999999; -} -/* Sub-modifier: `uk-table-middle` - ========================================================================== */ -.uk-table-middle, -.uk-table-middle td { - vertical-align: middle !important; -} -/* Modifier: `uk-table-striped` - ========================================================================== */ -.uk-table-striped tbody tr:nth-of-type(odd) { - background: #f5f5f5; -} -/* Modifier: `uk-table-condensed` - ========================================================================== */ -.uk-table-condensed td { - padding: 4px 8px; -} -/* Modifier: `uk-table-hover` - ========================================================================== */ -.uk-table-hover tbody tr:hover { - background: #eeeeee; -} -/* ======================================================================== - Component: Form - ========================================================================== */ -/* - * 1. Define consistent box sizing. - * Default is `content-box` with following exceptions set to `border-box` - * `button`, `select`, `input[type="checkbox"]` and `input[type="radio"]` - * `input[type="search"]` in Chrome, Safari and Opera - * `input[type="color"]` in Firefox - * 2. Address margins set differently in Firefox/IE and Chrome/Safari/Opera. - * 3. Remove `border-radius` in iOS. - * 4. Correct `font` properties and `color` not being inherited. - */ -.uk-form input, -.uk-form select, -.uk-form textarea { - /* 1 */ - -moz-box-sizing: border-box; - box-sizing: border-box; - /* 2 */ - margin: 0; - /* 3 */ - border-radius: 0; - /* 4 */ - font: inherit; - color: inherit; -} -/* - * Address inconsistent `text-transform` inheritance which is only inherit in Firefox - */ -.uk-form select { - text-transform: none; -} -/* - * 1. Correct `font` properties not being inherited. - * 2. Don't inherit the `font-weight` and use `bold` instead. - * NOTE: Both declarations don't work in Chrome, Safari and Opera. - */ -.uk-form optgroup { - /* 1 */ - font: inherit; - /* 2 */ - font-weight: bold; -} -/* - * Removes inner padding and border in Firefox 4+. - */ -.uk-form input::-moz-focus-inner { - border: 0; - padding: 0; -} -/* - * Removes excess padding in IE 8/9/10. - */ -.uk-form input[type="checkbox"], -.uk-form input[type="radio"] { - padding: 0; -} -/* - * Improves consistency of cursor style for clickable elements - */ -.uk-form input[type="checkbox"]:not(:disabled), -.uk-form input[type="radio"]:not(:disabled) { - cursor: pointer; -} -/* - * Remove default style in iOS. - */ -.uk-form textarea, -.uk-form input:not([type]), -.uk-form input[type="text"], -.uk-form input[type="password"], -.uk-form input[type="email"], -.uk-form input[type="url"], -.uk-form input[type="search"], -.uk-form input[type="tel"], -.uk-form input[type="number"], -.uk-form input[type="datetime"] { - -webkit-appearance: none; -} -/* - * Remove inner padding and search cancel button in Chrome, Safari and Opera on OS X. - */ -.uk-form input[type="search"]::-webkit-search-cancel-button, -.uk-form input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -/* - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. - */ -.uk-form input[type="number"]::-webkit-inner-spin-button, -.uk-form input[type="number"]::-webkit-outer-spin-button { - height: auto; -} -/* - * Define consistent border, margin, and padding. - */ -.uk-form fieldset { - border: none; - margin: 0; - padding: 0; -} -/* - * 1. Remove default vertical scrollbar in IE 8/9/10/11. - * 2. Improve readability and alignment in all browsers. - */ -.uk-form textarea { - /* 1 */ - overflow: auto; - /* 2 */ - vertical-align: top; -} -/* - * Removes placeholder transparency in Firefox. - */ -.uk-form ::-moz-placeholder { - opacity: 1; -} -/* - * Removes `box-shadow` for invalid controls in Firefox. - */ -.uk-form :invalid { - box-shadow: none; -} -/* - * Vertical alignment - */ -.uk-form input:not([type="radio"]):not([type="checkbox"]), -.uk-form select { - vertical-align: middle; -} -/* Style - ========================================================================== */ -/* - * Remove margin from the last-child - */ -.uk-form > :last-child { - margin-bottom: 0; -} -/* - * Controls - * Except for `range`, `radio`, `checkbox`, `file`, `submit`, `reset`, `button` and `image` - * 1. Must be `height` because `min-height` is not working in OSX - * 2. Responsiveness: Sets a maximum width relative to the parent to scale on narrower viewports - * 3. Vertical `padding` needed for `select` elements in Firefox - * 4. Style - */ -.uk-form select, -.uk-form textarea, -.uk-form input:not([type]), -.uk-form input[type="text"], -.uk-form input[type="password"], -.uk-form input[type="datetime"], -.uk-form input[type="datetime-local"], -.uk-form input[type="date"], -.uk-form input[type="month"], -.uk-form input[type="time"], -.uk-form input[type="week"], -.uk-form input[type="number"], -.uk-form input[type="email"], -.uk-form input[type="url"], -.uk-form input[type="search"], -.uk-form input[type="tel"], -.uk-form input[type="color"] { - /* 1 */ - height: 30px; - /* 2 */ - max-width: 100%; - /* 3 */ - padding: 4px 6px; - /* 4 */ - border: 1px solid #dddddd; - background: #ffffff; - color: #444444; - -webkit-transition: all linear 0.2s; - transition: all linear 0.2s; -} -.uk-form select:focus, -.uk-form textarea:focus, -.uk-form input:not([type]):focus, -.uk-form input[type="text"]:focus, -.uk-form input[type="password"]:focus, -.uk-form input[type="datetime"]:focus, -.uk-form input[type="datetime-local"]:focus, -.uk-form input[type="date"]:focus, -.uk-form input[type="month"]:focus, -.uk-form input[type="time"]:focus, -.uk-form input[type="week"]:focus, -.uk-form input[type="number"]:focus, -.uk-form input[type="email"]:focus, -.uk-form input[type="url"]:focus, -.uk-form input[type="search"]:focus, -.uk-form input[type="tel"]:focus, -.uk-form input[type="color"]:focus { - border-color: #99baca; - outline: 0; - background: #f5fbfe; - color: #444444; -} -.uk-form select:disabled, -.uk-form textarea:disabled, -.uk-form input:not([type]):disabled, -.uk-form input[type="text"]:disabled, -.uk-form input[type="password"]:disabled, -.uk-form input[type="datetime"]:disabled, -.uk-form input[type="datetime-local"]:disabled, -.uk-form input[type="date"]:disabled, -.uk-form input[type="month"]:disabled, -.uk-form input[type="time"]:disabled, -.uk-form input[type="week"]:disabled, -.uk-form input[type="number"]:disabled, -.uk-form input[type="email"]:disabled, -.uk-form input[type="url"]:disabled, -.uk-form input[type="search"]:disabled, -.uk-form input[type="tel"]:disabled, -.uk-form input[type="color"]:disabled { - border-color: #dddddd; - background-color: #f5f5f5; - color: #999999; -} -/* - * Placeholder - */ -.uk-form :-ms-input-placeholder { - color: #999999 !important; -} -.uk-form ::-moz-placeholder { - color: #999999; -} -.uk-form ::-webkit-input-placeholder { - color: #999999; -} -.uk-form :disabled:-ms-input-placeholder { - color: #999999 !important; -} -.uk-form :disabled::-moz-placeholder { - color: #999999; -} -.uk-form :disabled::-webkit-input-placeholder { - color: #999999; -} -/* - * Legend - * 1. Behave like block element - * 2. Correct `color` not being inherited in IE 8/9/10/11. - * 3. Remove padding - * 4. `margin-bottom` is not working in Safari and Opera. - * Using `padding` and :after instead to create the border - * 5. Style - */ -.uk-form legend { - /* 1 */ - width: 100%; - /* 2 */ - border: 0; - /* 3 */ - padding: 0; - /* 4 */ - padding-bottom: 15px; - /* 5 */ - font-size: 18px; - line-height: 30px; -} -/* 4 */ -.uk-form legend:after { - content: ""; - display: block; - border-bottom: 1px solid #dddddd; -} -/* Size modifiers - * Higher specificity needed to override defaults - ========================================================================== */ -select.uk-form-small, -textarea.uk-form-small, -input[type].uk-form-small, -input:not([type]).uk-form-small { - height: 25px; - padding: 3px 3px; - font-size: 12px; -} -select.uk-form-large, -textarea.uk-form-large, -input[type].uk-form-large, -input:not([type]).uk-form-large { - height: 40px; - padding: 8px 6px; - font-size: 16px; -} -/* Reset height - * Must be after size modifiers - ========================================================================== */ -.uk-form textarea, -.uk-form select[multiple], -.uk-form select[size] { - height: auto; -} -/* Validation states - * Using !important to keep the selector simple - ========================================================================== */ -/* - * Error state - */ -.uk-form-danger { - border-color: #dc8d99 !important; - background: #fff7f8 !important; - color: #c91032 !important; -} -/* - * Success state - */ -.uk-form-success { - border-color: #8ec73b !important; - background: #fafff2 !important; - color: #539022 !important; -} -/* Style modifiers - * Using !important to keep the selector simple - ========================================================================== */ -/* - * Blank form - */ -.uk-form-blank { - border-color: transparent !important; - border-style: dashed !important; - background: none !important; -} -.uk-form-blank:focus { - border-color: #dddddd !important; -} -/* Size sub-modifiers - ========================================================================== */ -/* - * Fixed widths - * Different widths for mini sized `input` and `select` elements - */ -input.uk-form-width-mini { - width: 40px; -} -select.uk-form-width-mini { - width: 65px; -} -.uk-form-width-small { - width: 130px; -} -.uk-form-width-medium { - width: 200px; -} -.uk-form-width-large { - width: 500px; -} -/* Sub-objects: `uk-form-row` - * Groups labels and controls in rows - ========================================================================== */ -/* - * Micro clearfix - * Needed for `uk-form-horizontal` modifier - */ -.uk-form-row:before, -.uk-form-row:after { - content: " "; - display: table; -} -.uk-form-row:after { - clear: both; -} -/* - * Vertical gutter - */ -.uk-form-row + .uk-form-row { - margin-top: 15px; -} -/* Help text - * Sub-object: `uk-form-help-inline`, `uk-form-help-block` - ========================================================================== */ -.uk-form-help-inline { - display: inline-block; - margin: 0 0 0 10px; -} -.uk-form-help-block { - margin: 5px 0 0 0; -} -/* Controls content - * Sub-object: `uk-form-controls`, `uk-form-controls-condensed` - ========================================================================== */ -/* - * Remove margins - */ -.uk-form-controls > :first-child { - margin-top: 0; -} -.uk-form-controls > :last-child { - margin-bottom: 0; -} -/* - * Group controls and text into blocks with a small spacing between blocks - */ -.uk-form-controls-condensed { - margin: 5px 0; -} -/* Modifier: `uk-form-stacked` - * Requires sub-object: `uk-form-label` - ========================================================================== */ -.uk-form-stacked .uk-form-label { - display: block; - margin-bottom: 5px; - font-weight: bold; -} -/* Modifier: `uk-form-horizontal` - * Requires sub-objects: `uk-form-label`, `uk-form-controls` - ========================================================================== */ -/* Tablet portrait and smaller */ -@media (max-width: 959px) { - /* Behave like `uk-form-stacked` */ - .uk-form-horizontal .uk-form-label { - display: block; - margin-bottom: 5px; - font-weight: bold; - } -} -/* Desktop and bigger */ -@media (min-width: 960px) { - .uk-form-horizontal .uk-form-label { - width: 200px; - margin-top: 5px; - float: left; - } - .uk-form-horizontal .uk-form-controls { - margin-left: 215px; - } - /* Better vertical alignment if controls are checkboxes and radio buttons with text */ - .uk-form-horizontal .uk-form-controls-text { - padding-top: 5px; - } -} -/* Sub-object: `uk-form-icon` - ========================================================================== */ -/* - * 1. Container width fits its content - * 2. Create position context - * 3. Prevent `inline-block` consequences - */ -.uk-form-icon { - /* 1 */ - display: inline-block; - /* 2 */ - position: relative; - /* 3 */ - max-width: 100%; -} -/* - * 1. Make form element clickable through icon - */ -.uk-form-icon > [class*='uk-icon-'] { - position: absolute; - top: 50%; - width: 30px; - margin-top: -7px; - font-size: 14px; - color: #999999; - text-align: center; - /* 1 */ - pointer-events: none; -} -.uk-form-icon:not(.uk-form-icon-flip) > input { - padding-left: 30px !important; -} -/* - * Sub-modifier: `uk-form-icon-flip` - */ -.uk-form-icon-flip > [class*='uk-icon-'] { - right: 0; -} -.uk-form-icon-flip > input { - padding-right: 30px !important; -} -/* ======================================================================== - Component: Button - ========================================================================== */ -/* - * Removes inner padding and border in Firefox 4+. - */ -.uk-button::-moz-focus-inner { - border: 0; - padding: 0; -} -/* - * 1. Correct inability to style clickable `input` types in iOS. - * 2. Remove margins in Chrome, Safari and Opera. - * 3. Remove borders for `button`. - * 4. Address `overflow` set to `hidden` in IE 8/9/10/11. - * 5. Correct `font` properties and `color` not being inherited for `button`. - * 6. Address inconsistent `text-transform` inheritance which is only inherit in Firefox and IE - * 7. Style - * 8. `line-height` is used to create a height - * 9. `min-height` is necessary for `input` elements in Firefox and Opera because `line-height` is not working. - * 10. Reset button group whitespace hack - * 11. Required for `a`. - */ -.uk-button { - /* 1 */ - -webkit-appearance: none; - /* 2 */ - margin: 0; - /* 3 */ - border: none; - /* 4 */ - overflow: visible; - /* 5 */ - font: inherit; - color: #444444; - /* 6 */ - text-transform: none; - /* 7 */ - display: inline-block; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0 12px; - background: #eeeeee; - vertical-align: middle; - /* 8 */ - line-height: 30px; - /* 9 */ - min-height: 30px; - /* 10 */ - font-size: 1rem; - /* 11 */ - text-decoration: none; - text-align: center; -} -.uk-button:not(:disabled) { - cursor: pointer; -} -/* - * Hover - * 1. Apply hover style also to focus state - * 2. Remove default focus style - * 3. Required for `a` elements - */ -.uk-button:hover, -.uk-button:focus { - background-color: #f5f5f5; - color: #444444; - /* 2 */ - outline: none; - /* 3 */ - text-decoration: none; -} -/* Active */ -.uk-button:active, -.uk-button.uk-active { - background-color: #dddddd; - color: #444444; -} -/* Color modifiers - ========================================================================== */ -/* - * Modifier: `uk-button-primary` - */ -.uk-button-primary { - background-color: #00a8e6; - color: #ffffff; -} -/* Hover */ -.uk-button-primary:hover, -.uk-button-primary:focus { - background-color: #35b3ee; - color: #ffffff; -} -/* Active */ -.uk-button-primary:active, -.uk-button-primary.uk-active { - background-color: #0091ca; - color: #ffffff; -} -/* - * Modifier: `uk-button-success` - */ -.uk-button-success { - background-color: #8cc14c; - color: #ffffff; -} -/* Hover */ -.uk-button-success:hover, -.uk-button-success:focus { - background-color: #8ec73b; - color: #ffffff; -} -/* Active */ -.uk-button-success:active, -.uk-button-success.uk-active { - background-color: #72ae41; - color: #ffffff; -} -/* - * Modifier: `uk-button-danger` - */ -.uk-button-danger { - background-color: #da314b; - color: #ffffff; -} -/* Hover */ -.uk-button-danger:hover, -.uk-button-danger:focus { - background-color: #e4354f; - color: #ffffff; -} -/* Active */ -.uk-button-danger:active, -.uk-button-danger.uk-active { - background-color: #c91032; - color: #ffffff; -} -/* Disabled state - * Overrides also the color modifiers - ========================================================================== */ -/* Equal for all button types */ -.uk-button:disabled { - background-color: #f5f5f5; - color: #999999; -} -/* Modifier: `uk-button-link` - ========================================================================== */ -/* Reset */ -.uk-button-link, -.uk-button-link:hover, -.uk-button-link:focus, -.uk-button-link:active, -.uk-button-link.uk-active, -.uk-button-link:disabled { - border-color: transparent; - background: none; -} -/* Color */ -.uk-button-link { - color: #0077dd; -} -.uk-button-link:hover, -.uk-button-link:focus, -.uk-button-link:active, -.uk-button-link.uk-active { - color: #005599; - text-decoration: underline; -} -.uk-button-link:disabled { - color: #999999; -} -/* Focus */ -.uk-button-link:focus { - outline: 1px dotted; -} -/* Size modifiers - ========================================================================== */ -.uk-button-mini { - min-height: 20px; - padding: 0 6px; - line-height: 20px; - font-size: 11px; -} -.uk-button-small { - min-height: 25px; - padding: 0 10px; - line-height: 25px; - font-size: 12px; -} -.uk-button-large { - min-height: 40px; - padding: 0 15px; - line-height: 40px; - font-size: 16px; -} -/* Sub-object `uk-button-group` - ========================================================================== */ -/* - * 1. Behave like buttons - * 2. Create position context for dropdowns - * 3. Remove whitespace between child elements when using `inline-block` - * 4. Prevent buttons from wrapping - * 5. Remove whitespace between child elements when using `inline-block` - */ -.uk-button-group { - /* 1 */ - display: inline-block; - vertical-align: middle; - /* 2 */ - position: relative; - /* 3 */ - font-size: 0.001px; - /* 4 */ - white-space: nowrap; -} -.uk-button-group > * { - display: inline-block; -} -/* 5 */ -.uk-button-group .uk-button { - vertical-align: top; -} -/* Sub-object: `uk-button-dropdown` - ========================================================================== */ -/* - * 1. Behave like buttons - * 2. Create position context for dropdowns - */ -.uk-button-dropdown { - /* 1 */ - display: inline-block; - vertical-align: middle; - /* 2 */ - position: relative; -} -/* ======================================================================== - Component: Icon - ========================================================================== */ -@font-face { - font-family: 'FontAwesome'; - src: url("../fonts/fontawesome-webfont.eot"); - src: url("../fonts/fontawesome-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff") format("woff"), url("../fonts/fontawesome-webfont.ttf") format("truetype"); - font-weight: normal; - font-style: normal; -} -/* - * 1. Allow margin - * 2. Prevent inherit font style - * 4. Correct line-height - * 5. Better font rendering - */ -[class*='uk-icon-'] { - font-family: FontAwesome; - /* 1 */ - display: inline-block; - /* 2 */ - font-weight: normal; - font-style: normal; - /* 4 */ - line-height: 1; - /* 5 */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -/* Size modifiers - ========================================================================== */ -.uk-icon-small:before { - font-size: 150%; - vertical-align: -10%; -} -.uk-icon-medium:before { - font-size: 200%; - vertical-align: -16%; -} -.uk-icon-large:before { - font-size: 250%; - vertical-align: -22%; -} -/* Modifier: `uk-icon-spin` - ========================================================================== */ -.uk-icon-spin { - display: inline-block; - -webkit-animation: uk-rotate 2s infinite linear; - animation: uk-rotate 2s infinite linear; -} -/* Modifier: `uk-icon-button` - ========================================================================== */ -.uk-icon-button { - -moz-box-sizing: border-box; - box-sizing: border-box; - display: inline-block; - width: 35px; - height: 35px; - border-radius: 100%; - background: #eeeeee; - line-height: 35px; - color: #444444; - font-size: 18px; - text-align: center; -} -/* - * Hover - * 1. Apply hover style also to focus state - * 2. Remove default focus style - */ -.uk-icon-button:hover, -.uk-icon-button:focus { - background-color: #f5f5f5; - color: #444444; - text-decoration: none; - /* 2 */ - outline: none; -} -/* Active */ -.uk-icon-button:active { - background-color: #dddddd; - color: #444444; -} -/* Icon mapping - ========================================================================== */ -.uk-icon-glass:before { - content: "\f000"; -} -.uk-icon-music:before { - content: "\f001"; -} -.uk-icon-search:before { - content: "\f002"; -} -.uk-icon-envelope-o:before { - content: "\f003"; -} -.uk-icon-heart:before { - content: "\f004"; -} -.uk-icon-star:before { - content: "\f005"; -} -.uk-icon-star-o:before { - content: "\f006"; -} -.uk-icon-user:before { - content: "\f007"; -} -.uk-icon-film:before { - content: "\f008"; -} -.uk-icon-th-large:before { - content: "\f009"; -} -.uk-icon-th:before { - content: "\f00a"; -} -.uk-icon-th-list:before { - content: "\f00b"; -} -.uk-icon-check:before { - content: "\f00c"; -} -.uk-icon-remove:before, -.uk-icon-close:before, -.uk-icon-times:before { - content: "\f00d"; -} -.uk-icon-search-plus:before { - content: "\f00e"; -} -.uk-icon-search-minus:before { - content: "\f010"; -} -.uk-icon-power-off:before { - content: "\f011"; -} -.uk-icon-signal:before { - content: "\f012"; -} -.uk-icon-gear:before, -.uk-icon-cog:before { - content: "\f013"; -} -.uk-icon-trash-o:before { - content: "\f014"; -} -.uk-icon-home:before { - content: "\f015"; -} -.uk-icon-file-o:before { - content: "\f016"; -} -.uk-icon-clock-o:before { - content: "\f017"; -} -.uk-icon-road:before { - content: "\f018"; -} -.uk-icon-download:before { - content: "\f019"; -} -.uk-icon-arrow-circle-o-down:before { - content: "\f01a"; -} -.uk-icon-arrow-circle-o-up:before { - content: "\f01b"; -} -.uk-icon-inbox:before { - content: "\f01c"; -} -.uk-icon-play-circle-o:before { - content: "\f01d"; -} -.uk-icon-rotate-right:before, -.uk-icon-repeat:before { - content: "\f01e"; -} -.uk-icon-refresh:before { - content: "\f021"; -} -.uk-icon-list-alt:before { - content: "\f022"; -} -.uk-icon-lock:before { - content: "\f023"; -} -.uk-icon-flag:before { - content: "\f024"; -} -.uk-icon-headphones:before { - content: "\f025"; -} -.uk-icon-volume-off:before { - content: "\f026"; -} -.uk-icon-volume-down:before { - content: "\f027"; -} -.uk-icon-volume-up:before { - content: "\f028"; -} -.uk-icon-qrcode:before { - content: "\f029"; -} -.uk-icon-barcode:before { - content: "\f02a"; -} -.uk-icon-tag:before { - content: "\f02b"; -} -.uk-icon-tags:before { - content: "\f02c"; -} -.uk-icon-book:before { - content: "\f02d"; -} -.uk-icon-bookmark:before { - content: "\f02e"; -} -.uk-icon-print:before { - content: "\f02f"; -} -.uk-icon-camera:before { - content: "\f030"; -} -.uk-icon-font:before { - content: "\f031"; -} -.uk-icon-bold:before { - content: "\f032"; -} -.uk-icon-italic:before { - content: "\f033"; -} -.uk-icon-text-height:before { - content: "\f034"; -} -.uk-icon-text-width:before { - content: "\f035"; -} -.uk-icon-align-left:before { - content: "\f036"; -} -.uk-icon-align-center:before { - content: "\f037"; -} -.uk-icon-align-right:before { - content: "\f038"; -} -.uk-icon-align-justify:before { - content: "\f039"; -} -.uk-icon-list:before { - content: "\f03a"; -} -.uk-icon-dedent:before, -.uk-icon-outdent:before { - content: "\f03b"; -} -.uk-icon-indent:before { - content: "\f03c"; -} -.uk-icon-video-camera:before { - content: "\f03d"; -} -.uk-icon-photo:before, -.uk-icon-image:before, -.uk-icon-picture-o:before { - content: "\f03e"; -} -.uk-icon-pencil:before { - content: "\f040"; -} -.uk-icon-map-marker:before { - content: "\f041"; -} -.uk-icon-adjust:before { - content: "\f042"; -} -.uk-icon-tint:before { - content: "\f043"; -} -.uk-icon-edit:before, -.uk-icon-pencil-square-o:before { - content: "\f044"; -} -.uk-icon-share-square-o:before { - content: "\f045"; -} -.uk-icon-check-square-o:before { - content: "\f046"; -} -.uk-icon-arrows:before { - content: "\f047"; -} -.uk-icon-step-backward:before { - content: "\f048"; -} -.uk-icon-fast-backward:before { - content: "\f049"; -} -.uk-icon-backward:before { - content: "\f04a"; -} -.uk-icon-play:before { - content: "\f04b"; -} -.uk-icon-pause:before { - content: "\f04c"; -} -.uk-icon-stop:before { - content: "\f04d"; -} -.uk-icon-forward:before { - content: "\f04e"; -} -.uk-icon-fast-forward:before { - content: "\f050"; -} -.uk-icon-step-forward:before { - content: "\f051"; -} -.uk-icon-eject:before { - content: "\f052"; -} -.uk-icon-chevron-left:before { - content: "\f053"; -} -.uk-icon-chevron-right:before { - content: "\f054"; -} -.uk-icon-plus-circle:before { - content: "\f055"; -} -.uk-icon-minus-circle:before { - content: "\f056"; -} -.uk-icon-times-circle:before { - content: "\f057"; -} -.uk-icon-check-circle:before { - content: "\f058"; -} -.uk-icon-question-circle:before { - content: "\f059"; -} -.uk-icon-info-circle:before { - content: "\f05a"; -} -.uk-icon-crosshairs:before { - content: "\f05b"; -} -.uk-icon-times-circle-o:before { - content: "\f05c"; -} -.uk-icon-check-circle-o:before { - content: "\f05d"; -} -.uk-icon-ban:before { - content: "\f05e"; -} -.uk-icon-arrow-left:before { - content: "\f060"; -} -.uk-icon-arrow-right:before { - content: "\f061"; -} -.uk-icon-arrow-up:before { - content: "\f062"; -} -.uk-icon-arrow-down:before { - content: "\f063"; -} -.uk-icon-mail-forward:before, -.uk-icon-share:before { - content: "\f064"; -} -.uk-icon-expand:before { - content: "\f065"; -} -.uk-icon-compress:before { - content: "\f066"; -} -.uk-icon-plus:before { - content: "\f067"; -} -.uk-icon-minus:before { - content: "\f068"; -} -.uk-icon-asterisk:before { - content: "\f069"; -} -.uk-icon-exclamation-circle:before { - content: "\f06a"; -} -.uk-icon-gift:before { - content: "\f06b"; -} -.uk-icon-leaf:before { - content: "\f06c"; -} -.uk-icon-fire:before { - content: "\f06d"; -} -.uk-icon-eye:before { - content: "\f06e"; -} -.uk-icon-eye-slash:before { - content: "\f070"; -} -.uk-icon-warning:before, -.uk-icon-exclamation-triangle:before { - content: "\f071"; -} -.uk-icon-plane:before { - content: "\f072"; -} -.uk-icon-calendar:before { - content: "\f073"; -} -.uk-icon-random:before { - content: "\f074"; -} -.uk-icon-comment:before { - content: "\f075"; -} -.uk-icon-magnet:before { - content: "\f076"; -} -.uk-icon-chevron-up:before { - content: "\f077"; -} -.uk-icon-chevron-down:before { - content: "\f078"; -} -.uk-icon-retweet:before { - content: "\f079"; -} -.uk-icon-shopping-cart:before { - content: "\f07a"; -} -.uk-icon-folder:before { - content: "\f07b"; -} -.uk-icon-folder-open:before { - content: "\f07c"; -} -.uk-icon-arrows-v:before { - content: "\f07d"; -} -.uk-icon-arrows-h:before { - content: "\f07e"; -} -.uk-icon-bar-chart-o:before, -.uk-icon-bar-chart:before { - content: "\f080"; -} -.uk-icon-twitter-square:before { - content: "\f081"; -} -.uk-icon-facebook-square:before { - content: "\f082"; -} -.uk-icon-camera-retro:before { - content: "\f083"; -} -.uk-icon-key:before { - content: "\f084"; -} -.uk-icon-gears:before, -.uk-icon-cogs:before { - content: "\f085"; -} -.uk-icon-comments:before { - content: "\f086"; -} -.uk-icon-thumbs-o-up:before { - content: "\f087"; -} -.uk-icon-thumbs-o-down:before { - content: "\f088"; -} -.uk-icon-star-half:before { - content: "\f089"; -} -.uk-icon-heart-o:before { - content: "\f08a"; -} -.uk-icon-sign-out:before { - content: "\f08b"; -} -.uk-icon-linkedin-square:before { - content: "\f08c"; -} -.uk-icon-thumb-tack:before { - content: "\f08d"; -} -.uk-icon-external-link:before { - content: "\f08e"; -} -.uk-icon-sign-in:before { - content: "\f090"; -} -.uk-icon-trophy:before { - content: "\f091"; -} -.uk-icon-github-square:before { - content: "\f092"; -} -.uk-icon-upload:before { - content: "\f093"; -} -.uk-icon-lemon-o:before { - content: "\f094"; -} -.uk-icon-phone:before { - content: "\f095"; -} -.uk-icon-square-o:before { - content: "\f096"; -} -.uk-icon-bookmark-o:before { - content: "\f097"; -} -.uk-icon-phone-square:before { - content: "\f098"; -} -.uk-icon-twitter:before { - content: "\f099"; -} -.uk-icon-facebook:before { - content: "\f09a"; -} -.uk-icon-github:before { - content: "\f09b"; -} -.uk-icon-unlock:before { - content: "\f09c"; -} -.uk-icon-credit-card:before { - content: "\f09d"; -} -.uk-icon-rss:before { - content: "\f09e"; -} -.uk-icon-hdd-o:before { - content: "\f0a0"; -} -.uk-icon-bullhorn:before { - content: "\f0a1"; -} -.uk-icon-bell:before { - content: "\f0f3"; -} -.uk-icon-certificate:before { - content: "\f0a3"; -} -.uk-icon-hand-o-right:before { - content: "\f0a4"; -} -.uk-icon-hand-o-left:before { - content: "\f0a5"; -} -.uk-icon-hand-o-up:before { - content: "\f0a6"; -} -.uk-icon-hand-o-down:before { - content: "\f0a7"; -} -.uk-icon-arrow-circle-left:before { - content: "\f0a8"; -} -.uk-icon-arrow-circle-right:before { - content: "\f0a9"; -} -.uk-icon-arrow-circle-up:before { - content: "\f0aa"; -} -.uk-icon-arrow-circle-down:before { - content: "\f0ab"; -} -.uk-icon-globe:before { - content: "\f0ac"; -} -.uk-icon-wrench:before { - content: "\f0ad"; -} -.uk-icon-tasks:before { - content: "\f0ae"; -} -.uk-icon-filter:before { - content: "\f0b0"; -} -.uk-icon-briefcase:before { - content: "\f0b1"; -} -.uk-icon-arrows-alt:before { - content: "\f0b2"; -} -.uk-icon-group:before, -.uk-icon-users:before { - content: "\f0c0"; -} -.uk-icon-chain:before, -.uk-icon-link:before { - content: "\f0c1"; -} -.uk-icon-cloud:before { - content: "\f0c2"; -} -.uk-icon-flask:before { - content: "\f0c3"; -} -.uk-icon-cut:before, -.uk-icon-scissors:before { - content: "\f0c4"; -} -.uk-icon-copy:before, -.uk-icon-files-o:before { - content: "\f0c5"; -} -.uk-icon-paperclip:before { - content: "\f0c6"; -} -.uk-icon-save:before, -.uk-icon-floppy-o:before { - content: "\f0c7"; -} -.uk-icon-square:before { - content: "\f0c8"; -} -.uk-icon-navicon:before, -.uk-icon-reorder:before, -.uk-icon-bars:before { - content: "\f0c9"; -} -.uk-icon-list-ul:before { - content: "\f0ca"; -} -.uk-icon-list-ol:before { - content: "\f0cb"; -} -.uk-icon-strikethrough:before { - content: "\f0cc"; -} -.uk-icon-underline:before { - content: "\f0cd"; -} -.uk-icon-table:before { - content: "\f0ce"; -} -.uk-icon-magic:before { - content: "\f0d0"; -} -.uk-icon-truck:before { - content: "\f0d1"; -} -.uk-icon-pinterest:before { - content: "\f0d2"; -} -.uk-icon-pinterest-square:before { - content: "\f0d3"; -} -.uk-icon-google-plus-square:before { - content: "\f0d4"; -} -.uk-icon-google-plus:before { - content: "\f0d5"; -} -.uk-icon-money:before { - content: "\f0d6"; -} -.uk-icon-caret-down:before { - content: "\f0d7"; -} -.uk-icon-caret-up:before { - content: "\f0d8"; -} -.uk-icon-caret-left:before { - content: "\f0d9"; -} -.uk-icon-caret-right:before { - content: "\f0da"; -} -.uk-icon-columns:before { - content: "\f0db"; -} -.uk-icon-unsorted:before, -.uk-icon-sort:before { - content: "\f0dc"; -} -.uk-icon-sort-down:before, -.uk-icon-sort-desc:before { - content: "\f0dd"; -} -.uk-icon-sort-up:before, -.uk-icon-sort-asc:before { - content: "\f0de"; -} -.uk-icon-envelope:before { - content: "\f0e0"; -} -.uk-icon-linkedin:before { - content: "\f0e1"; -} -.uk-icon-rotate-left:before, -.uk-icon-undo:before { - content: "\f0e2"; -} -.uk-icon-legal:before, -.uk-icon-gavel:before { - content: "\f0e3"; -} -.uk-icon-dashboard:before, -.uk-icon-tachometer:before { - content: "\f0e4"; -} -.uk-icon-comment-o:before { - content: "\f0e5"; -} -.uk-icon-comments-o:before { - content: "\f0e6"; -} -.uk-icon-flash:before, -.uk-icon-bolt:before { - content: "\f0e7"; -} -.uk-icon-sitemap:before { - content: "\f0e8"; -} -.uk-icon-umbrella:before { - content: "\f0e9"; -} -.uk-icon-paste:before, -.uk-icon-clipboard:before { - content: "\f0ea"; -} -.uk-icon-lightbulb-o:before { - content: "\f0eb"; -} -.uk-icon-exchange:before { - content: "\f0ec"; -} -.uk-icon-cloud-download:before { - content: "\f0ed"; -} -.uk-icon-cloud-upload:before { - content: "\f0ee"; -} -.uk-icon-user-md:before { - content: "\f0f0"; -} -.uk-icon-stethoscope:before { - content: "\f0f1"; -} -.uk-icon-suitcase:before { - content: "\f0f2"; -} -.uk-icon-bell-o:before { - content: "\f0a2"; -} -.uk-icon-coffee:before { - content: "\f0f4"; -} -.uk-icon-cutlery:before { - content: "\f0f5"; -} -.uk-icon-file-text-o:before { - content: "\f0f6"; -} -.uk-icon-building-o:before { - content: "\f0f7"; -} -.uk-icon-hospital-o:before { - content: "\f0f8"; -} -.uk-icon-ambulance:before { - content: "\f0f9"; -} -.uk-icon-medkit:before { - content: "\f0fa"; -} -.uk-icon-fighter-jet:before { - content: "\f0fb"; -} -.uk-icon-beer:before { - content: "\f0fc"; -} -.uk-icon-h-square:before { - content: "\f0fd"; -} -.uk-icon-plus-square:before { - content: "\f0fe"; -} -.uk-icon-angle-double-left:before { - content: "\f100"; -} -.uk-icon-angle-double-right:before { - content: "\f101"; -} -.uk-icon-angle-double-up:before { - content: "\f102"; -} -.uk-icon-angle-double-down:before { - content: "\f103"; -} -.uk-icon-angle-left:before { - content: "\f104"; -} -.uk-icon-angle-right:before { - content: "\f105"; -} -.uk-icon-angle-up:before { - content: "\f106"; -} -.uk-icon-angle-down:before { - content: "\f107"; -} -.uk-icon-desktop:before { - content: "\f108"; -} -.uk-icon-laptop:before { - content: "\f109"; -} -.uk-icon-tablet:before { - content: "\f10a"; -} -.uk-icon-mobile-phone:before, -.uk-icon-mobile:before { - content: "\f10b"; -} -.uk-icon-circle-o:before { - content: "\f10c"; -} -.uk-icon-quote-left:before { - content: "\f10d"; -} -.uk-icon-quote-right:before { - content: "\f10e"; -} -.uk-icon-spinner:before { - content: "\f110"; -} -.uk-icon-circle:before { - content: "\f111"; -} -.uk-icon-mail-reply:before, -.uk-icon-reply:before { - content: "\f112"; -} -.uk-icon-github-alt:before { - content: "\f113"; -} -.uk-icon-folder-o:before { - content: "\f114"; -} -.uk-icon-folder-open-o:before { - content: "\f115"; -} -.uk-icon-smile-o:before { - content: "\f118"; -} -.uk-icon-frown-o:before { - content: "\f119"; -} -.uk-icon-meh-o:before { - content: "\f11a"; -} -.uk-icon-gamepad:before { - content: "\f11b"; -} -.uk-icon-keyboard-o:before { - content: "\f11c"; -} -.uk-icon-flag-o:before { - content: "\f11d"; -} -.uk-icon-flag-checkered:before { - content: "\f11e"; -} -.uk-icon-terminal:before { - content: "\f120"; -} -.uk-icon-code:before { - content: "\f121"; -} -.uk-icon-mail-reply-all:before, -.uk-icon-reply-all:before { - content: "\f122"; -} -.uk-icon-star-half-empty:before, -.uk-icon-star-half-full:before, -.uk-icon-star-half-o:before { - content: "\f123"; -} -.uk-icon-location-arrow:before { - content: "\f124"; -} -.uk-icon-crop:before { - content: "\f125"; -} -.uk-icon-code-fork:before { - content: "\f126"; -} -.uk-icon-unlink:before, -.uk-icon-chain-broken:before { - content: "\f127"; -} -.uk-icon-question:before { - content: "\f128"; -} -.uk-icon-info:before { - content: "\f129"; -} -.uk-icon-exclamation:before { - content: "\f12a"; -} -.uk-icon-superscript:before { - content: "\f12b"; -} -.uk-icon-subscript:before { - content: "\f12c"; -} -.uk-icon-eraser:before { - content: "\f12d"; -} -.uk-icon-puzzle-piece:before { - content: "\f12e"; -} -.uk-icon-microphone:before { - content: "\f130"; -} -.uk-icon-microphone-slash:before { - content: "\f131"; -} -.uk-icon-shield:before { - content: "\f132"; -} -.uk-icon-calendar-o:before { - content: "\f133"; -} -.uk-icon-fire-extinguisher:before { - content: "\f134"; -} -.uk-icon-rocket:before { - content: "\f135"; -} -.uk-icon-maxcdn:before { - content: "\f136"; -} -.uk-icon-chevron-circle-left:before { - content: "\f137"; -} -.uk-icon-chevron-circle-right:before { - content: "\f138"; -} -.uk-icon-chevron-circle-up:before { - content: "\f139"; -} -.uk-icon-chevron-circle-down:before { - content: "\f13a"; -} -.uk-icon-html5:before { - content: "\f13b"; -} -.uk-icon-css3:before { - content: "\f13c"; -} -.uk-icon-anchor:before { - content: "\f13d"; -} -.uk-icon-unlock-alt:before { - content: "\f13e"; -} -.uk-icon-bullseye:before { - content: "\f140"; -} -.uk-icon-ellipsis-h:before { - content: "\f141"; -} -.uk-icon-ellipsis-v:before { - content: "\f142"; -} -.uk-icon-rss-square:before { - content: "\f143"; -} -.uk-icon-play-circle:before { - content: "\f144"; -} -.uk-icon-ticket:before { - content: "\f145"; -} -.uk-icon-minus-square:before { - content: "\f146"; -} -.uk-icon-minus-square-o:before { - content: "\f147"; -} -.uk-icon-level-up:before { - content: "\f148"; -} -.uk-icon-level-down:before { - content: "\f149"; -} -.uk-icon-check-square:before { - content: "\f14a"; -} -.uk-icon-pencil-square:before { - content: "\f14b"; -} -.uk-icon-external-link-square:before { - content: "\f14c"; -} -.uk-icon-share-square:before { - content: "\f14d"; -} -.uk-icon-compass:before { - content: "\f14e"; -} -.uk-icon-toggle-down:before, -.uk-icon-caret-square-o-down:before { - content: "\f150"; -} -.uk-icon-toggle-up:before, -.uk-icon-caret-square-o-up:before { - content: "\f151"; -} -.uk-icon-toggle-right:before, -.uk-icon-caret-square-o-right:before { - content: "\f152"; -} -.uk-icon-euro:before, -.uk-icon-eur:before { - content: "\f153"; -} -.uk-icon-gbp:before { - content: "\f154"; -} -.uk-icon-dollar:before, -.uk-icon-usd:before { - content: "\f155"; -} -.uk-icon-rupee:before, -.uk-icon-inr:before { - content: "\f156"; -} -.uk-icon-cny:before, -.uk-icon-rmb:before, -.uk-icon-yen:before, -.uk-icon-jpy:before { - content: "\f157"; -} -.uk-icon-ruble:before, -.uk-icon-rouble:before, -.uk-icon-rub:before { - content: "\f158"; -} -.uk-icon-won:before, -.uk-icon-krw:before { - content: "\f159"; -} -.uk-icon-bitcoin:before, -.uk-icon-btc:before { - content: "\f15a"; -} -.uk-icon-file:before { - content: "\f15b"; -} -.uk-icon-file-text:before { - content: "\f15c"; -} -.uk-icon-sort-alpha-asc:before { - content: "\f15d"; -} -.uk-icon-sort-alpha-desc:before { - content: "\f15e"; -} -.uk-icon-sort-amount-asc:before { - content: "\f160"; -} -.uk-icon-sort-amount-desc:before { - content: "\f161"; -} -.uk-icon-sort-numeric-asc:before { - content: "\f162"; -} -.uk-icon-sort-numeric-desc:before { - content: "\f163"; -} -.uk-icon-thumbs-up:before { - content: "\f164"; -} -.uk-icon-thumbs-down:before { - content: "\f165"; -} -.uk-icon-youtube-square:before { - content: "\f166"; -} -.uk-icon-youtube:before { - content: "\f167"; -} -.uk-icon-xing:before { - content: "\f168"; -} -.uk-icon-xing-square:before { - content: "\f169"; -} -.uk-icon-youtube-play:before { - content: "\f16a"; -} -.uk-icon-dropbox:before { - content: "\f16b"; -} -.uk-icon-stack-overflow:before { - content: "\f16c"; -} -.uk-icon-instagram:before { - content: "\f16d"; -} -.uk-icon-flickr:before { - content: "\f16e"; -} -.uk-icon-adn:before { - content: "\f170"; -} -.uk-icon-bitbucket:before { - content: "\f171"; -} -.uk-icon-bitbucket-square:before { - content: "\f172"; -} -.uk-icon-tumblr:before { - content: "\f173"; -} -.uk-icon-tumblr-square:before { - content: "\f174"; -} -.uk-icon-long-arrow-down:before { - content: "\f175"; -} -.uk-icon-long-arrow-up:before { - content: "\f176"; -} -.uk-icon-long-arrow-left:before { - content: "\f177"; -} -.uk-icon-long-arrow-right:before { - content: "\f178"; -} -.uk-icon-apple:before { - content: "\f179"; -} -.uk-icon-windows:before { - content: "\f17a"; -} -.uk-icon-android:before { - content: "\f17b"; -} -.uk-icon-linux:before { - content: "\f17c"; -} -.uk-icon-dribbble:before { - content: "\f17d"; -} -.uk-icon-skype:before { - content: "\f17e"; -} -.uk-icon-foursquare:before { - content: "\f180"; -} -.uk-icon-trello:before { - content: "\f181"; -} -.uk-icon-female:before { - content: "\f182"; -} -.uk-icon-male:before { - content: "\f183"; -} -.uk-icon-gittip:before { - content: "\f184"; -} -.uk-icon-sun-o:before { - content: "\f185"; -} -.uk-icon-moon-o:before { - content: "\f186"; -} -.uk-icon-archive:before { - content: "\f187"; -} -.uk-icon-bug:before { - content: "\f188"; -} -.uk-icon-vk:before { - content: "\f189"; -} -.uk-icon-weibo:before { - content: "\f18a"; -} -.uk-icon-renren:before { - content: "\f18b"; -} -.uk-icon-pagelines:before { - content: "\f18c"; -} -.uk-icon-stack-exchange:before { - content: "\f18d"; -} -.uk-icon-arrow-circle-o-right:before { - content: "\f18e"; -} -.uk-icon-arrow-circle-o-left:before { - content: "\f190"; -} -.uk-icon-toggle-left:before, -.uk-icon-caret-square-o-left:before { - content: "\f191"; -} -.uk-icon-dot-circle-o:before { - content: "\f192"; -} -.uk-icon-wheelchair:before { - content: "\f193"; -} -.uk-icon-vimeo-square:before { - content: "\f194"; -} -.uk-icon-turkish-lira:before, -.uk-icon-try:before { - content: "\f195"; -} -.uk-icon-plus-square-o:before { - content: "\f196"; -} -.uk-icon-space-shuttle:before { - content: "\f197"; -} -.uk-icon-slack:before { - content: "\f198"; -} -.uk-icon-envelope-square:before { - content: "\f199"; -} -.uk-icon-wordpress:before { - content: "\f19a"; -} -.uk-icon-openid:before { - content: "\f19b"; -} -.uk-icon-institution:before, -.uk-icon-bank:before, -.uk-icon-university:before { - content: "\f19c"; -} -.uk-icon-mortar-board:before, -.uk-icon-graduation-cap:before { - content: "\f19d"; -} -.uk-icon-yahoo:before { - content: "\f19e"; -} -.uk-icon-google:before { - content: "\f1a0"; -} -.uk-icon-reddit:before { - content: "\f1a1"; -} -.uk-icon-reddit-square:before { - content: "\f1a2"; -} -.uk-icon-stumbleupon-circle:before { - content: "\f1a3"; -} -.uk-icon-stumbleupon:before { - content: "\f1a4"; -} -.uk-icon-delicious:before { - content: "\f1a5"; -} -.uk-icon-digg:before { - content: "\f1a6"; -} -.uk-icon-pied-piper:before { - content: "\f1a7"; -} -.uk-icon-pied-piper-alt:before { - content: "\f1a8"; -} -.uk-icon-drupal:before { - content: "\f1a9"; -} -.uk-icon-joomla:before { - content: "\f1aa"; -} -.uk-icon-language:before { - content: "\f1ab"; -} -.uk-icon-fax:before { - content: "\f1ac"; -} -.uk-icon-building:before { - content: "\f1ad"; -} -.uk-icon-child:before { - content: "\f1ae"; -} -.uk-icon-paw:before { - content: "\f1b0"; -} -.uk-icon-spoon:before { - content: "\f1b1"; -} -.uk-icon-cube:before { - content: "\f1b2"; -} -.uk-icon-cubes:before { - content: "\f1b3"; -} -.uk-icon-behance:before { - content: "\f1b4"; -} -.uk-icon-behance-square:before { - content: "\f1b5"; -} -.uk-icon-steam:before { - content: "\f1b6"; -} -.uk-icon-steam-square:before { - content: "\f1b7"; -} -.uk-icon-recycle:before { - content: "\f1b8"; -} -.uk-icon-automobile:before, -.uk-icon-car:before { - content: "\f1b9"; -} -.uk-icon-cab:before, -.uk-icon-taxi:before { - content: "\f1ba"; -} -.uk-icon-tree:before { - content: "\f1bb"; -} -.uk-icon-spotify:before { - content: "\f1bc"; -} -.uk-icon-deviantart:before { - content: "\f1bd"; -} -.uk-icon-soundcloud:before { - content: "\f1be"; -} -.uk-icon-database:before { - content: "\f1c0"; -} -.uk-icon-file-pdf-o:before { - content: "\f1c1"; -} -.uk-icon-file-word-o:before { - content: "\f1c2"; -} -.uk-icon-file-excel-o:before { - content: "\f1c3"; -} -.uk-icon-file-powerpoint-o:before { - content: "\f1c4"; -} -.uk-icon-file-photo-o:before, -.uk-icon-file-picture-o:before, -.uk-icon-file-image-o:before { - content: "\f1c5"; -} -.uk-icon-file-zip-o:before, -.uk-icon-file-archive-o:before { - content: "\f1c6"; -} -.uk-icon-file-sound-o:before, -.uk-icon-file-audio-o:before { - content: "\f1c7"; -} -.uk-icon-file-movie-o:before, -.uk-icon-file-video-o:before { - content: "\f1c8"; -} -.uk-icon-file-code-o:before { - content: "\f1c9"; -} -.uk-icon-vine:before { - content: "\f1ca"; -} -.uk-icon-codepen:before { - content: "\f1cb"; -} -.uk-icon-jsfiddle:before { - content: "\f1cc"; -} -.uk-icon-life-bouy:before, -.uk-icon-life-buoy:before, -.uk-icon-life-saver:before, -.uk-icon-support:before, -.uk-icon-life-ring:before { - content: "\f1cd"; -} -.uk-icon-circle-o-notch:before { - content: "\f1ce"; -} -.uk-icon-ra:before, -.uk-icon-rebel:before { - content: "\f1d0"; -} -.uk-icon-ge:before, -.uk-icon-empire:before { - content: "\f1d1"; -} -.uk-icon-git-square:before { - content: "\f1d2"; -} -.uk-icon-git:before { - content: "\f1d3"; -} -.uk-icon-hacker-news:before { - content: "\f1d4"; -} -.uk-icon-tencent-weibo:before { - content: "\f1d5"; -} -.uk-icon-qq:before { - content: "\f1d6"; -} -.uk-icon-wechat:before, -.uk-icon-weixin:before { - content: "\f1d7"; -} -.uk-icon-send:before, -.uk-icon-paper-plane:before { - content: "\f1d8"; -} -.uk-icon-send-o:before, -.uk-icon-paper-plane-o:before { - content: "\f1d9"; -} -.uk-icon-history:before { - content: "\f1da"; -} -.uk-icon-circle-thin:before { - content: "\f1db"; -} -.uk-icon-header:before { - content: "\f1dc"; -} -.uk-icon-paragraph:before { - content: "\f1dd"; -} -.uk-icon-sliders:before { - content: "\f1de"; -} -.uk-icon-share-alt:before { - content: "\f1e0"; -} -.uk-icon-share-alt-square:before { - content: "\f1e1"; -} -.uk-icon-bomb:before { - content: "\f1e2"; -} -.uk-icon-soccer-ball-o:before, -.uk-icon-futbol-o:before { - content: "\f1e3"; -} -.uk-icon-tty:before { - content: "\f1e4"; -} -.uk-icon-binoculars:before { - content: "\f1e5"; -} -.uk-icon-plug:before { - content: "\f1e6"; -} -.uk-icon-slideshare:before { - content: "\f1e7"; -} -.uk-icon-twitch:before { - content: "\f1e8"; -} -.uk-icon-yelp:before { - content: "\f1e9"; -} -.uk-icon-newspaper-o:before { - content: "\f1ea"; -} -.uk-icon-wifi:before { - content: "\f1eb"; -} -.uk-icon-calculator:before { - content: "\f1ec"; -} -.uk-icon-paypal:before { - content: "\f1ed"; -} -.uk-icon-google-wallet:before { - content: "\f1ee"; -} -.uk-icon-cc-visa:before { - content: "\f1f0"; -} -.uk-icon-cc-mastercard:before { - content: "\f1f1"; -} -.uk-icon-cc-discover:before { - content: "\f1f2"; -} -.uk-icon-cc-amex:before { - content: "\f1f3"; -} -.uk-icon-cc-paypal:before { - content: "\f1f4"; -} -.uk-icon-cc-stripe:before { - content: "\f1f5"; -} -.uk-icon-bell-slash:before { - content: "\f1f6"; -} -.uk-icon-bell-slash-o:before { - content: "\f1f7"; -} -.uk-icon-trash:before { - content: "\f1f8"; -} -.uk-icon-copyright:before { - content: "\f1f9"; -} -.uk-icon-at:before { - content: "\f1fa"; -} -.uk-icon-eyedropper:before { - content: "\f1fb"; -} -.uk-icon-paint-brush:before { - content: "\f1fc"; -} -.uk-icon-birthday-cake:before { - content: "\f1fd"; -} -.uk-icon-area-chart:before { - content: "\f1fe"; -} -.uk-icon-pie-chart:before { - content: "\f200"; -} -.uk-icon-line-chart:before { - content: "\f201"; -} -.uk-icon-lastfm:before { - content: "\f202"; -} -.uk-icon-lastfm-square:before { - content: "\f203"; -} -.uk-icon-toggle-off:before { - content: "\f204"; -} -.uk-icon-toggle-on:before { - content: "\f205"; -} -.uk-icon-bicycle:before { - content: "\f206"; -} -.uk-icon-bus:before { - content: "\f207"; -} -.uk-icon-ioxhost:before { - content: "\f208"; -} -.uk-icon-angellist:before { - content: "\f209"; -} -.uk-icon-cc:before { - content: "\f20a"; -} -.uk-icon-shekel:before, -.uk-icon-sheqel:before, -.uk-icon-ils:before { - content: "\f20b"; -} -.uk-icon-meanpath:before { - content: "\f20c"; -} -/* ======================================================================== - Component: Close - ========================================================================== */ -/* - * Removes inner padding and border in Firefox 4+. - */ -.uk-close::-moz-focus-inner { - border: 0; - padding: 0; -} -/* - * 1. Correct inability to style clickable `input` types in iOS. - * 2. Remove margins in Chrome, Safari and Opera. - * 3. Remove borders for `button`. - * 4. Address `overflow` set to `hidden` in IE 8/9/10/11. - * 5. Correct `font` properties and `color` not being inherited for `button`. - * 6. Address inconsistent `text-transform` inheritance which is only inherit in Firefox and IE - * 7. Remove default `button` padding and background color - * 8. Style - */ -.uk-close { - /* 1 */ - -webkit-appearance: none; - /* 2 */ - margin: 0; - /* 3 */ - border: none; - /* 4 */ - overflow: visible; - /* 5 */ - font: inherit; - color: inherit; - /* 6 */ - text-transform: none; - /* 7. */ - padding: 0; - background: transparent; - /* 8 */ - display: inline-block; - -moz-box-sizing: content-box; - box-sizing: content-box; - width: 20px; - line-height: 20px; - text-align: center; - vertical-align: middle; - opacity: 0.3; -} -/* Icon */ -.uk-close:after { - display: block; - content: "\f00d"; - font-family: FontAwesome; -} -/* - * Hover - * 1. Apply hover style also to focus state - * 2. Remove default focus style - * 3. Required for `a` elements - */ -.uk-close:hover, -.uk-close:focus { - opacity: 0.5; - /* 2 */ - outline: none; - /* 3 */ - color: inherit; - text-decoration: none; - cursor: pointer; -} -/* Modifier - ========================================================================== */ -.uk-close-alt { - padding: 2px; - border-radius: 50%; - background: #eeeeee; - opacity: 1; -} -/* Hover */ -.uk-close-alt:hover, -.uk-close-alt:focus { - opacity: 1; -} -/* Icon */ -.uk-close-alt:after { - opacity: 0.5; -} -.uk-close-alt:hover:after, -.uk-close-alt:focus:after { - opacity: 0.8; -} -/* ======================================================================== - Component: Badge - ========================================================================== */ -.uk-badge { - display: inline-block; - padding: 0 5px; - background: #00a8e6; - font-size: 10px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - text-align: center; - vertical-align: middle; - text-transform: none; -} -/* - * Keep color when badge is a link - */ -a.uk-badge:hover { - color: #ffffff; -} -/* Modifier: `uk-badge-notification`; - ========================================================================== */ -.uk-badge-notification { - -moz-box-sizing: border-box; - box-sizing: border-box; - min-width: 18px; - border-radius: 500px; - font-size: 12px; - line-height: 18px; -} -/* Color modifier - ========================================================================== */ -/* - * Modifier: `uk-badge-success` - */ -.uk-badge-success { - background-color: #8cc14c; -} -/* - * Modifier: `uk-badge-warning` - */ -.uk-badge-warning { - background-color: #faa732; -} -/* - * Modifier: `uk-badge-danger` - */ -.uk-badge-danger { - background-color: #da314b; -} -/* ======================================================================== - Component: Alert - ========================================================================== */ -.uk-alert { - margin-bottom: 15px; - padding: 10px; - background: #ebf7fd; - color: #2d7091; -} -/* - * Add margin if adjacent element - */ -* + .uk-alert { - margin-top: 15px; -} -/* - * Remove margin from the last-child - */ -.uk-alert > :last-child { - margin-bottom: 0; -} -/* - * Keep color for headings if the default heading color is changed - */ -.uk-alert h1, -.uk-alert h2, -.uk-alert h3, -.uk-alert h4, -.uk-alert h5, -.uk-alert h6 { - color: inherit; -} -/* Close in alert - ========================================================================== */ -.uk-alert > .uk-close:first-child { - float: right; -} -/* - * Remove margin from adjacent element - */ -.uk-alert > .uk-close:first-child + * { - margin-top: 0; -} -/* Modifier: `uk-alert-success` - ========================================================================== */ -.uk-alert-success { - background: #f2fae3; - color: #659f13; -} -/* Modifier: `uk-alert-warning` - ========================================================================== */ -.uk-alert-warning { - background: #fffceb; - color: #e28327; -} -/* Modifier: `uk-alert-danger` - ========================================================================== */ -.uk-alert-danger { - background: #fff1f0; - color: #d85030; -} -/* Modifier: `uk-alert-large` - ========================================================================== */ -.uk-alert-large { - padding: 20px; -} -.uk-alert-large > .uk-close:first-child { - margin: -10px -10px 0 0; -} -/* ======================================================================== - Component: Thumbnail - ========================================================================== */ -/* - * 1. Container width fits its content - * 2. Responsive behavior - * 3. Corrects `max-width` behavior sed - * 4. Required for `figure` element - * 5. Style - */ -.uk-thumbnail { - /* 1 */ - display: inline-block; - /* 2 */ - max-width: 100%; - /* 3 */ - -moz-box-sizing: border-box; - box-sizing: border-box; - /* 3 */ - margin: 0; - /* 4 */ - padding: 4px; - border: 1px solid #dddddd; - background: #ffffff; -} -/* - * Hover state for `a` elements - * 1. Apply hover style also to focus state - * 2. Needed for caption - * 3. Remove default focus style - */ -a.uk-thumbnail:hover, -a.uk-thumbnail:focus { - border-color: #aaaaaa; - background-color: #ffffff; - /* 2 */ - text-decoration: none; - /* 3 */ - outline: none; -} -/* Caption - ========================================================================== */ -.uk-thumbnail-caption { - padding-top: 4px; - text-align: center; - color: #444444; -} -/* Sizes - ========================================================================== */ -.uk-thumbnail-mini { - width: 150px; -} -.uk-thumbnail-small { - width: 200px; -} -.uk-thumbnail-medium { - width: 300px; -} -.uk-thumbnail-large { - width: 400px; -} -.uk-thumbnail-expand, -.uk-thumbnail-expand > img { - width: 100%; -} -/* ======================================================================== - Component: Overlay - ========================================================================== */ -/* - * 1. Container width fits its content - * 2. Create position context - * 3. Set max-width for responsive images to prevent `inline-block` consequences - * 4. Remove the gap between the container and its child element - * 5. Fixed wrong scaling calculation for images in Chrome - */ -.uk-overlay { - /* 1 */ - display: inline-block; - /* 2 */ - position: relative; - /* 3 */ - max-width: 100%; - /* 4 */ - vertical-align: middle; - /* 5 */ - overflow: hidden; -} -/* - * Remove margin from content - */ -.uk-overlay > :first-child { - margin-bottom: 0; -} -/* Sub-object `uk-overlay-area` - ========================================================================== */ -/* - * 1. Set position - * 2. Set style - * 3. Fade-in transition - */ -.uk-overlay-area { - /* 1 */ - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - /* 2 */ - background: rgba(0, 0, 0, 0.3); - /* 3 */ - opacity: 0; - -webkit-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; - -webkit-transform: translate3d(0, 0, 0); -} -/* - * Hover - * 1. `uk-hover` to support touch devices - * 2. Use optional `uk-overlay-toggle` to trigger the overlay earlier - */ -.uk-overlay:hover .uk-overlay-area, -.uk-overlay.uk-hover .uk-overlay-area, -.uk-overlay-toggle:hover .uk-overlay-area, -.uk-overlay-toggle.uk-hover .uk-overlay-area { - opacity: 1; -} -/* - * Icon - */ -.uk-overlay-area:empty:before { - content: "\f002"; - position: absolute; - top: 50%; - left: 50%; - width: 50px; - height: 50px; - margin-top: -25px; - margin-left: -25px; - font-size: 50px; - line-height: 1; - font-family: FontAwesome; - text-align: center; - color: #ffffff; -} -/* Sub-object `uk-overlay-area-content` - ========================================================================== */ -/* - * Remove whitespace between child elements when using `inline-block` - * Needed for Firefox - */ -.uk-overlay-area:not(:empty) { - font-size: 0.001px; -} -/* - * 1. Needed for vertical alignment - */ -.uk-overlay-area:not(:empty):before { - content: ''; - display: inline-block; - height: 100%; - vertical-align: middle; -} -/* - * 1. Set vertical alignment - * 2. Reset whitespace hack - * 3. Set horizontal alignment - * 4. Set style - */ -.uk-overlay-area-content { - /* 1 */ - display: inline-block; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100%; - vertical-align: middle; - /* 2 */ - font-size: 1rem; - /* 3 */ - text-align: center; - /* 4 */ - padding: 0 15px; - color: #ffffff; -} -/* - * Remove margin from the last-child - */ -.uk-overlay-area-content > :last-child { - margin-bottom: 0; -} -/* - * Links in overlay area - */ -.uk-overlay-area-content a:not([class]), -.uk-overlay-area-content a:not([class]):hover { - color: inherit; -} -/* Sub-object `uk-overlay-caption` - ========================================================================== */ -/* - * 1. Set position - * 2. Set style - * 3. Fade-in transition - */ -.uk-overlay-caption { - /* 1 */ - position: absolute; - bottom: 0; - left: 0; - right: 0; - /* 2 */ - padding: 15px; - background: rgba(0, 0, 0, 0.5); - color: #ffffff; - /* 3 */ - opacity: 0; - -webkit-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; - -webkit-transform: translate3d(0, 0, 0); -} -/* - * Hover - * 1. `uk-hover` to support touch devices - * 2. Use optional `uk-overlay-toggle` to trigger the overlay earlier - */ -.uk-overlay:hover .uk-overlay-caption, -.uk-overlay.uk-hover .uk-overlay-caption, -.uk-overlay-toggle:hover .uk-overlay-caption, -.uk-overlay-toggle.uk-hover .uk-overlay-caption { - opacity: 1; -} -/* ======================================================================== - Component: Progress - ========================================================================== */ -/* - * 1. Clearing - * 2. Vertical alignment if text is used - */ -.uk-progress { - -moz-box-sizing: border-box; - box-sizing: border-box; - height: 20px; - margin-bottom: 15px; - background: #eeeeee; - /* 1 */ - overflow: hidden; - /* 2 */ - line-height: 20px; -} -/* - * Add margin if adjacent element - */ -* + .uk-progress { - margin-top: 15px; -} -/* Sub-object: `uk-progress-bar` - ========================================================================== */ -/* - * 1. Transition - * 2. Needed for text - */ -.uk-progress-bar { - width: 0; - height: 100%; - background: #00a8e6; - float: left; - /* 1 */ - -webkit-transition: width 0.6s ease; - transition: width 0.6s ease; - /* 2 */ - font-size: 12px; - color: #ffffff; - text-align: center; -} -/* Size modifiers - ========================================================================== */ -/* Mini */ -.uk-progress-mini { - height: 6px; -} -/* Small */ -.uk-progress-small { - height: 12px; -} -/* Color modifiers - ========================================================================== */ -.uk-progress-success .uk-progress-bar { - background-color: #8cc14c; -} -.uk-progress-warning .uk-progress-bar { - background-color: #faa732; -} -.uk-progress-danger .uk-progress-bar { - background-color: #da314b; -} -/* Modifier: `uk-progress-striped` - ========================================================================== */ -.uk-progress-striped .uk-progress-bar { - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 30px 30px; -} -/* - * Animation - */ -.uk-progress-striped.uk-active .uk-progress-bar { - -webkit-animation: uk-progress-bar-stripes 2s linear infinite; - animation: uk-progress-bar-stripes 2s linear infinite; -} -@-webkit-keyframes uk-progress-bar-stripes { - 0% { - background-position: 0 0; - } - 100% { - background-position: 30px 0; - } -} -@keyframes uk-progress-bar-stripes { - 0% { - background-position: 0 0; - } - 100% { - background-position: 30px 0; - } -} -/* ======================================================================== - Component: Animation - ========================================================================== */ -[class*='uk-animation-'] { - -webkit-animation-duration: 0.5s; - animation-duration: 0.5s; - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; -} -/* Hide animated element if scrollspy is used */ -@media screen { - [data-uk-scrollspy*='uk-animation-'] { - opacity: 0; - } -} -/* - * Fade - * Higher specificity (!important) needed because of reverse modifier - */ -.uk-animation-fade { - -webkit-animation-name: uk-fade; - animation-name: uk-fade; - -webkit-animation-duration: 0.8s; - animation-duration: 0.8s; - -webkit-animation-timing-function: linear !important; - animation-timing-function: linear !important; -} -/* - * Fade with scale - */ -.uk-animation-scale-up { - -webkit-animation-name: uk-fade-scale-02; - animation-name: uk-fade-scale-02; -} -.uk-animation-scale-down { - -webkit-animation-name: uk-fade-scale-18; - animation-name: uk-fade-scale-18; -} -/* - * Fade with slide - */ -.uk-animation-slide-top { - -webkit-animation-name: uk-fade-top; - animation-name: uk-fade-top; -} -.uk-animation-slide-bottom { - -webkit-animation-name: uk-fade-bottom; - animation-name: uk-fade-bottom; -} -.uk-animation-slide-left { - -webkit-animation-name: uk-fade-left; - animation-name: uk-fade-left; -} -.uk-animation-slide-right { - -webkit-animation-name: uk-fade-right; - animation-name: uk-fade-right; -} -/* - * Scale - */ -.uk-animation-scale { - -webkit-animation-name: uk-scale-12; - animation-name: uk-scale-12; -} -/* - * Shake - */ -.uk-animation-shake { - -webkit-animation-name: uk-shake; - animation-name: uk-shake; -} -/* Direction modifiers - ========================================================================== */ -.uk-animation-reverse { - -webkit-animation-direction: reverse; - animation-direction: reverse; - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; -} -/* Duration modifiers -========================================================================== */ -.uk-animation-10 { - -webkit-animation-duration: 10s; - animation-duration: 10s; -} -/* Origin modifiers -========================================================================== */ -.uk-animation-top-left { - -webkit-transform-origin: 0 0; - transform-origin: 0 0; -} -.uk-animation-top-center { - -webkit-transform-origin: 50% 0; - transform-origin: 50% 0; -} -.uk-animation-top-right { - -webkit-transform-origin: 100% 0; - transform-origin: 100% 0; -} -.uk-animation-middle-left { - -webkit-transform-origin: 0 50%; - transform-origin: 0 50%; -} -.uk-animation-middle-right { - -webkit-transform-origin: 100% 50%; - transform-origin: 100% 50%; -} -.uk-animation-bottom-left { - -webkit-transform-origin: 0 100%; - transform-origin: 0 100%; -} -.uk-animation-bottom-center { - -webkit-transform-origin: 50% 100%; - transform-origin: 50% 100%; -} -.uk-animation-bottom-right { - -webkit-transform-origin: 100% 100%; - transform-origin: 100% 100%; -} -/* Keyframes: Fade - * Used by dropdown, datepicker and slideshow component - ========================================================================== */ -@-webkit-keyframes uk-fade { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } -} -@keyframes uk-fade { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } -} -/* Keyframes: Fade with slide - ========================================================================== */ -/* - * Top - */ -@-webkit-keyframes uk-fade-top { - 0% { - opacity: 0; - -webkit-transform: translateY(-100%); - } - 100% { - opacity: 1; - -webkit-transform: translateY(0); - } -} -@keyframes uk-fade-top { - 0% { - opacity: 0; - transform: translateY(-100%); - } - 100% { - opacity: 1; - transform: translateY(0); - } -} -/* - * Bottom - */ -@-webkit-keyframes uk-fade-bottom { - 0% { - opacity: 0; - -webkit-transform: translateY(100%); - } - 100% { - opacity: 1; - -webkit-transform: translateY(0); - } -} -@keyframes uk-fade-bottom { - 0% { - opacity: 0; - transform: translateY(100%); - } - 100% { - opacity: 1; - transform: translateY(0); - } -} -/* - * Left - */ -@-webkit-keyframes uk-fade-left { - 0% { - opacity: 0; - -webkit-transform: translateX(-100%); - } - 100% { - opacity: 1; - -webkit-transform: translateX(0); - } -} -@keyframes uk-fade-left { - 0% { - opacity: 0; - transform: translateX(-100%); - } - 100% { - opacity: 1; - transform: translateX(0); - } -} -/* - * Right - */ -@-webkit-keyframes uk-fade-right { - 0% { - opacity: 0; - -webkit-transform: translateX(100%); - } - 100% { - opacity: 1; - -webkit-transform: translateX(0); - } -} -@keyframes uk-fade-right { - 0% { - opacity: 0; - transform: translateX(100%); - } - 100% { - opacity: 1; - transform: translateX(0); - } -} -/* Keyframes: Fade with scale - ========================================================================== */ -/* - * Scale by 0.2 - */ -@-webkit-keyframes uk-fade-scale-02 { - 0% { - opacity: 0; - -webkit-transform: scale(0.2); - } - 100% { - opacity: 1; - -webkit-transform: scale(1); - } -} -@keyframes uk-fade-scale-02 { - 0% { - opacity: 0; - transform: scale(0.2); - } - 100% { - opacity: 1; - transform: scale(1); - } -} -/* - * Scale by 1.5 - * Used by slideshow component - */ -@-webkit-keyframes uk-fade-scale-15 { - 0% { - opacity: 0; - -webkit-transform: scale(1.5); - } - 100% { - opacity: 1; - -webkit-transform: scale(1); - } -} -@keyframes uk-fade-scale-15 { - 0% { - opacity: 0; - transform: scale(1.5); - } - 100% { - opacity: 1; - transform: scale(1); - } -} -/* - * Scale by 1.8 - */ -@-webkit-keyframes uk-fade-scale-18 { - 0% { - opacity: 0; - -webkit-transform: scale(1.8); - } - 100% { - opacity: 1; - -webkit-transform: scale(1); - } -} -@keyframes uk-fade-scale-18 { - 0% { - opacity: 0; - transform: scale(1.8); - } - 100% { - opacity: 1; - transform: scale(1); - } -} -/* Keyframes: Slide - * Used by slideshow component - ========================================================================== */ -/* - * Left - */ -@-webkit-keyframes uk-slide-left { - 0% { - -webkit-transform: translateX(-100%); - } - 100% { - -webkit-transform: translateX(0); - } -} -@keyframes uk-slide-left { - 0% { - transform: translateX(-100%); - } - 100% { - transform: translateX(0); - } -} -/* - * Right - */ -@-webkit-keyframes uk-slide-right { - 0% { - -webkit-transform: translateX(100%); - } - 100% { - -webkit-transform: translateX(0); - } -} -@keyframes uk-slide-right { - 0% { - transform: translateX(100%); - } - 100% { - transform: translateX(0); - } -} -/* - * Left third - */ -@-webkit-keyframes uk-slide-left-33 { - 0% { - -webkit-transform: translateX(33%); - } - 100% { - -webkit-transform: translateX(0); - } -} -@keyframes uk-slide-left-33 { - 0% { - transform: translateX(33%); - } - 100% { - transform: translateX(0); - } -} -/* - * Right third - */ -@-webkit-keyframes uk-slide-right-33 { - 0% { - -webkit-transform: translateX(-33%); - } - 100% { - -webkit-transform: translateX(0); - } -} -@keyframes uk-slide-right-33 { - 0% { - transform: translateX(-33%); - } - 100% { - transform: translateX(0); - } -} -/* Keyframes: Scale - ========================================================================== */ -@-webkit-keyframes uk-scale-12 { - 0% { - -webkit-transform: scale(1.2); - } - 100% { - -webkit-transform: scale(1); - } -} -@keyframes uk-scale-12 { - 0% { - transform: scale(1.2); - } - 100% { - transform: scale(1); - } -} -/* Keyframes: Rotate - * Used by icon and search component - ========================================================================== */ -@-webkit-keyframes uk-rotate { - 0% { - -webkit-transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - } -} -@keyframes uk-rotate { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(359deg); - } -} -/* Keyframes: Shake - ========================================================================== */ -@-webkit-keyframes uk-shake { - 0%, - 100% { - -webkit-transform: translateX(0); - } - 10% { - -webkit-transform: translateX(-9px); - } - 20% { - -webkit-transform: translateX(8px); - } - 30% { - -webkit-transform: translateX(-7px); - } - 40% { - -webkit-transform: translateX(6px); - } - 50% { - -webkit-transform: translateX(-5px); - } - 60% { - -webkit-transform: translateX(4px); - } - 70% { - -webkit-transform: translateX(-3px); - } - 80% { - -webkit-transform: translateX(2px); - } - 90% { - -webkit-transform: translateX(-1px); - } -} -@keyframes uk-shake { - 0%, - 100% { - transform: translateX(0); - } - 10% { - transform: translateX(-9px); - } - 20% { - transform: translateX(8px); - } - 30% { - transform: translateX(-7px); - } - 40% { - transform: translateX(6px); - } - 50% { - transform: translateX(-5px); - } - 60% { - transform: translateX(4px); - } - 70% { - transform: translateX(-3px); - } - 80% { - transform: translateX(2px); - } - 90% { - transform: translateX(-1px); - } -} -/* Keyframes: Fade with slide fixed - * Used by dropdown and search component - ========================================================================== */ -/* - * Top fixed - */ -@-webkit-keyframes uk-slide-top-fixed { - 0% { - opacity: 0; - -webkit-transform: translateY(-10px); - } - 100% { - opacity: 1; - -webkit-transform: translateY(0); - } -} -@keyframes uk-slide-top-fixed { - 0% { - opacity: 0; - transform: translateY(-10px); - } - 100% { - opacity: 1; - transform: translateY(0); - } -} -/* - * Bottom fixed - */ -@-webkit-keyframes uk-slide-bottom-fixed { - 0% { - opacity: 0; - -webkit-transform: translateY(10px); - } - 100% { - opacity: 1; - -webkit-transform: translateY(0); - } -} -@keyframes uk-slide-bottom-fixed { - 0% { - opacity: 0; - transform: translateY(10px); - } - 100% { - opacity: 1; - transform: translateY(0); - } -} -/* ======================================================================== - Component: Dropdown - ========================================================================== */ -/* - * 1. Hide by default - * 2. Set position - * 3. Box-sizing is needed for `uk-dropdown-justify` - * 4. Set style - * 5. Reset button group whitespace hack - */ -.uk-dropdown { - /* 1 */ - display: none; - /* 2 */ - position: absolute; - top: 100%; - left: 0; - z-index: 1020; - /* 3 */ - -moz-box-sizing: border-box; - box-sizing: border-box; - /* 4 */ - width: 200px; - margin-top: 5px; - padding: 15px; - background: #f5f5f5; - color: #444444; - /* 5 */ - font-size: 1rem; - vertical-align: top; -} -/* - * 1. Show dropdown - * 2. Set animation - * 3. Needed for scale animation - */ -.uk-open > .uk-dropdown { - /* 1 */ - display: block; - /* 2 */ - -webkit-animation: uk-fade 0.2s ease-in-out; - animation: uk-fade 0.2s ease-in-out; - /* 3 */ - -webkit-transform-origin: 0 0; - transform-origin: 0 0; -} -/* Alignment modifiers - ========================================================================== */ -/* - * Modifier `uk-dropdown-flip` - */ -.uk-dropdown-flip { - left: auto; - right: 0; -} -/* - * Modifier `uk-dropdown-up` - */ -.uk-dropdown-up { - top: auto; - bottom: 100%; - margin-top: auto; - margin-bottom: 5px; -} -/* Nav in dropdown - ========================================================================== */ -.uk-dropdown .uk-nav { - margin: 0 -15px; -} -/* Grid and panel in dropdown - ========================================================================== */ -/* -* Vertical gutter -*/ -/* - * Grid - * Higher specificity to override large gutter - */ -.uk-grid .uk-dropdown-grid + .uk-dropdown-grid { - margin-top: 15px; -} -/* Panels */ -.uk-dropdown-grid > [class*='uk-width-'] > .uk-panel + .uk-panel { - margin-top: 15px; -} -/* Tablet and bigger */ -@media (min-width: 768px) { - /* - * Horizontal gutter - */ - .uk-dropdown:not(.uk-dropdown-stack) > .uk-dropdown-grid { - margin-left: -15px; - margin-right: -15px; - } - .uk-dropdown:not(.uk-dropdown-stack) > .uk-dropdown-grid > [class*='uk-width-'] { - padding-left: 15px; - padding-right: 15px; - } - /* - * Column divider - */ - .uk-dropdown:not(.uk-dropdown-stack) > .uk-dropdown-grid > [class*='uk-width-']:nth-child(n+2) { - border-left: 1px solid #dddddd; - } - /* - * Width multiplier for dropdown columns - */ - .uk-dropdown-width-2:not(.uk-dropdown-stack) { - width: 400px; - } - .uk-dropdown-width-3:not(.uk-dropdown-stack) { - width: 600px; - } - .uk-dropdown-width-4:not(.uk-dropdown-stack) { - width: 800px; - } - .uk-dropdown-width-5:not(.uk-dropdown-stack) { - width: 1000px; - } -} -/* Phone landscape and smaller */ -@media (max-width: 767px) { - /* - * Stack columns and take full width - */ - .uk-dropdown-grid > [class*='uk-width-'] { - width: 100%; - } - /* - * Vertical gutter - */ - .uk-dropdown-grid > [class*='uk-width-']:nth-child(n+2) { - margin-top: 15px; - } -} -/* -* Stack grid columns -*/ -.uk-dropdown-stack > .uk-dropdown-grid > [class*='uk-width-'] { - width: 100%; -} -.uk-dropdown-stack > .uk-dropdown-grid > [class*='uk-width-']:nth-child(n+2) { - margin-top: 15px; -} -/* Modifier `uk-dropdown-small` - ========================================================================== */ -/* - * Set min-width and text expands dropdown if needed - */ -.uk-dropdown-small { - min-width: 150px; - width: auto; - padding: 5px; - white-space: nowrap; -} -/* - * Nav in dropdown - */ -.uk-dropdown-small .uk-nav { - margin: 0 -5px; -} -/* Modifier: `uk-dropdown-navbar` - ========================================================================== */ -.uk-dropdown-navbar { - margin-top: 0; - background: #f5f5f5; - color: #444444; -} -.uk-open > .uk-dropdown-navbar { - -webkit-animation: uk-slide-top-fixed 0.2s ease-in-out; - animation: uk-slide-top-fixed 0.2s ease-in-out; -} -/* Modifier `uk-dropdown-scrollable` - ========================================================================== */ -/* - * Usefull for long lists - */ -.uk-dropdown-scrollable { - overflow-y: auto; - max-height: 200px; -} -/* ======================================================================== - Component: Modal - ========================================================================== */ -/* - * This is the modal overlay and modal dialog container - * 1. Hide by default - * 2. Set fixed position - * 3. Allow scrolling for the modal dialog - * 4. Mask the background page - * 5. Fade-in transition - */ -.uk-modal { - /* 1 */ - display: none; - /* 2 */ - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1010; - /* 3 */ - overflow-y: auto; - -webkit-overflow-scrolling: touch; - /* 4 */ - background: rgba(0, 0, 0, 0.6); - /* 5 */ - opacity: 0; - -webkit-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -/* - * Open state - */ -.uk-modal.uk-open { - opacity: 1; -} -/* - * Prevents duplicated scrollbar caused by 4. - */ -.uk-modal-page, -.uk-modal-page body { - overflow: hidden; -} -/* Sub-object: `uk-modal-dialog` - ========================================================================== */ -/* - * 1. Create position context for `uk-modal-dialog-frameless` - * 2. Set box sizing - * 3. Set style - * 4. Slide-in transition - */ -.uk-modal-dialog { - /* 1 */ - position: relative; - /* 2 */ - -moz-box-sizing: border-box; - box-sizing: border-box; - margin: 50px auto; - padding: 20px; - width: 600px; - max-width: 100%; - max-width: calc(100% - 20px); - /* 3 */ - background: #ffffff; - /* 4 */ - opacity: 0; - -webkit-transform: translateY(-100px); - transform: translateY(-100px); - -webkit-transition: opacity 0.3s linear, -webkit-transform 0.3s ease-out; - transition: opacity 0.3s linear, transform 0.3s ease-out; -} -/* Phone landscape and smaller */ -@media (max-width: 767px) { - /* - * Fit in small screen - */ - .uk-modal-dialog { - width: auto; - margin: 10px; - } -} -/* - * Open state - */ -.uk-open .uk-modal-dialog { - /* 4 */ - opacity: 1; - -webkit-transform: translateY(0); - transform: translateY(0); -} -/* - * Remove margin from the last-child - */ -.uk-modal-dialog > :last-child { - margin-bottom: 0; -} -/* Close in modal - ========================================================================== */ -.uk-modal-dialog > .uk-close:first-child { - margin: -10px -10px 0 0; - float: right; -} -/* - * Remove margin from adjacent element - */ -.uk-modal-dialog > .uk-close:first-child + * { - margin-top: 0; -} -/* Modifier: `uk-modal-dialog-frameless` - ========================================================================== */ -.uk-modal-dialog-frameless { - padding: 0; -} -/* - * Close in modal - */ -.uk-modal-dialog-frameless > .uk-close:first-child { - position: absolute; - top: -12px; - right: -12px; - margin: 0; - float: none; -} -/* Phone landscape and smaller */ -@media (max-width: 767px) { - .uk-modal-dialog-frameless > .uk-close:first-child { - top: -7px; - right: -7px; - } -} -/* Modifier: `uk-modal-dialog-large` - ========================================================================== */ -/* Tablet and bigger */ -@media (min-width: 768px) { - .uk-modal-dialog-large { - width: 930px; - } -} -/* Large screen and bigger */ -@media (min-width: 1220px) { - .uk-modal-dialog-large { - width: 1130px; - } -} -/* ======================================================================== - Component: Off-canvas - ========================================================================== */ -/* - * This is the offcanvas overlay and bar container - * 1. Hide by default - * 2. Set fixed position - * 3. Mask the background page - */ -.uk-offcanvas { - /* 1 */ - display: none; - /* 2 */ - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1000; - /* 3 */ - background: rgba(0, 0, 0, 0.1); -} -.uk-offcanvas.uk-active { - display: block; -} -/* Sub-object `uk-offcanvas-page` - ========================================================================== */ -/* - * Prepares the whole HTML page to slide-out - * 1. Fix the main page and disallow scrolling - * 2. Side-out transition - */ -.uk-offcanvas-page { - /* 1 */ - position: fixed; - /* 2 */ - -webkit-transition: margin-left 0.3s ease-in-out; - transition: margin-left 0.3s ease-in-out; -} -/* Sub-object `uk-offcanvas-bar` - ========================================================================== */ -/* - * This is the offcanvas bar - * 1. Set fixed position - * 2. Size and style - * 3. Allow scrolling - * 4. Side-out transition - */ -.uk-offcanvas-bar { - /* 1 */ - position: fixed; - top: 0; - bottom: 0; - left: 0; - -webkit-transform: translateX(-100%); - transform: translateX(-100%); - z-index: 1001; - /* 2 */ - width: 270px; - max-width: 100%; - background: #333333; - /* 3 */ - overflow-y: auto; - -webkit-overflow-scrolling: touch; - /* 4 */ - -webkit-transition: -webkit-transform 0.3s ease-in-out; - transition: transform 0.3s ease-in-out; -} -.uk-offcanvas.uk-active .uk-offcanvas-bar.uk-offcanvas-bar-show { - -webkit-transform: translateX(0%); - transform: translateX(0%); -} -/* Modifier `uk-offcanvas-bar-flip` - ========================================================================== */ -.uk-offcanvas-bar-flip { - left: auto; - right: 0; - -webkit-transform: translateX(100%); - transform: translateX(100%); -} -/* Panel in offcanvas - ========================================================================== */ -.uk-offcanvas .uk-panel { - margin: 20px 15px; - color: #777777; -} -.uk-offcanvas .uk-panel-title { - color: #cccccc; -} -.uk-offcanvas .uk-panel a:not([class]) { - color: #cccccc; -} -.uk-offcanvas .uk-panel a:not([class]):hover { - color: #ffffff; -} -/* ======================================================================== - Component: Switcher - ========================================================================== */ -.uk-switcher { - margin: 0; - padding: 0; - list-style: none; -} -/* - * Items - */ -.uk-switcher > *:not(.uk-active) { - display: none; -} -/* ======================================================================== - Component: Tooltip - ========================================================================== */ -/* - * 1. Hide by default - * 2. Set fixed position - * 3. Set dimensions - * 4. Set style - */ -.uk-tooltip { - /* 1 */ - display: none; - /* 2 */ - position: absolute; - z-index: 1030; - /* 3 */ - -moz-box-sizing: border-box; - box-sizing: border-box; - max-width: 200px; - padding: 5px 8px; - /* 4 */ - background: #333333; - color: rgba(255, 255, 255, 0.7); - font-size: 12px; - line-height: 18px; - text-align: center; -} -/* Triangle - ========================================================================== */ -/* - * 1. Dashed is less antialised than solid - */ -.uk-tooltip:after { - content: ""; - display: block; - position: absolute; - width: 0; - height: 0; - /* 1 */ - border: 5px dashed #333333; -} -/* Direction modifiers - ========================================================================== */ -/* - * Top - */ -.uk-tooltip-top:after, -.uk-tooltip-top-left:after, -.uk-tooltip-top-right:after { - bottom: -5px; - border-top-style: solid; - border-bottom: none; - border-left-color: transparent; - border-right-color: transparent; - border-top-color: #333333; -} -/* - * Bottom - */ -.uk-tooltip-bottom:after, -.uk-tooltip-bottom-left:after, -.uk-tooltip-bottom-right:after { - top: -5px; - border-bottom-style: solid; - border-top: none; - border-left-color: transparent; - border-right-color: transparent; - border-bottom-color: #333333; -} -/* - * Top/Bottom center - */ -.uk-tooltip-top:after, -.uk-tooltip-bottom:after { - left: 50%; - margin-left: -5px; -} -/* - * Top/Bottom left - */ -.uk-tooltip-top-left:after, -.uk-tooltip-bottom-left:after { - left: 10px; -} -/* - * Top/Bottom right - */ -.uk-tooltip-top-right:after, -.uk-tooltip-bottom-right:after { - right: 10px; -} -/* - * Left - */ -.uk-tooltip-left:after { - right: -5px; - top: 50%; - margin-top: -5px; - border-left-style: solid; - border-right: none; - border-top-color: transparent; - border-bottom-color: transparent; - border-left-color: #333333; -} -/* - * Right - */ -.uk-tooltip-right:after { - left: -5px; - top: 50%; - margin-top: -5px; - border-right-style: solid; - border-left: none; - border-top-color: transparent; - border-bottom-color: transparent; - border-right-color: #333333; -} -/* ======================================================================== - Component: Text - ========================================================================== */ -/* Size modifiers - ========================================================================== */ -.uk-text-small { - font-size: 11px; - line-height: 16px; -} -.uk-text-large { - font-size: 18px; - line-height: 24px; - font-weight: normal; -} -/* Weight modifiers - ========================================================================== */ -.uk-text-bold { - font-weight: bold; -} -/* Color modifiers - ========================================================================== */ -.uk-text-muted { - color: #999999 !important; -} -.uk-text-primary { - color: #2d7091 !important; -} -.uk-text-success { - color: #659f13 !important; -} -.uk-text-warning { - color: #e28327 !important; -} -.uk-text-danger { - color: #d85030 !important; -} -/* Alignment modifiers - ========================================================================== */ -.uk-text-left { - text-align: left !important; -} -.uk-text-right { - text-align: right !important; -} -.uk-text-center { - text-align: center !important; -} -.uk-text-justify { - text-align: justify !important; -} -.uk-text-top { - vertical-align: top !important; -} -.uk-text-middle { - vertical-align: middle !important; -} -.uk-text-bottom { - vertical-align: bottom !important; -} -/* Only tablets portrait */ -@media (max-width: 959px) { - .uk-text-center-medium { - text-align: center !important; - } -} -/* Phone landscape and smaller */ -@media (max-width: 767px) { - .uk-text-center-small { - text-align: center !important; - } -} -/* Wrap modifiers - ========================================================================== */ -/* - * Prevent text from wrapping onto multiple lines - */ -.uk-text-nowrap { - white-space: nowrap; -} -/* - * Prevent text from wrapping onto multiple lines, and truncate with an ellipsis - */ -.uk-text-truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -/* - * Break strings if their length exceeds the width of their container - */ -.uk-text-break { - word-wrap: break-word; - -webkit-hyphens: auto; - -ms-hyphens: auto; - -moz-hyphens: auto; - hyphens: auto; -} -/* ======================================================================== - Component: Utility - ========================================================================== */ -/* Container - ========================================================================== */ -.uk-container { - -moz-box-sizing: border-box; - box-sizing: border-box; - max-width: 980px; - padding: 0 25px; -} -/* Large screen and bigger */ -@media (min-width: 1220px) { - .uk-container { - max-width: 1200px; - padding: 0 35px; - } -} -/* - * Micro clearfix - */ -.uk-container:before, -.uk-container:after { - content: " "; - display: table; -} -.uk-container:after { - clear: both; -} -/* - * Center container - */ -.uk-container-center { - margin-left: auto; - margin-right: auto; -} -/* Clearing - ========================================================================== */ -/* - * Micro clearfix - */ -.uk-clearfix:before, -.uk-clearfix:after { - content: " "; - display: table; -} -.uk-clearfix:after { - clear: both; -} -/* - * Create a new block formatting context - */ -.uk-nbfc { - overflow: hidden; -} -.uk-nbfc-alt { - display: table-cell; - width: 10000px; -} -/* Alignment of block elements - ========================================================================== */ -/* - * Float blocks - * 1. Prevent content overflow on small devices - */ -.uk-float-left { - float: left; -} -.uk-float-right { - float: right; -} -/* 1 */ -[class*='uk-float-'] { - max-width: 100%; -} -/* Alignment of images and objects - ========================================================================== */ -/* - * Alignment - */ -[class*='uk-align-'] { - display: block; - margin-bottom: 15px; -} -.uk-align-left { - margin-right: 15px; - float: left; -} -.uk-align-right { - margin-left: 15px; - float: right; -} -/* Tablet and bigger */ -@media (min-width: 768px) { - .uk-align-medium-left { - margin-right: 15px; - margin-bottom: 15px; - float: left; - } - .uk-align-medium-right { - margin-left: 15px; - margin-bottom: 15px; - float: right; - } -} -.uk-align-center { - margin-left: auto; - margin-right: auto; -} -/* Vertical alignment - ========================================================================== */ -/* - * Remove whitespace between child elements when using `inline-block` - */ -.uk-vertical-align { - font-size: 0.001px; -} -/* - * The `uk-vertical-align` container needs a specific height - */ -.uk-vertical-align:before { - content: ''; - display: inline-block; - height: 100%; - vertical-align: middle; -} -/* - * Sub-object which can have any height - * 1. Reset whitespace hack - */ -.uk-vertical-align-middle, -.uk-vertical-align-bottom { - display: inline-block; - max-width: 100%; - /* 1 */ - font-size: 1rem; -} -.uk-vertical-align-middle { - vertical-align: middle; -} -.uk-vertical-align-bottom { - vertical-align: bottom; -} -/* Height - ========================================================================== */ -/* - * More robust if padding and border are used - */ -[class*='uk-height'] { - -moz-box-sizing: border-box; - box-sizing: border-box; -} -/* - * Useful to extend the `html` and `body` element to the full height of the page. - */ -.uk-height-1-1 { - height: 100%; -} -/* - * Useful to create image teasers - */ -.uk-height-viewport { - height: 100vh; - min-height: 600px; -} -/* Responsive objects - * Note: Images are already responsive by default, see Base component - ========================================================================== */ -/* - * 1. Corrects `max-width` and `max-height` behavior if padding and border are used - */ -.uk-responsive-width, -.uk-responsive-height { - -moz-box-sizing: border-box; - box-sizing: border-box; -} -/* - * Responsiveness: Sets a maximum width relative to the parent and auto scales the height - */ -.uk-responsive-width { - max-width: 100%; - height: auto; -} -/* - * Responsiveness: Sets a maximum height relative to the parent and auto scales the width - * Only works if the parent element has a fixed height. - */ -.uk-responsive-height { - max-height: 100%; - width: auto; -} -/* Margin - ========================================================================== */ -/* - * Create a block with the same margin of a paragraph - * Add margin if adjacent element - */ -.uk-margin { - margin-bottom: 15px; -} -* + .uk-margin { - margin-top: 15px; -} -.uk-margin-top { - margin-top: 15px !important; -} -.uk-margin-bottom { - margin-bottom: 15px !important; -} -.uk-margin-left { - margin-left: 15px !important; -} -.uk-margin-right { - margin-right: 15px !important; -} -/* - * Larger margins - */ -.uk-margin-large { - margin-bottom: 50px; -} -* + .uk-margin-large { - margin-top: 50px; -} -.uk-margin-large-top { - margin-top: 50px !important; -} -.uk-margin-large-bottom { - margin-bottom: 50px !important; -} -.uk-margin-large-left { - margin-left: 50px !important; -} -.uk-margin-large-right { - margin-right: 50px !important; -} -/* - * Smaller margins - */ -.uk-margin-small { - margin-bottom: 5px; -} -* + .uk-margin-small { - margin-top: 5px; -} -.uk-margin-small-top { - margin-top: 5px !important; -} -.uk-margin-small-bottom { - margin-bottom: 5px !important; -} -.uk-margin-small-left { - margin-left: 5px !important; -} -.uk-margin-small-right { - margin-right: 5px !important; -} -/* - * Remove margins - */ -.uk-margin-remove { - margin: 0 !important; -} -.uk-margin-top-remove { - margin-top: 0 !important; -} -.uk-margin-bottom-remove { - margin-bottom: 0 !important; -} -/* Border - ========================================================================== */ -.uk-border-circle { - border-radius: 50%; -} -.uk-border-rounded { - border-radius: 5px; -} -/* Headings - ========================================================================== */ -/* Tablet and bigger */ -@media (min-width: 768px) { - .uk-heading-large { - font-size: 52px; - line-height: 64px; - } -} -/* Link - ========================================================================== */ -/* - * Let links appear in default text color - */ -.uk-link-muted, -.uk-link-muted a { - color: #444444; -} -.uk-link-muted:hover, -.uk-link-muted a:hover { - color: #444444; -} -/* - * Reset link style - */ -.uk-link-reset, -.uk-link-reset a, -.uk-link-reset:hover, -.uk-link-reset a:hover { - color: inherit; - text-decoration: none; -} -/* Scrollable - ========================================================================== */ -/* - * Enable scrolling for preformatted text - */ -.uk-scrollable-text { - height: 300px; - overflow-y: scroll; - -webkit-overflow-scrolling: touch; - resize: both; -} -/* - * Box with scrolling enabled - */ -.uk-scrollable-box { - -moz-box-sizing: border-box; - box-sizing: border-box; - height: 170px; - padding: 10px; - border: 1px solid #dddddd; - overflow: auto; - -webkit-overflow-scrolling: touch; - resize: both; -} -.uk-scrollable-box > :last-child { - margin-bottom: 0; -} -/* Overflow - ========================================================================== */ -/* - * Enable scrollbars if content is clipped - */ -.uk-overflow-container { - overflow: auto; - -webkit-overflow-scrolling: touch; -} -.uk-overflow-container > :last-child { - margin-bottom: 0; -} -/* Position - ========================================================================== */ -.uk-position-absolute { - position: absolute !important; -} -.uk-position-relative { - position: relative !important; -} -.uk-position-cover { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; -} -/* Display - ========================================================================== */ -/* - * Display - */ -.uk-display-block { - display: block !important; -} -.uk-display-inline { - display: inline !important; -} -.uk-display-inline-block { - display: inline-block !important; -} -/* - * Visibility - * Avoids setting display to `block` so it works also with `inline-block` and `table` - */ -/* Desktop and bigger */ -@media (min-width: 960px) { - .uk-visible-small { - display: none !important; - } - .uk-visible-medium { - display: none !important; - } - .uk-hidden-large { - display: none !important; - } -} -/* Tablets portrait */ -@media (min-width: 768px) and (max-width: 959px) { - .uk-visible-small { - display: none !important; - } - .uk-visible-large { - display: none !important ; - } - .uk-hidden-medium { - display: none !important; - } -} -/* Phone landscape and smaller*/ -@media (max-width: 767px) { - .uk-visible-medium { - display: none !important; - } - .uk-visible-large { - display: none !important; - } - .uk-hidden-small { - display: none !important; - } -} -/* Remove from the flow and screen readers on any device */ -.uk-hidden { - display: none !important; - visibility: hidden !important; -} -/* It's hidden, but still affects layout */ -.uk-invisible { - visibility: hidden !important; -} -/* Show on hover */ -.uk-visible-hover:hover .uk-hidden, -.uk-visible-hover:hover .uk-invisible { - display: block !important; - visibility: visible !important; -} -.uk-visible-hover-inline:hover .uk-hidden, -.uk-visible-hover-inline:hover .uk-invisible { - display: inline-block !important; - visibility: visible !important; -} -/* ======================================================================== - Component: Print - ========================================================================== */ -@media print { - * { - background: transparent !important; - color: black !important; - box-shadow: none !important; - text-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - @page { - margin: 0.5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } -} diff --git a/src/user/plugins/admin/themes/grav/fonts/FontAwesome.otf b/src/user/plugins/admin/themes/grav/fonts/FontAwesome.otf deleted file mode 100644 index 681bdd4d4c8dddbaeb4d4f2a1f58c38cad92afe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106260 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�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 diff --git a/src/user/plugins/admin/themes/grav/fonts/fontawesome-webfont.eot b/src/user/plugins/admin/themes/grav/fonts/fontawesome-webfont.eot deleted file mode 100644 index a30335d748c65c0bab5880b4e6dba53f5c79206c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68875 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

7r8$?kb-D3z%-c} zLGfT`Wgm|$rwl&#jtEO8m)B!}oJ%(Y(1ZpeX!jfRK-wF?K|$LJuR~GdFpZL6EFp`H zFKc0?nf7)Jf~F8p9HP&6>OukC5dGx?Lbp8aZlyokWnzO{9f)9Eq=#VZ7oiJ19s_!U zKW^~F>qJP)$b+)$=5eqeuG%y_w~>W__r-D==WEwAxVHj#)B_QUqxOXBKA6BVKtLV$ zeYs+6ok?ZcBZ_E1nA7T;NjXlMlK3JMiknHuDCa2YDNa?#w8DpW+T2cSC2M~TY-&wp zU=khxHW;gbNOh@tL0WYr7+)8f*BopgUOjD}9Sue!X}rYPSzzq`X6Jr9J^El!nt7rV z-_LH88z|i8Lf(KFYzaW0B#NadwasYMt8x{fU74SMic0x(f<}NeWU2xUzMvPuQlu^W z0H(G%lz`WhgCVEdN1-&y%W8{_2{ggKk(d32qf0jMy*XA;L`zXPgJ=&K3E8Hl5-dQw zYQV(9u;^tEc=1P+CI+eu?p|QD(P+jL$ekSt-ql0w(gO@4M}h)q)&}d|3_!rXg}SO zNrzoRU12}4XW<~;c*q6wOIJih1VWbs-|gw$+;G&(?Hva3U%)z=Vh`p2;zsw{Hia)# zA#g}8ml%R60_?+hRS2l4a4$KYl)Ar6n>>S|?D|w-aL1fcG9nG7sr zTsw*AJG|Ot+~KTnGQA$0gs|wP60!-?EDjgUs=(5%o3HZAv%UlZTETO4?{?>IU^*c$ zfI|HiFZLfT*?tJjLjJKzEz1;a__-+ROUle%X|Srh0}`8Aj*dpURv9Y}D~%N~Jt|-< ztFc(?yokf2zSQEgU4vSB1^L4&cCo%Cs4sz(S3$BalWL$y}7Ymr_P(^@sQPB(NB&YK}P)MVu%NjiN0U^T{=6 zuS3%ou{xqv054t-X;k2$#}2uVv;ZVZ$qM9f1Pwe=2>tcwlQhdOypTc9CvkuayHdcn z?cQHu@yNNnk6J*e7KI}R;;@6(k{MnT1tV}p*H`1=gdlI;KroJR{d1w1c%Z<>;Fr$$ zs~90Ny7d$SuD78XKdMr2NEFSr5~W9sXq9Vu-{^0563Au-`^3zbOaY3z>Hn@Zfb4Vu z0vg(ibV4S=RWdkhXl9HOTqp$%L?T3UJ9sZNfOm6_G+1&Z;*!bXNn#N|Pb7-Ts3UwQ zlBN5KkHZ?Uu;26>j4v4(hfJe{BrX&)v5zCy46fxA;*~QI-Cl|W#u5mLj-~E)QKvSw zOOwMx{})jtMuUEhEr~mXgD(_GZ*&m323pEfy~k0lv?5}Fvx2unbibC6goRL|a%8nu z=*Q^2BR0hUy;^`y2E0jS21cpCNS%Z2M@zjqG(t_%z{;6R{yoI6_J4+g+TTFUm&lSns6m zq4GMm<~1lyAz(q0@V~M9JRA9en=atSBLeaV&5|?7T&A$5*E~ku>Se*PK@F4J-of3p zf~ygQi3`DA@C44^I%LxJ7y)YA!v9AESFFiht%#6SCSSKbfek0%ejZyN8^m$aKU?8$ zcjacpKYtPLq@Kf&zA>70>DFUyErOR_`|yPCaTR!BU(U^o(j%Kfkg%r`A~;@>bJdA= z5qTVKdeXKw1MYMYTOMdc%QTJsC@VIfbm0vP>MVm@SSV^mxu3Q-#H7#JOyGKum3p-c zAVeAc_ztmuUAH~7dZScBmu;za+5`?ik}!aX!d9}{FSAU&Wn!%+)%RQNb zT_Xye1j{iwDhEY!jB`%A6T+Ka(!P1O+`#6UfNR7DQ~#EvmO>FqoYLNr~%f zs#%lQ)PV-=$0~k4X>DgE>2Q~&+~uwM)>KNDr(q5ufV4i*%1QsZQz{%4zL|UH&*fN> zf(?GPYfb=nOgs(wG5lYvr8uXQdnE&!HF`xt4nU@iaZfV6C57t=1ljdfgph9_d+^8q z(y<*q^!66w^iZBre=<3`;8`#sVuA^{89TAE6ATz`9X#(jR5dgqK7EaWG}F+YoCY!N z`;_JGRWmbEPRL;rs;qqj}L8pX>m zEwAIf4GtC#>rV*KCAU5*TaAyOE(Bn0glhjI==&aL<`-jCu{)*Tqyos291*VDcpaGB z0$$9Kyaa4z-@t&NT*LNT@Jz&z$J~~>__hQKJp6Zoe9+K=gJjAO;1gGq$sUvC$f-HJ zP>R!Eq(NI><#-6P%1^Is)DaI1&oc8POdmv@yVeP6KNanDP9Z0!um?Z zc5slMebvf6YIx@ChBH+t=`PN5m4o0slgMbI7X1%oqLD~o6&dU;+l{(MgejrWOMtkT zmZcDZku1>I0;a(kqPGVH!SDlnOW=~-Is4S6?O31kvhr}@StWb@iqR$5mY=AB6nsm~Nb5t$9St z@eYSL5kh5A2)VEVYlfSJdbV%rWZcNJ9AnUe*S#N{t@b6!KBQ3OqP& zUx|4l$L*A~mO|JNL9V0FpT{iniWdzS#IQBfc(N5v!QMD1^SmfwAOm9naPgjwf$t)l z`m1{tO_`T*Q$kW`nGhK9p_X~vlSTMwhZ6l?u3Q(vv^wPm0Q_=r2pah~F`+5jhIHgZ z8!V!L)DztZ^W6z{YBml5vUOX57)z3cf8JKr8_@j9xyM$5EhIvV$a^^*dBy884CWJ? zU=rY|LIWU zdBFpUnN_6q$a+dnT%%G^{Y+C<^wp%|VFlmHiCe}O>V87Z2s$vjP#jVhCW@w8B>UK) zb1r+kijSezY^24mTH|%LrW;+o%T3c3M1$2ei4PZQAXjYY z@HpNqnxL{%JW2pl=mP=|jwU6Zff~Kc6rO~OA$TdqBXa*Z(%KDx)ksig&FLhatrf5S zp7O`6w+(y`Hv=|w902p$Vq86I=J}xXiOUh<1Ye06ZJP6*wq{@JhzD`A=bQL6wQnN)%L;ny86~&w(e6lpf6rgSMlK($cT7ZDxHy!-$NZ z;8RHh_@mL~;va@!^AfcGw%rJ~52_#3I%;=RF^rp+{e7Nt8l}U?I2ARzS)(+@u*ayy zV6QGW`1Fbj1W&gbCRQZ0g+{5Nh#|i11$3yAfAGW1AVl6hhZ zQY+R)U5<;guJ=AsmFf)*9-hbp;!wm!CCf4KWo|4STIYr^)in2Jp5%sr4{u)#C+%09 z&VYEaHx&b{H8BQx(i)OmQ%17S(L9b}5L|N@VeW~P=+Ybwb3KcteJme*66AuP0bO&+ z1qGc)mtFXcax{h9UDs~4XZ-s48Ffh9mx52Iqn;ko@>^0px$=WIWR2ushg`eLTqM*u z8U&H-_DZH}UvM1VQf_X40*tRMpX<*XM>W%=9D?wF5t{f#6yv1AQP8cyVZb^*wUWNs zJ?48?7M@otux$tctK54-&d&zj;%x3(PB7BII}Y^0tX$d+F3QUCh2x*Q)hdS=USu08 z>>tsjNey`}5UjvlpeAV-Ix34#2D4uhK;zi?nA#BIA)x+|=Kah&yaI*Uq76#HkXkr5 zvZ~)_HSF=bX-&r`v!SR9(|TQf%q#%oi70t({vz5d#QTZIwRNT27Nir>OV3?`~heshF0py}zPek+rr5>cmZOn;jN=P8kG&r-ObOMse zDP~Dvn6cj*?Cw2cSx?os_tHvT<^&~;;Px%HU4?hO3NZSGtRM?&=?TSQ@A6&fUF{20 zy6KX|S|CU)UB2AUj4g4m=JB%@2dB&dQm8{eagfplfC&wAy+ff<=Ob9oN< zJRsjeh_oweHD+~)o^FyWc>FLpVrOycmN-p52o8ntgH@IGwBL1*H(b_e{E^`vvbLYs zgPY$TWB{8dYYZlgv?GMIuGgqqUCFt=zWT#LU9X*V&pYxH5GWM?hzU&WrCygo6=H9J zs!g@a*XER-h`nby-V$>A4Y@4Ss5QySDPdf^6Pqac=K_vZaML*ZL;wUfO)F_-f~M!t z1AvqA|EK64{`pP-W6u%LK=WD^v5C2s0tE&iRi32A!Yr?*|KnxS+dNzp9UF}T*l3a&_Cj0-Ok z30BYpB9R%4Jz%py0!deR%^EP|>o@nJN!81B7;4HgWK>!blIn3UfmAtjQnMu1tfDLzFG-WP|_Sz7*N^2 zGu$?)ROl6z9WGeua1I#m&ht<6>v?sOHf1#Lis-eR?!ypl;z@7@?xZnLvjBx)Hi9a; znU}K*Hi(q)hZa0O!JxW)DUQoGRx#MwE5w{thSo`oVlVEWQTD@yQs?gf1V808s>9ml zsEwOyRC(YSFYcy92ez1kxzF$K&@%W0F+nt12LQ$TjM4f=m&Zp1Ocj<4LppWFk8!ad z?gjm%1-`*hs}_Fhdl(Th8rnHP;5si&S*iR<4fBHVJJubn>I<-7dtE*W#VTlwV)wX} z*~Ytx63Q)LTP&yu4&zEe%ljq@y7x0kw`=P?2S6n*S*%7XL^8`LWZtyvk&>`2R-tz* zB%s|H!xrDzqI@bRodF&tsC!F5oG>O_$qvFOOHv!s9=`Qw-5E`TP{dw=#Pj)bN4$R0 zbEg&*jF3O&xH(a$x;0Awk=kg<`M%`yd_o>5?Bwg?f&_TTqa#69Fs74$IKusCdxZg~ zGL*^y0Qj~P(9(EBCeFGvuUGd3V+I8T2Ib|;!+5&l;JQ*yO+BJFIRQyafGB}>wFf|& zK#w-U#;W1*uzP=wl%@etoDi&>yCDeW>Eu;640Zet*KCPQq)#%-Ui>=vA#Rsm&EUEZ zUBluAjdI0oScHG^L2!M^U7-sADVr5fBQ4BaZJ?+s2$<4rTN9` zA>>P3A8n%;77miy@5N2{~_ul&~<^3`%Uu zf}j{8PxGM&kL=IkUV2(ma3!v(Q6KH-kJR-5S3|YDGUsA!WI$+q@-`(Cc>(mm&rle! z<&woxb>T6H4QDLf0gF=~csU?S!(|drODqh@vG$>u4G0;c8osP}N>c)foMNL3Q=W@L zQj9c;=Fl#(OrZ`ou^Cm?;JB3eYcAg7kH^~Z9X8qZwUK*1Aj)Ckl({9T(F&yhZ*;NG zveM(U5f4+;rW|OHNhutQ0fIrU#5rNOVL5W+IETcE*QG@;Q5H|=TENP4MzI_E10P46 z^q@wn3W;Isn#yLtB0Ud(`dcjDX7abxd&_ZbhM+Uihl76QL91bOv_oA8de_f5uUl6| zJC`4AkYy3T%yf|H#Q?KF zc>|D!QUZe57A?+B4zGMt_{?pzX2D!jeKn>%FnHlVxKWn6q(0 zz^qZiN)4oRXt)*%$YMN*X^5pV?T)i%Kqp=r6D{Y`S#N12mMr7)K}i;!f#txTF9m)n za&wS|l7=K$r#tzB=l~1(D5Mi6bx@vu8l@B@rJ>^(1#Iz22?l^zfd|l_-rF<-Z8w4# z`*lDcGLan|piQ(paY%7>*8MFY^JN>=L^B<4+aAf(3wc!oKi#H`3z}h-8f-m-+alLl z0HAO}4~#8Jc|K`zCG2D!muGE( zpoM+XExtwX#OgsrYKA7s?PMdm61z=SvRFY5{)xX=a8XtqdlzPt@Q^($mV;|-kyvGX znn(buMZ`2la-vvp*KO&3F@a_*ZNfX(gHY^TfF8y82Pj#?I2LmCxhOshlbw+uj_8F@ zRV4FI$$!b`cfk5Yg*cN*0!{OvbKVymfoM4mhzRdqkX0;#P51^KmS|Cy$dcU;^o}gm zn$d6FdScdCgdKAZ_unA;o<7=}8#J()$s42`R@kKYD1ui?Xw_TMQCwp)Wx49kFW#;I zL_oX0X{o-zTzAD(xcIzZG$WZHI5ZhFH!R~GpXD~eTTRC`f|9cCz&AIG#dq{{7U(QV z%OGES*-MBPIYF@@&=RLeHxL#g4{UA8h=2SF5ks-5iTiGxWHL4dckua~h{73TQ;l>N zZZ4vntRzX@XeZRT3r{C|2ASJwA);D*5qKN~KHmc>G|xxxkzMBeVU$7LlXn^vb(RL7B00FD9kM!;Vc(&G6@)D z=mR+z7oysFLeZ1o4I#z?fHyG9ZS9dbeV0|WaC}ChQ*f} zDg>8(>;2*GIO%R@PlOkoqnU~H8;uxtyO0KxvCCQ-ze%A0&DCKF5xkR12#z7~-0Imz zCsk5jhq-ycveW@DyBwV*(%@ilBxTRdBe29UD3D4G2MHP(25^-fTktw1H9M|73@s`wqfCjwVb?fn zi{ey4n7TL&nU|fa17a}UxhQB5{6xXoYdQu9bLcDvTn0);*N2JKFihv3CBtA|`+|Ps zxKv&TA`*B@o#DaMR~a3XNO5nGy5S_@Zz>ZwWkE&@)jtmk=D65ELKb|da}jzQUU=I| zYle}r!-i#IKel8(OtL81EpwBWX#CdXEecJGH3^~AaUxk+i>3{N#(pX!5(@F+4U5qu z3pHdaT{7fdFd@JYl-|r=`USwU;VmrN6p!fmPUOG3?aUqEQWnBuwk5&v+W;xL8F#*N zP!AKz97%42zIYI*b2MZraa?^%n(f2CA>KDaL^Y}7V)Zf%>@BJu6pS4eBHIWUXh}oQ zdQEpi0<*Mu8)bDzTd{clcnwP(SLb+O70^F@2^nv9B9)b@o5$#z4L1Xg*U`%l;nuT~ zMiV^f;*BEqQ~Jd`^jsGy+ur zc)SrgxpTM2+|Ax8;YUl$2=B`Xm^>+eP;@y}Dt(hT+k^-z`1^!h2>am$uI#ayEHrAO z3mK6kc94CaW$0#EhyZCy;ONyOC=h4D&kk7nJ!zom!MLA0Yy{WRixS65ri1R#^79tN zFi97UdnXkhyl_L*A}L24hjDW)%D=fdEd)JcLI z3%4;_F~{3a>W;=WYYkw^K(ImeG&F=Z_iavcWG1Xx+@;#MU*Ic6Xnrh=E<50I!oe;? zpsYoz&o`ja1c+PKM2A@y1`+6;vj&IcJN=XC(Dl1HmDlG>(C~8# zCr`=B0BS_ljF(VNp&`8Nv>}ROI|M8f=nWCe3I?A*A!Lz`wp2zGeaSu0oZrBp0P?*L z-ogyHa8jXf0%K@nRjgibYe10LsgF7Q{z5@9wTMKA8GOElKW%2`jGz_a()K&ujX!3V zWSv)DgJD+DKS>@OZjc!(CejMO_!oyx?$L*&hPc5^W`J3LYXMEv@`Nd4W0TlhiUol) z)E8o5PM%4p+O>o*@vEo;LK=?r1|&s|$^3nw~wpz>4s6 zJ`%@)DLvS6e3&EY1)=`Xfw0 z2!ME9Xnjwfdtp^dl~w66n$1io2|=vx8`0bdwu5W~ZcB;iPydvHypJHq&$mEpiKl9z z(Dn#ITWB+c07f&!aA$OzGJ5fvM9gP2Jk0%QBdOwp%4DU{`wdl$dq| zn>9gPRKT;d{z;Y|HqLGKO-_XbbmAK7So?5}MzDlIyhvylvLJVi#fZplgDO4PEnMf2 zdU3e~`!xS7bF?fYNR}fRkO+g%)P0iQV$L$1b@XXUCG+INR#w|&*$n;GYLiZ;_S1N& z)q5^c9V##Zurw&>$!d!QLT}=!OcD^gx!N-naOyOIUGP50UTXFhf=p5r0+*Di{N62Z z;s;3_L-Rky8Og6Zay`)+l$Zw^uq8@>w07MQuxYJL0wcW@dv~%2>@ux+A(7ZS$vnTl zj+%WtudH%MAa&=>FR%>sldQ^S``Qgtu(Z;7I_kR)!36`?rr(M`%}ab&qoRpMH=*Kl z3zM3-5~UH66Ko^FNid1$Jmy;0gLR-ub!<+~N%0%EqbQK_lHlxZpYSa=T;v#=G)U~u z@*D_~tl`HTEps^ZZMh2%TH0aBXRI?7Y-5c_&_NnRQcn`&$HeKxW`GCzLAWb`hnu`O z3xy#oIF|y->4S`To>nFTB0uwcawgAa^w_dp#UUT-lmpskAYxYuN2p(ClW9Z4vU+p> z5G)dJ$YvA}nLmIOafAh~-*WUbN>KTJ=HLiKL`2WNb&(peqh=*8p9a@eRe9eGHZ#>w z_Z3oALz>+|-=er)p-^2z=Rggud}d@@sRncP!ucAObXGv;wWgx&H6lQT2w_IWpitr1 zEMa0IAZl3*0t6`dQ1xgdoJzdZqfc0(tA=`we*A<>)oH@$so_2!?HTX`(Gyz$WHkM`f@eO>9sGuVn3;L)7 z(6fnQt71xc!Ci?kP^Q<0up=8+v~T*@5=C!91Scq%TN?twj4tNfElc5cJlOm93o+!- zYQTU+MM(ge2xJ>tzm_U8Nr7b~fUepp{Kia1yn6z^Y&DiJ3FMse{^9>xDo4o4Nr_

MjT~HDem)#YNV}!)%NKBV=*$fkx6QQ6i^s@BkxFILM`8jk0 zXfbG4v}Z)>x$wz^PH_GfGtqXHRL40&M7JO~)rSEaEZ0E@6$9`JxSP^s64mfytiXHk zA6&_+{8+6;s+y1njZeo*P%_N>eI9ogXDBVGbyoQ}_rcx#l9(k25m?v$fQE`1ztn2Q`2oKv>Do9)hPk<^Qx$>9&lE>b2tCthjiiX{sD8i#ETOtCPf*vJ< zO8LANSRS4Q&Y934kDrsV$KiMkAPUHl`TULmIzOyG8~!wdj3)F3MX*A!;0p9;f>;CI zA(ny=3Zy5K4Ve!9?ocPK!;TV|St)lI!J@5P#{Gpj);bVufO_N%3KrF(0BDj!@{;=1 zm5_+|75R#bi%e8k>pv{G&pRXxSyBD4=D%|k*!5`?fSdb)nQI|q-zffG6JpxdO4Zp& z28pAg3@;u}5~1AvH+m%F>XB1&R3^7o3y^>^+$Ucul)CulvZ!K}R);CP+DLU-U>%bN zh!3hxug<4g7)MzFF)((8%_QiH(F`T(tSz|BY-BUE$aZziC^!O|n^R91`_C{OInEyS znDS;$emf+ji3p>}s9iBIgWVj712V~)qY)t(3han(m8)EXgV9VTw6bpiYBumb}v z^fd?=vU8-_G%~pYgwpL#gKk3s8+G2n4Bp7sx)?e`62bg?HFW}#T>RC65VIMy`PBj} zFwB5H5<3U(pJ43ygM%a2Ss;biZk3M;&_RLW%0(f*w{~?RtJMcViaUEieVjEx&Scu? zh7}$6E+9qZlhV2ld$dE^IwVg8O`zaPunQk$1B!YXf>bHV8HW74XEOIm_4n#neiQKq zK#PU*qEUpMac2T-FR^#t6pMHrY#p1rdc`6!A@llYd^Pn-g&gX_sc{K(^WhLWBH^U7 zNwkO^y>6(gmGOK?MI7AZe3vA;JGVuV*KS3M``}*_FM^gI#vbq>Ew@@p_qIuyd?E_O&%p3At>mU$1_F3Cq_eN z8^1-TQYa!a0t9Jcm5lg&#BAsaHzUVbXcz7R@Vz&`#LOSc;rjAMyIv z=zK3}n*y(gHmIaMm0VYuqrO7kkSM0H=`pS%0qGn3{NL=jA1N@&UBpHk4~mUM@!-tx zBY+8ybkD;AYDAOafD&Wfpr?F4zemSwgyvZP!qB3nL6b+$6CaHPcSmWj`ErD|Vzt%t zF=)gZe%K+I+-)f>w3$*bwWW?qiIqx5_{3}jU&f4y?Sc6;(8%nt!v=~3w3P|eiAt9= zA?e0aa2C)5;7y;7hT)o)T15R|H+m0$bBh(1`SzU3%%7y>mcXxKFcVOTgE` zh>K=j_6rKcUjkpoj4j}Vil*im>~uj#f+z)*ibv@vz>m2>@q~tVLO>3*teBBb$bqiabdai1T>>cAiMEsB3 z@JEL~ZSxpMSP|TG9-tOQvL7dam>l)Y$U6JfzwE3hks68=z4R<}9hQM);B7sBva0VJ zJ7}@de%u)@ydolpi7m*|>r(><;qqvB5fK=AbT9tAwI)Ly54N~hJOnN8m;U_0HZ)&i z^G?svl|AX)wx)?yFKz?w-)|kJY<9utmRvyt5v#28z(09<9!`}YB-$}?;M!I~Ps>7w zs&p4I=#=;rDsb(j+Q_ZXe(a6@h+aj->6xvH^rEODpmq1e zN)=JZPfR7(Awtu)F_jj)mzr+`6{XDyLx&Sgd_T$QW>_5-L4zQfc!0f;#n4PL;A)IK zEVFk4ru|uljvfi%D)`<3pcOVzlD-wCbV8~ffSG9^=o^}B8)wWeUW#m6@eyDbzi=%` z0|!VE!Y>>PKS%7Fb^buPHJ!i%>@13cDFx+~n^zz-a@WAPxwz%>D5@Knp?xm2klrdu z3`iCLAV#>VSvU9-n=e!zFt5j(-~%dE&*%8&f`B4Mj8c&0?2(TKq@cVFJMRVGc?S3I zTGt=O;Hc>ND}|;btA@MfpM87iptJoj*<@KvzZg`-P^ZgX;Be5E(k?{r%3Q3uLJnHX z0U;6kPPQ^XB8sa)>6Fa`nF3rvRY=Xct|{`L)+((5_a;xX7nRuqEyi|yL=Gw8R}k5h zTS(26Ese-GhItUiidK=vqgV1#GKLX0|5RcN`nC}Wx@MU#6`Z691FBjHP=zcSijGc2 z6UsX%*5o?~HM_^iMdG-w?Cb$SHH~cePnaXbItaCCTo6K0S?zlkNwFie5A|W1DWRDV zLGJo96Mxns&}LPtqa zn35OqH7_=QY7*#}-(KWvY0#f&4wTzL=#ThV&C;=YC)R>HoxPs|M#{-;43EKZq1w039W82tKZmwu(mK_L< z;AA8LS!|=!<~vkzJSc+e2?5S=;rJlMw;Sh!K0?3&gD4~0Pz2-fsDbVYMy2(Ee^FL2 zLX~kXf#r4#@sI~l(C2gw+Tah2HuX}zl#e(ZC{js_zA+=VFCMRCS2UvzW}OL0rc#s| zCZB|l)n2apHu8v*11q5Clh)yPDM2#KH3Qx8U%x=i8l+TGW8i=uhR`O zmWC6RNrLSm;W8#rA)W`21*?|`w#;%kluqj6j9F+5-1E#8l)+!N+)>s&+FN1uyLXIc z3nVMXn$_a-x%%~*N)K)g2kcznu zM-DS|Av{UJjVw6<5~Aq1b+o9Pb?JmMQ!=HI6sS~Z)q5UWHQpHwxvv`e1i&7F z?wd?|g;OVQu>jT>OC(-!fy%H9pA$u2{?Zvj5fn%#m?)%#kB5$1FeC=d+vt^5WGgrk zp*#e46CdRb=rs$J$o85a8=t?x%0;y}p*t+hnW zcE^F0xD1)8!Y^4t*_4}$ihC6ipA zjH^sKPYXFY^gWInz`<`5{~FMS^))*QX%~I^;l-_q0NJ)k5@Gsd5i{}T?wCZ{f%b?` zQve@aoi0^h+tR|66AwItc{!+K1u70mqKN<+9R)y@FAo=!Nu86k;<2X%`Cc61+2Ywpi0vC{nLTe}zfdMLiQZz?CW5s`4LgL9$w4p6eg!il& zJwYX!iMXlh$s$vqVjS+V&l*?qn#3Ghz>u0O7b^HR7n5JMFz8E*P!g1MB!$JRBuA)P zk~LUy$gS_(Z;Z$p=O=6$9t$lQ373mp^M5)-4M@r?;Bnpg+D07UhfrLtI?ZQrn1w5b zu&mRmB2b0gJP^qcU0}pO0VKN&5F#Q0%{lgi*rjz0EFUItTv~FEQ{1dMAHOd)s4CX@o)TcJV2q;iB>k)?@nf&i_2%Dr^@yz&hw2P13Uk9`MAi;Et^ zf=F9`Wz~V}3I+#%1$>K`99mA#Bm!v_-Vu4wKGw^+yCrHSB?1UrRiWvT47#*VDDqDaCau6|%j6Ox zg4P4U?Cc>SuP}E!xd3ZdQyAA*<$0kjoKZvUOIuPE`_s)YRaHFXLU!6i$^@3DhSlmE zB!q>W02xG28I_O030ZX>aM&m$W{vT}u|3{7Kt z3E5GQkr;^H{7hmjI8nwPq`j0Ug)$O(ex5!tI3gwovJa|>7!rrk>j1TAW6cG1!2ONH z3oo&gj6zAv9nb73A=0C;#->Si2NgD+cdDdFPr^<^67$%ejV^F* zGgryb9ga9)*tIx1Si+956{auxQ5GKS$TvE@q*X@VUr&tK9Cg6~_R>zY&@1Du#tUuM z!v%B;1Z)TU{F2dlLSNd0?oriMQasyhUEy6FmG|b;9^=YNQZ?~kFdv!x$w6|Wvh==H zMb5MJZo^bnfNZ4}$e}Dg5J=m+p{+psAi_DCZY`l12pNQBU@0Q2H5-~9_zCvPLJh_) znNR{PjjrbYXzD8q4q2=HL*Ji=ZkBwJE~k5kneV=#A3YbJ6jdcC;v|2|l9biwN3S!+ zQw4k(u9DD%N+)Niip`Ip*r<<1jIijJA*S8el&M53gP%dCDQNX_-7}Jpr?_(3R;20? zDjE7UvwbhElfuOzvhmOOwF()|C$pbXR2ScoY+C9l$ryTjt~UYE{>ET3=|#<;pUO(Y z0zOqN2ExLfZqi9XG9jjdGoCo;V@tA`?d%|#(hwrFl#1TrM#SwM-BagV;p~z(u89I0 z^q!r{ydORY1-eR>L`LA?E_>(X%*0o6r=&jwYVQ3@*IfJ+p`e4Iz%8B4m7@DTAaEJ> z!okWTY$DgNq%9MSBd#D4&YzkIL)1fHnNIJH}U2FK{*W% zQ8AZ;r)_1aRNJpAU9=+$Wu$R^lz<<>pxZZBoou2JIo;@o8BmnEj2s7-9To@oVik>M zYJ;l9U0Za$4+Yxy*!w#zJZ~ z!$#}ucehBeon4(~pX~Vq^H2+d*<`U_sK7Rd!UPdG-7r9OnH2YTu)$Y^CQC($MiWNR zd!>5c^{FcB$JcisVBf}8e!nsbEMSJ=?4hC-4`As>M6gkfd2eKc`wM{RYcw#Fl$4MG z-LiPxTx2SA_%abgfQ{9gMjAC{u~p?rt`c?gUK|9>B4R3v+an^ zO%&=Xc{Dy^jx{4D_DqN5OE?7Qu<3K52`Rx+i)7`j2*kiG1+Uh$)Z^({mNndvPH}${ zGPZ2OZ+D`firapIrfe9abD$*ZYa%+Q><>(evBeaZM8cSz4XE}h_>NNnoB+ins2GVG zFHRfXL4>mstX(S3h&V>m6m~RM*8t|=&Ag8agFotrkJH`~Y|O9uxl5eGhM1!Msr`cu zNk%|dhTSe1?HqMFKrv06+aTR;tqEsbm4TNZ=zclneHnI%@y!0`4V5-21iyRVGl_ypspc2>nW(41D{ zUl`F?7(W}*!5Ba+Z}S6)`3#cIZ6&|0ORmPjYY`Km{^1&F{mN1T>ZrY z2?g(%&C>&PeFsb~hC>Cs!_15G?sy5@%5Q6EQy|&DvkFjVZ9DQnG>Mtk(uMBG=;~7c zHl3Fi;SL%A1(s?lw(us1*Re9fs5Fdbrk)}XI?b-(5T@}5N)|~;Rz#FL_T`QxlzGv% z2J^)(d5o`H%!|H7rE)??M#J8fbM$~D>^L)LjqPSc%2Nnw6m_mEzo_&`sPy(%w{+-f=q2U>kNU)ii~|9YKDmJP9QG2 zbLWO^hjmMhhPTIf?D32Z7y`AJR)j%j3ML71^rsM!ZQ^n~y+Sr~JUkL`ivDRN#E`m6 z`^_p$(c#}t8+byeLCUo=hA`$gn-bvQ`YG^~d`C1=7r(eSZqG1Y&dj{%9$wgKg85_j zM9$1AGPF`~5k(p$HY8GzP~mlvQ)A08I@E44=0lWTdawPXtqccngJ*z zoM;6(m?Q`I(@a8QWkMLg36ioy5`%UMpfqtul0y!piX4YnK_?*BAY)mq)8sSAKtx1y zj)L(-J+pR3EJXg>gDDZbykUv(g3IY*s60-wv2w_U(8^5NSvn@uFsI8XZ3QqSt|6-yZC&M&+0ZdF{ z8G&KSx$vhI@rq)KjD*NCDEcq))Hjc0S%`a*uDKU zRYxh?0pZ=UUuU0!0Lq=sq`+clQ}g6~(u!uu1*kOgmoBF6M*x!Ptt_iSUzP2S)b(f2 zFnfCnu-J)^mYLZGnJ$h*yFR2QR4o8hAOWwcoEJ$YQp&%;-Z6yIhX}0ZhbV zD#v^yb{vIeIBuTxQYvI3xrPF{6CIs`=B>MrWL6E*=+_EaLfv0bz9lZbRaez?h54DQ z5nN^C-Y}WypA;j=o>}NpzO5iKX#tu>5?`KmsBUU@_oZw9-rsmNJ^%p$m%tfhSl2gdQm`)(qc@8DlZ=KoB64pbI0!>5Aqa`45Vi zYzoaJ#s;0wuA$1cB#blCk`gPlxB*J;&r8LL?k_K3&xotMo29xa|KA|%%3rLejcgEw zEk`ZdlMpn%pr30^xxxGsD~CgolCo~tpx{vz?(-by(HMyx9s z<}G9>cKprDxEkpKx5iETC7OlsEzk(#Xr#n`3ennZ*6GlVT2t1bGuXmXbvPn28wZwd z-6!(O@@NLkv&N%1uS}jg@i`E?TooAewy2lVP0qD~m&212pk1iRhD*Z4_>oI!#tGN`H#sxf$r=+U49+c*#%Kj8h3PO7H&UU&QpRY^(6mN??< zo0)iIg-xu6w|-i;vJs(A-DmDLj?Z9X1!nIa1SMA|qIHteU`Mx8*XSY3;3e_o*_8W? zcTL5F2yBWU@0g$h`#cHw^dT;y7~O&hP7N$qE2&opaCkIo5Jh)3xgs5xzh@$rX%fV1 zpMa=DH_2_Xi9j8cFofT`iM?IyJv)6GzB_l66E{q(4rQUjjx*9CuqoIYWk2emHv-+l zQz^AtlqFlf^J}vuK>%|~R>0aFq!z^xOJsJ-u7C1@EVdbpPC#w~1`Xygpos-m$AY-B zdCA)6Et*QJ@M=3_`>W!x3+A-J+jWEJus(D;2cP(fhr`7REp;xLZI$u@=^u{OU5EbL4PV0s@#}X{FoQV;>pRxfo8o zvyyWNT-%)1tojCfEtEkg#ej`X#tq`J(*{!fCHzK#Yjs)X;LZ`fLniipi8}Z%1lfu8td;b02`3Zvbu*lr&Vg!dvy*F_AnQngfp_h}~Ih8QmkQ2P6q~r#5 zg^s3en{zs*LOcVup*9k)YP|nxP|ceX{2ateEhuK7pav1z<<+cm9BLsZ6llI;JaeVsjQJX+R`lye8%rqiilD$q_$U z0=HH-x08vmJ?j#*Ru&ki0kniP1*?3glu8>8)%R-OjxT$u(ZA9Xh_R7)gk>%#6bLKP z7LLg)%q#CwiQopr81I|$vRfbdhbHSih{|)5MMgfAnb;2qgM;Px8{6T*moC;R87z`Y z_@+c6KHh);9}8Pb(2#?G#8pDh)qt6=rbRj19!T2SR(S)oCmqOMuw|c}IX#l#w*lQH+q6y#c%8rf343x^8^&7c7R*?r6OP~_(cza8M-Zl`Q{sSR z7=oBVSv40(gombT3w}G0^(7!y>trJf0sCxvV#q}}Vk<(F3loVDc^;ZP2yhq<78CF3 zFn;4t&l7KLKz7;j3QAK=Z*jm9(bcp29vFd+q>T9UipEeO{ndYXvz0VR8ykA{0sv|5 ze^iAdsf!K$1}hDlg1M+vXFr?dNFiy66VTSYik3fz9wun9#-B%;U&Mgm#P@1=X~?&3 zFff<$}KEPxyR0#q46WuT+;)9QD;5J-e4di%kI8d|iSIW|+MsLL?VQ0ny}W43n$ zb{(`Lax0=4L#(_s*v8I3%HE@V=w+i2aULN*!UKRSat$4=kgTfZb!>3lL?;OS{ep9M z234m}DDGEmI5v4lp2$I-xM=sAW8zrDeS$|@d?I1tl&_k&4&*E(pTot%JPYAPVr_MQ zzVc0d+#JOCFHEZ&oHZcp$_@l+@$osfnnv&>r>Cb~yvQJA-yaUvuvjEU3*UkP#Wb9F zTH`?nW5S}1bT~HxcLWZ{`?kOF^{aG|*`QZ3O7oY+dgguuHq@X3B~@5P4QpOd9&mw& zm+|AnyX@ba7d>9m+0Vk0;foZi6lYiNSqK2;R)OT2-r|aQY$o#ksf^LQbBr8Au5+bK z#36LXGB78WK%}XilU5mQ+IV8VoCG=~qvQ^YPP5wg16jRL#P4VO43FNHGgItTz_e5j zAoC#)Ki@Yu4ey-B1_oQO=wj|}-ku7bRT{1k^&K{$@N>Ii5?O%LC6DX{o%h}0!}C+0 zDjDrMLm+V+41t6eNy6%S{R zif2+nv7LSZzm87egrI`o)8c|rwO3PXF6^kxrbHW5jSD9y1&@VFPJtz{)rIV+fZ3v> zOA!8?*BbEoBv&eS2Bg)oOE;oB5;-=iZA1xMYrL?{bY4cy8Dof=L9pPMK5}c5=Gc~q z>SdqOM$5{0zgco`xx^$QrU2hFub!3USo)AkVO&j=#S$k-&;_O2eWqxTCP4hDmn!ax zrCVpr6?Ds3-MLJJ?yE{Y9Gd?*kxk2?n`Hp9Afh5XP?-)Q`zT8p5+>q zhaiL$s_tp0AHpmv{|U$dZXhR;BSixn@CBgp$+g*jL%TjWPu-QXP#O=7wc6p-4?>HL zXZs1GqaV}&

s!SOc7+5FcpeKCY8xc4`o}xcEr`@y^k=4I~Pzq%F|^L#>(H`6jPP z>6mktB%u^ch>c0}T;LaQAq;s#xO91MrwV8$f8RcJpb!BSNpKi!J5Y)<6@zYequgh# z8mIG66UEw5RS~{1_UcNT;ucLXU-1+J*ikU&(hpXdPT~}(p0^cHzK(prM;%@j+AdI7 z=6`<6nPK=i&KF5{Xrt1-^lZ|~Ft?JNmy3@Ngw8wysHq8ZjFpjYT-f?8g7pAtt54fVdi1fKpT?$KrWg>^5ReU<}AsISR{e&`A!1;zkm} zb<;n}C?y{7W*EG%1V=R*(~EI6n~seC@%8)vfHiH z=Skk>0BC|1t>s)e3wCG>s7M$8o@WY$Y11?8Z{Td**h8B+n|2pRtaA%`gp zAZ_4G$qUiZ3~_HR~kU{DcA^uADTx(5<&wzfUlFxJ}*KG*(7gVP8;4yDc5` zk(QbBg=<4+rnJI{2b_cprRH#qUafPf2cmJ01n#!A{>2*O;MKP33JCTIMoUD8a>I(= zEuLmZm6U98+=9VW0`$U|eR}(U;!dum(l?G4!p^Hk9vMUWr~ZGbvF~kE6R;@i=`hJe|lgPfw4d?JRmKedh@%4Y#&&?&R~7 zvShjlA9gT%>6%O`H~-+&B2l7E z)-k*J1&sP0TnMtp3{gd^vBz}OkxUZ})|eN>P*TY`eQfT=@VXNa2i$Wm&n%bEo>k*a zuepyUCT~B|fP`~rX?_bvalAKreN2mh3kW%vG3xor+66$aJ>BCvgx;O2zs_fTsIhTd z4-PCm(3-|CWlODS6Ak=7nq(qc>5p9mi;KK`(lFX0fmp&KA2wLF8 zCEW|7cE9n{e6N7AwX%04CrkDO<7{)uWpz%_d(vdjusKzVK!E2bmJjGSjiDAz%nYWk zC0#s+`q6B(FfAa@==OSxl5p-iY8_&ihp+K~7A)d+^AdUu`$*_@NJ*_KfGd%eGCxq% zlQKCy)5L1>X$-T-_o~F_#cTwoEKsStb-zmiK*IhSHOk44^WgqQ0zR*W$D0JAV5R^q z#+V**nFpx|606`VO?Uw#HTVrlYFnuFGU$bDIJ-sI&k2 zjFWso*&*dZPnbrVVxJQvFe69-7cIH`njjxdV-75^wjdw@k~`_H-OAhS-etWo$GKv` zUnxY>wJ7YNfh9Ykkf6RBMy~I5X@^b^6avtH6V_>Ae& z;1`RcskBD`HF9j(n8K zGaaq<8mQWzbJh?We1tz!46QJx9Gs&>ik^Z$xK0z9eNf@h(J3`i%E_tH+?L4Z7;7u`{@w-4-Z#|D^t z`3;Wp02>Al!Y}$j6Bbc@>;V!enR|K3du<jKI!iK=BGe9ATKofx$AS>P=E1 ztbri`!VwmQB|2@r6qCY(*WHx(m;rozY_aJUvW2SY4ffzg`kCAA=Qq|B%p->1Cjtk) z1|w~BR%T%rTMw=>DQlNu#3NW5))EF~5j)1l=d<(RK5A%{LE~aV2SMFc#D6a#scC88 z8hS&u`y#HfzI%yL)aL_`kY}U&!Wa_ah)1E81d2SE4DTEogofhoKon%&IxvU{#E9M; z;j$_mcY_8FNB)e~D5+GacHUzlpbG=sElaXz{=ETMa%Cp-G+2ML^=A@4h5Wbd3g{!D zsnK%o6~hsOEJ=i|7QY|}!b%$WP$mx4!jdZ@V3ZufL5`TBP%(ssh?W5g7Mh%W8sIOV zQ#G}Nv3LAJK9(I4eS5tYllScoNb^)78$v21o!5PFCNB(XWZHe=(7}R-R{z;^>BW~G z0f#j)pifgZ?wF7LiiO9lj7G?22G1i(px_3A!>%21i3#HkNIC>w7YiJ9RRic*YyPr0 za)4Y3<7^S{HMIsRRqDp&lu&B2Eo-3aZ*xHKgTV+>5dB#+KxP<5Y-5O3!IEjT5TX=I znR23|XNK+PRB zBK1*_CyNBYaqSrrho7)9tN zQC-_w(_1jt<`{&ALJO8+mGGBPsf1!@_EiTkciMTX+E;ZH92gQyB?M{@9V)d#Ov5nC zpo{LMDsEbn(3QT_SpYoU1dyT4t><^%h--MA=6m5OzgU2M|?#O!Jy}7!G2_4`soOKX@5!WuB=A6yEpKN7B!Iw4+`E> zlU8}{_=CC3o?n?NxyAE$774BGPURG*qstBzdnWRBPNd;DC_}k32OY2iL>rDO4C#Xz z^DJe@X_di@)vwZn8e<&P6%YmcGZ3|@<5f5WvltNU@X~J;OgAQ2jZ(iT=r%yi$^_$% zzYJRYD3g?r$T^0n;t;!*mq)#==+@X2^Nczduxida8mI_3vzQIcFBG+RFu3_ zF#@^x0k=Ry;HY8+YCf+g?SY<-l66Zw7fgo)a|@V*0flnwF1GhQ78nX39HikY)Ok~L z)j{J%*bPCW;IHvg?#Dh4rl>is&>_+0XbwlDKTeFz)n>RcPG^A|j%Xw)x9q+)NDOtX z0a_Du0ZTXufad%?2vq3=1Gvq1443{n&H%Gl$be<36f6Q~u%Fb!A1Dt0&56@!B;S_X zxqIMdT9w<-p~D(3$#(Hd&8I}~@elO%LGGy%RS=xGxlSNmbrkv^ctX{j$00KS+?Xm)155#m;|n7>o952u zYNaN~jb~)0Ar+l$FYOo=W3K#*BdCf*a1%%O@9j^K&@ti^ENXIA`EM~~?KPyVdK~l< zY@wM;rgBMk(KcDbn%v+2V(do^b<%TV_Y9njN2v(vYGbmpK6IA_^VcL8wEr)7cg_)?k3ON)Uj5$?RtI z6Z%mBX6f8Vg;hBGE=CO~gcW#lM1OV{pRnJA6*DIa#(wlhOy59bVl&BqUWig{n9o>4 zU|PW#M)gi;+X2Y$gUuuj0?##d19%L`?9qSK2jNLwCJ!W;9GYHW_Kc1kz{czE5As8go)Hx8AlINJ+=g1=2q!tRMy^IbtH z6c8nehl&Q2DJiN{d&7c;%0Z0rMUtYveUF^DRXzofjEBV~omb~p6W2;V&_3`LXQaod zuXq=&gRB6M!sXgXxq&1wZ7+{PX75_Z%z!bC|L3l1k$U33t^ObxAD89~KtL>p*9|I!H%iwEWz_U5vt>u>Neml;<_2U8m zuAUvXR&QYGo~?L(kVYpk)niZtRY^#80qE2me(wR5G{j(8cIyG+aLY*Mo-i_CRh0AlP9jYfRq@lvBZ zBHuKlP)$h$*;4E3EbVq1Y(3} z1RDfT1o8w=1U&@4gsBBi1!n~l1&D+|1dIf~3y%re2JZ(z1^}gq5zIg!KvL0QmxCG) z;NTP@=riEJg5(QGJ3x#<0RkTc{0X2Ea3ElM!S@6X4qzj2Mu3(9)+mUgAYDOz4ZIcL zGO$xYU<#NautWf;fr5dX0b~O32WSj{0j&#C^b&x|0yqXJ4&Vzg3_vqLjeyhykQbmf zfv5%88(<6oWPrQ?-~dzh-+ccM_eadX3j9^@x5uA3d`IwC)1OlPdHQ$EUxIzF^;gK> zOZ>(9U(p{R{Tty&r(PQQvEg5!{Pgf^>gT6EhiIVWOh87QDZmaFpeY5W}{n+i=>})PZjHn#cbBoN(CS(_c z7Ox_NfQbi_;5H^mB)%NMzF`BnD%g4hl02c_`lQ|roug7f6g2D%0B#l>i-yBZX(T%Z zwKzzkpwVVe>CojCv4(yrBalVJaf4q2NFvKC}EE z8mk%P(E}&wkVRainrlRG+06k~Ac7mU@2(V)5N6z{rU9%Gb(xGi`puPCPY!?iY+wI} zFBRYh3o!#hMj|hz${c|Pv9%r)fY)-7@@6L^|14l%hyg>(_(s|!rWO@{Frn<9nwT`P zY=Yma_EK=Ld!Q1FD6QKs*u1+ANGctFn0f0YREUJ=*C-9V9+*S(|873oho2AOeXphw zt$~GJ`b~lk(Fj%%C1D}upp3i|-(bJWY-)Ix5U1ePfJYR8|F_Q&Jp7%=ADVt`tX{Lp z;%n!KP@QOk4GBqk3Fv>PbZ-Fc*?9m775B0=18YU(>{h#lAgtX@N zk~J$og{ZwZRi4Z$ZLTz0o?2>sg17J<0Jro=ODu&n0O z7|16&1mXxBI&b@fq*R&6-)C|G79*Uj4zllfL)os&{Dh`fS%ZkGPJC=!a`K34q!fb( z)q;@}spjUN$0-6E^hYTIK{^0X7hSr5n@4ryJ}Dl~BIHtAoB@(U4b2c3B&1GpU{I;h zWC=N5%1LJHs^pH#u;~(CgzqZi#|h4}xE~}uHvXg1bV9=-N_hU3tlR30FBs@m@>Ll` zfuKbmizY>nVdw->87CB6T{K*9)fNtvUt)9VQ?!{7Zn}w4k>NlfX}QP1CCI)2(=Yfq zL*a~y5!s-@$vAt_k%4^jPDulLXsIQDFqKwPiMFTPD-yQaZ27Ggd>0eIFpffW#FW5} z<)0n&%*%wodL=SRLoDx+AJ26Y#Y zOHHbooE$BK@Ml68N*4p^UIv!9M2hZ`LEuc@91P5*u17=H>CMWlkB#JKDa*)&SOv&d z`x`^*(?MgIx}%Zgch~wihzi#&0^OT%K@~&t#ieB<8=UNXdHP5;I>4lGt8QK|DX{oE zDw1YLUt->-ksPW?J^I3sKr{KKY@l zKCu5HrZEKbA(9c$@qf@MMhMHWK>^hLJk|d1)x5XD-(IeHDEYs7;G#PgWk@J$S`a z+_B6fcXEzo(HNI1U2zRH&m0fD@{bLRZ{Vw>mI(EE z6Ze(cAfZ%Ua6$mW2sjDEyhN2PfOCQTNKk4JX9G2WpGp1}{{D<{w#89zuvgStN_?!V zfPlEaEm*k7G<&TqgGTE_;6h*+HGYT_)Q5B?r{98HkGSN_CIx?#96;Z$8Ly zxe%EPg%^3)tfik|>CmwLwGm}nc5W8}VTCsL2}I7_4wC|y!+B4`B_mg{oG~7aKkK$Q z8CHgL8yg^^zoE#t3%qe{LAFc`=#E)M(c z1<0@-)LGDP%1`Z(3F+uj@#_YW!D;XmtSN;Qp{dJH96(kYxXrw!1yh;E6vrs8ZCHJa zp})bJ>iXvWT|nVMsnQz7l7RwK@5l=~Hy?06Nm1|a30Uj5GE+67P{!NZL+j+3z__Sd zwyGN(ME;KfWS%WFm<3C2ixWX`4akTkh;u&C&)Zau#~9o`9cd(GFq(&AlhVWm!VHe% z^GT5=7oZBtZK5hHoa3;Bi<5-4JgA1J9x;-t8!xkZxfGSfT(K!0bwY{Bg@~B{n~#IU z56s|eJ5~Vy9@+u#hE0ejoSYdC&0t{+?J#6LQJUt`0};;#TN??st4L0pqX(!a3$@0{ zYqtlR5E69sevQKP6BKAw71%qwLEojF49S+7VcBP;>i2xAurdeM(SXyABBO?Oy9xF2lBgA3d!i@dTEdMcF9jXE% z7ie9NdMzWMK^Eapm>HB)>U4LExC@fji`ZpwVRf|xWZANGLRO<1R@gAH3;VKmX>V^O zs*t(@iDd*NP4`AKm<$}y+&dYEhr8nB@Z<|MZ(Z{=A9!s^yK>zV=Zl5NOu;Kyh<@)Q zabA$<6c?y{tB!8w_%Z-95Ol{BD$sUznhl;sG&Q7bUagogU05@Z6qGYucL24}_x1QX z4}uW*l&LqFe@lMMX&fO*p4%qzy>~j~&Far~6K>r*F%5Zy01NQFuHIhKpCw;sAT5q! z%JeOJu(hs2(zpvk*ewDSB+FDj*qY%Pt3qkqX;827&V+h4{*B+EScESjl~p1Rm?2c? zLVje{Sk%q|CiV^8eKbkS7LgiQ94r;p19NiTuC=5Az;9Yz6_BLD2ELw-!2tg~5Sp1K z3bPi9uOYG#ZTVS)W~WmPgix4LQe*6m$oir>5kyEL_u*j_95AFBd^-g{K+$1M#Dy^q z5I8WTpn{Nq3N%faIadEaU<^LL&+oGIx5M%8VFTKmw&B$GfVN#u*mMhF#4Seiw7Bs_ zJV92?BRYoLq}hXNrNU~#viRFSHr#8X8K8>|q`ePYnQ#N3TbQskgw&^{yPi{?lsryY zL1+%8>#WlEgq)dJgR2wLyzZ?fs$5cn3HEAzs+(nnj*kQ#QtZ+j(wBE<4d_dovWD~} z&Dg_w66WEtDbCVqvfc&|)d}4)N=vwxEnr^_PPEdcoD1Qp(#{3&)aZItmXC23SitR= zi)o_D_!8t%C0q$^Xmg4bJqF?gr+`a`ooOIS7zfB6$`}N=In#0EkauwIPQWF>&a+PB z>;haI$u|Ih2QqFsk_~PcNtgj;m)V7uRQ;6AzzSvw{15(_fIEdU;bfVE9C>AsR|d>O zcvB>t0h}pQVN{S+aH>bZ7s8beDv|I7aHUB20(erUl9?E$;XI3jCkUFunrig%lGbv- zi-yw!1SbAJ%PAa;B$0!L()tDj|D{)iRwwcztNBC*6Z@4gkw~^#+eN_$cP0P;00000 F002TuuHFCu diff --git a/src/user/plugins/admin/themes/grav/fonts/fontawesome-webfont.svg b/src/user/plugins/admin/themes/grav/fonts/fontawesome-webfont.svg deleted file mode 100644 index 6fd19ab..0000000 --- a/src/user/plugins/admin/themes/grav/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,640 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/user/plugins/admin/themes/grav/fonts/fontawesome-webfont.ttf b/src/user/plugins/admin/themes/grav/fonts/fontawesome-webfont.ttf deleted file mode 100644 index d7994e13086b1ac1a216bd754c93e1bccd65f237..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138204 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 diff --git a/src/user/plugins/admin/themes/grav/fonts/fontawesome-webfont.woff b/src/user/plugins/admin/themes/grav/fonts/fontawesome-webfont.woff deleted file mode 100644 index 6fd4ede0f30f170eecb4156beb7235bf01fff00b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81284 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äY>7uxS6S37IVP_>DW-kg%dn+sFHLnFhvXTU%&ox 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 ZUtABnb?tu62nVk>KX+wfW(Hek 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

kt-)hh5+D(e?suZNJ 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 bcSM{UPJVZgf;8~-4wQ_Pf@HP0QSko(oNXlH diff --git a/src/user/plugins/admin/themes/grav/js/admin-all.js b/src/user/plugins/admin/themes/grav/js/admin-all.js deleted file mode 100644 index 6fb3985..0000000 --- a/src/user/plugins/admin/themes/grav/js/admin-all.js +++ /dev/null @@ -1,527 +0,0 @@ -var getState = function(){ - var loadValues = [], - ignoreNames = ['page-filter', 'page-search']; - $('input, select, textarea').each(function(index, element){ - var name = $(element).prop('name'), - value = $(element).val(); - - if (name && !~ignoreNames.indexOf(name)) loadValues.push(name + '|' + value); - }); - - return loadValues.toString(); -}; - -var bytesToSize = function(bytes) { - var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; - if (bytes == 0) return '0 Byte'; - var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))); - return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i]; -}; - -var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1; - -var keepAlive = function keepAlive() { - $.post(GravAdmin.config.base_url_relative + '/task' + GravAdmin.config.param_sep + 'keepAlive'); -}; - -$(function () { - jQuery.substitute = function(str, sub) { - return str.replace(/\{(.+?)\}/g, function($0, $1) { - return $1 in sub ? sub[$1] : $0; - }); - }; - - // // selectize - // $('select.fancy:not(.create)').selectize({ - // createOnBlur: true, - // }); - - // // selectize with create - // $('select.fancy.create').selectize({ - // createOnBlur: true, - // persist: false, - // create: function (input) { - // return { - // value: input, - // text: input - // } - // } - // }); - - // $('input.fancy').selectize({ - // delimiter: ',', - // persist: false, - // create: function (input) { - // return { - // value: input, - // text: input - // } - // } - // }); - - // Set Toastr defaults - toastr.options = { - "positionClass": "toast-top-right" - } - - // dashboard - var chart = $('.updates-chart'), UpdatesChart; - if (chart.length) { - var data = { - series: [100, 0] - }; - - var options = { - donut: true, - donutWidth: 10, - startAngle: 0, - total: 100, - showLabel: false, - height: 150, - chartPadding: !isFirefox ? 5 : 10 - }; - - UpdatesChart = Chartist.Pie('.updates-chart .ct-chart', data, options); - UpdatesChart.on('draw', function(data){ - if (data.index) { return; } - chart.find('.numeric span').text(Math.round(data.value) + '%'); - - var text = translations.PLUGIN_ADMIN.UPDATES_AVAILABLE; - if (data.value == 100) { - text = translations.PLUGIN_ADMIN.FULLY_UPDATED; - } - $('.js__updates-available-description').html(text) - $('.updates-chart .hidden').removeClass('hidden'); - }); - } - - // Cache Clear - $('[data-clear-cache]').on('click', function(e) { - - $(this).attr('disabled','disabled').find('> .fa').removeClass('fa-trash').addClass('fa-refresh fa-spin'); - var url = $(this).data('clearCache'); - - GravAjax({ - dataType: "json", - url: url, - toastErrors: true, - success: function(result, status) { - toastr.success(result.message); - } - }).always(function() { - $('[data-clear-cache]').removeAttr('disabled').find('> .fa').removeClass('fa-refresh fa-spin').addClass('fa-trash'); - }); - }); - - // Plugins list details sliders - $('.gpm-name, .gpm-actions').on('click', function(e){ - var target = $(e.target); - - if (target.prop('tagName') == 'A' || target.parent('a').length) { return true; } - - var wrapper = $(this).siblings('.gpm-details').find('.table-wrapper'); - wrapper.slideToggle({ - duration: 350, - complete: function(){ - var isVisible = wrapper.is(':visible'); - wrapper - .closest('tr') - .find('.gpm-details-expand i') - .removeClass('fa-chevron-' + (isVisible ? 'down' : 'up')) - .addClass('fa-chevron-' + (isVisible ? 'up' : 'down')); - } - }); - }); - - // Update plugins/themes - $(document).on('click', '[data-maintenance-update]', function(e) { - - $(this).attr('disabled','disabled').find('> .fa').removeClass('fa-cloud-download').addClass('fa-refresh fa-spin'); - var url = $(this).data('maintenanceUpdate'); - var task = 'task' + GravAdmin.config.param_sep; - - GravAjax({ - dataType: "json", - url: url, - toastErrors: true, - success: function(result, status) { - if (url.indexOf(task + 'updategrav') !== -1) { - if (result.status == 'success') { - $('[data-gpm-grav]').remove(); - toastr.success(result.message + window.grav_available_version); - $('#footer .grav-version').html(window.grav_available_version); - - /*// hide the update button after successfull update and update the badges - $('[data-maintenance-update]').fadeOut(); - $('.badges.with-updates').removeClass('with-updates').find('.badge.updates').remove();*/ - } else { - toastr.success(result.message); - } - } else { - toastr.success(result.message); - } - } - }).always(function() { - GPMRefresh(); - $('[data-maintenance-update]').removeAttr('disabled').find('> .fa').removeClass('fa-refresh fa-spin').addClass('fa-cloud-download'); - }); - }); - - // Update plugins/themes - $('[data-ajax]').on('click', function(e) { - - var button = $(this), - icon = button.find('> .fa'), - url = button.data('ajax'); - - var iconClasses = [], - helperClasses = [ 'fa-lg', 'fa-2x', 'fa-3x', 'fa-4x', 'fa-5x', - 'fa-fw', 'fa-ul', 'fa-li', 'fa-border', - 'fa-rotate-90', 'fa-rotate-180', 'fa-rotate-270', - 'fa-flip-horizontal', 'fa-flip-vertical' ]; - - // Disable button - button.attr('disabled','disabled'); - - // Swap fontawesome icon to loader - $.each(icon.attr('class').split(/\s+/), function (i, classname) { - if (classname.indexOf('fa-') === 0 && $.inArray(classname, helperClasses) === -1) { - iconClasses.push(classname); - icon.removeClass(classname); - } - }); - icon.addClass('fa-refresh fa-spin'); - - GravAjax({ - dataType: "json", - url: url, - toastErrors: true, - success: function(result, status) { - var task = 'task' + GravAdmin.config.param_sep; - - var toastrBackup = {}; - if (result.toastr) { - for (var setting in result.toastr) { if (result.toastr.hasOwnProperty(setting)) { - toastrBackup[setting] = toastr.options[setting]; - toastr.options[setting] = result.toastr[setting]; - } - } - } - - toastr.success(result.message || translations.PLUGIN_ADMIN.TASK_COMPLETED); - - for (var setting in toastrBackup) { if (toastrBackup.hasOwnProperty(setting)) { - toastr.options[setting] = toastrBackup[setting]; - } - } - - if (url.indexOf(task + 'backup') !== -1) { - //Reset backup days count - $('.backups-chart .numeric').html("0 " + translations.PLUGIN_ADMIN.DAYS + ""); - - var data = { - series: [0,100] - }; - - var options = { - donut: true, - donutWidth: 10, - startAngle: 0, - total: 100, - showLabel: false, - height: 150 - }; - - Chartist.Pie('.backups-chart .ct-chart', data, options); - } - } - }).always(function() { - // Restore button - button.removeAttr('disabled'); - icon.removeClass('fa-refresh fa-spin').addClass(iconClasses.join(' ')); - }); - }); - - $('[data-gpm-checkupdates]').on('click', function(){ - var element = $(this); - element.find('i').addClass('fa-spin'); - GPMRefresh({ - flush: true, - callback: function(response) { - var payload = response.status == 'success' ? response.payload : false; - element.find('i').removeClass('fa-spin'); - - if (payload) { - if (!payload.grav.isUpdatable && !payload.resources.total) { - toastr.success(translations.PLUGIN_ADMIN.EVERYTHING_UP_TO_DATE); - } else { - var grav = payload.grav.isUpdatable ? 'Grav v' + payload.grav.available : ''; - var resources = payload.resources.total ? payload.resources.total + ' ' + translations.PLUGIN_ADMIN.UPDATES_ARE_AVAILABLE: ''; - - if (!resources) { grav += ' ' + translations.PLUGIN_ADMIN.IS_AVAILABLE_FOR_UPDATE } - toastr.info(grav + (grav && resources ? ' ' + translations.PLUGIN_ADMIN.AND + ' ' : '') + resources); - } - } - } - }); - }); - - var GPMRefresh = function (options) { - options = options || {}; - - var data = { - task: 'GPM', - action: 'getUpdates' - }; - - if (options.flush) { data.flush = true; } - - GravAjax({ - dataType: "JSON", - url: window.location.href, - method: "POST", - data: data, - toastErrors: true, - success: function (response) { - var grav = response.payload.grav, - installed = response.payload.installed, - resources = response.payload.resources, - task = 'task' + GravAdmin.config.param_sep; - - // grav updatable - if (grav.isUpdatable) { - var icon = ' '; - content = 'Grav v{available} ' + translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE + '! (' + translations.PLUGIN_ADMIN.CURRENT + ': v{version}) ', - button = ''; - - if (grav.isSymlink) { - button = ''; - } - - content = jQuery.substitute(content, {available: grav.available, version: grav.version}); - $('[data-gpm-grav]').addClass('grav').html('

' + icon + content + button + '

'); - window.grav_available_version = grav.available; - } - - $('#grav-update-button').on('click', function() { - $(this).html(translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT + ' ' + bytesToSize(grav.assets['grav-update'].size) + '..'); - }); - - // dashboard - if ($('.updates-chart').length) { - var missing = (resources.total + (grav.isUpdatable ? 1 : 0)) * 100 / (installed + (grav.isUpdatable ? 1 : 0)), - updated = 100 - missing; - UpdatesChart.update({series: [updated, missing]}); - if (resources.total) { - $('#updates [data-maintenance-update]').fadeIn(); - } - } - - if (!resources.total) { - $('#updates [data-maintenance-update]').fadeOut(); - $('.badges.with-updates').removeClass('with-updates').find('.badge.updates').remove(); - } else { - var length, - icon = '', - content = '{updates} ' + translations.PLUGIN_ADMIN.OF_YOUR + ' {type} ' + translations.PLUGIN_ADMIN.HAVE_AN_UPDATE_AVAILABLE, - button = '' + translations.PLUGIN_ADMIN.UPDATE + ' {Type}', - plugins = $('.grav-update.plugins'), - themes = $('.grav-update.themes'), - sidebar = {plugins: $('#admin-menu a[href$="/plugins"]'), themes: $('#admin-menu a[href$="/themes"]')}; - - // sidebar - if (sidebar.plugins.length || sidebar.themes.length) { - var length, badges; - if (sidebar.plugins.length && (length = Object.keys(resources.plugins).length)) { - badges = sidebar.plugins.find('.badges'); - badges.addClass('with-updates'); - badges.find('.badge.updates').text(length); - } - - if (sidebar.themes.length && (length = Object.keys(resources.themes).length)) { - badges = sidebar.themes.find('.badges'); - badges.addClass('with-updates'); - badges.find('.badge.updates').text(length); - } - } - - // list page - if (plugins[0] && (length = Object.keys(resources.plugins).length)) { - content = jQuery.substitute(content, {updates: length, type: 'plugins'}); - button = jQuery.substitute(button, {Type: 'All Plugins', location: GravAdmin.config.base_url_relative + '/plugins'}); - plugins.html('

' + icon + content + button + '

'); - - var plugin, url; - $.each(resources.plugins, function (key, value) { - plugin = $('[data-gpm-plugin="' + key + '"] .gpm-name'); - url = plugin.find('a'); - if (!plugin.find('.badge.update').length) { - plugin.append('' + translations.PLUGIN_ADMIN.UPDATE_AVAILABLE + '!'); - } - - }); - } - - if (themes[0] && (length = Object.keys(resources.themes).length)) { - content = jQuery.substitute(content, {updates: length, type: 'themes'}); - button = jQuery.substitute(button, {Type: 'All Themes', location: GravAdmin.config.base_url_relative + '/themes'}); - themes.html('

' + icon + content + button + '

'); - - var theme, url; - $.each(resources.themes, function (key, value) { - theme = $('[data-gpm-theme="' + key + '"]'); - url = theme.find('.gpm-name a'); - theme.append(''); - }); - } - - // details page - var type = 'plugin', - details = $('.grav-update.plugin')[0]; - - if (!details) { - details = $('.grav-update.theme')[0]; - type = 'theme'; - } - - if (details){ - var slug = $('[data-gpm-' + type + ']').data('gpm-' + type), - Type = type.charAt(0).toUpperCase() + type.substring(1), - resource = resources[type + 's'][slug]; - - if (resource) { - content = 'v{available} ' + translations.PLUGIN_ADMIN.OF_THIS + ' ' + type + ' ' + translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE + '!'; - content = jQuery.substitute(content, { available: resource.available }); - button = jQuery.substitute(button, { - Type: Type, - location: GravAdmin.config.base_url_relative + '/' + type + 's/' + slug - }); - $(details).html('

' + icon + content + button + '

'); - } - } - } - - if (options.callback && typeof options.callback == 'function') options.callback(response); - } - }); - }; - - if (GravAdmin.config.enable_auto_updates_check === '1') { - GPMRefresh(); - } - - function reIndex (collection) { - var holder = collection.find('[data-collection-holder]'), - addBtn = collection.find('[data-action="add"]'), - prefix = holder.data('collection-holder'), - index = 0; - - holder.find('[data-collection-item]').each(function () { - var item = $(this), - currentIndex = item.attr('data-collection-key'); - - if (index != currentIndex) { - var r = new RegExp('^' + prefix.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + '[\.\[]' + currentIndex); - - item.attr('data-collection-item', item.attr('data-collection-item').replace(r, prefix + '.' + index)); - item.attr('data-collection-key', index); - item.find('[name]').each(function () { - $(this).attr('name', $(this).attr('name').replace(r, prefix + '[' + index)); - }); - } - - index++; - }); - - addBtn.data('key-index', index); - } - - // Collections - $('[data-type="collection"]').each(function () { - var el = $(this), - holder = el.find('[data-collection-holder]'), - config = el.find('[data-collection-config]'), - isArray = config.data('collection-array'), - template = el.find('[data-collection-template="new"]').html(); - - // make sortable - new Sortable(holder[0], { - filter: '.form-input-wrapper', - onUpdate: function () { - if (isArray) - reIndex(el); - } - }); - - // hook up delete - el.on('click', '[data-action="delete"]', function (e) { - $(this).closest('[data-collection-item]').remove(); - if (isArray) - reIndex(el); - }); - - // hook up add - el.find('[data-action="add"]').on('click', function (e) { - var button = $(this), - key = button.data('key-index'), - newItem = $(template); - - newItem.attr('data-collection-item', newItem.attr('data-collection-item').replace('*', key)); - newItem.attr('data-collection-key', key); - newItem.find('[name]').each(function () { - $(this).attr('name', $(this).attr('name').replace('*', key)); - }); - - holder.append(newItem); - button.data('key-index', ++key); - }); - }); - - // enable the toggleable checkbox when typing in the corresponding textarea/input element - jQuery(document).on('input propertychange click', '.form-data textarea, .form-data input, .form-data label, .form-data .selectize-input', function() { - var item = this; - - var checkbox = $(item).parents('.form-field').find('.toggleable input[type="checkbox"]'); - - if (checkbox.length > 0) { - checkbox.prop('checked', true); - } - - $(this).css('opacity', 1); - $(this).parents('.form-data').css('opacity', 1); - checkbox.css('opacity', 1); - checkbox.prop('checked', true); - checkbox.prop('value', 1); - checkbox.siblings('label').css('opacity', 1); - checkbox.parent().siblings('label').css('opacity', 1); - }); - - // when clicking the label, click the corresponding checkbox automatically - jQuery(document).on('click', 'label.toggleable', function() { - var input = $(this).siblings('.checkboxes.toggleable').find('input'); - var on = !input.is(':checked'); - - input.prop('checked', on); - input.prop('value', on ? 1 : 0); - $(this).css('opacity', on ? 1 : 0.7); - input.siblings('label').css('opacity', on ? 1 : 0.7); - $(this).parents('.form-label').siblings('.form-data').css('opacity', on ? 1 : 0.7); - - }); - - // Themes Switcher Warning - $(document).on('mousedown', '[data-remodal-target="theme-switch-warn"]', function(e){ - var name = $(e.target).closest('[data-gpm-theme]').find('.gpm-name a').text(), - remodal = $('.remodal.theme-switcher'); - - remodal.find('strong').text(name); - remodal.find('.button.continue').attr('href', $(e.target).attr('href')); - }); - - // Setup keep-alive on pages that have at least one element with data-grav-keepalive="true" set - if ($(document).find('[data-grav-keepalive="true"]').length > 0) { - setInterval(function() { - keepAlive(); - }, (GravAdmin.config.admin_timeout/2)*1000); - } -}); diff --git a/src/user/plugins/admin/themes/grav/js/ajax.js b/src/user/plugins/admin/themes/grav/js/ajax.js deleted file mode 100644 index 50c6bd3..0000000 --- a/src/user/plugins/admin/themes/grav/js/ajax.js +++ /dev/null @@ -1,96 +0,0 @@ -$(function(){ - var root = window || {}; - - root.GravAjax = function (url, settings) { - settings = typeof settings === 'undefined' ? typeof url === 'string' ? {} : url : settings; - settings.url = typeof settings.url === 'undefined' && typeof url === 'string' ? url : settings.url; - - var callbacks = { - success: typeof settings.success !== 'undefined' ? typeof settings.success === 'function' ? [ settings.success ] : settings.success : [], - error: typeof settings.error !== 'undefined' ? typeof settings.error === 'function' ? [ settings.error ] : settings.error : [] - }; - - if (settings.toastErrors) { - callbacks.error.push(root.GravAjax.toastErrorHandler); - delete settings.toastErrors; - } - - delete settings.success; - delete settings.error; - - var deferred = $.Deferred(), - jqxhr = $.ajax(settings); - - jqxhr.done(function (response, status, xhr) { - var responseObject = { - response: response, - status: status, - xhr: xhr - }; - - switch (response.status) { - case "unauthenticated": - document.location.href = GravAdmin.config.base_url_relative; - throw "Logged out"; - break; - case "unauthorized": - responseObject.response.message = responseObject.response.message || "Unauthorized."; - root.GravAjax.errorHandler(deferred, callbacks, responseObject); - break; - case "error": - responseObject.response.message = responseObject.response.message || "Unknown error."; - root.GravAjax.errorHandler(deferred, callbacks, responseObject); - break; - case "success": - root.GravAjax.successHandler(deferred, callbacks, responseObject); - break; - default: - responseObject.response.message = responseObject.response.message || "Invalid AJAX response."; - root.GravAjax.errorHandler(deferred, callbacks, responseObject); - break; - } - }); - - jqxhr.fail(function (xhr, status, error) { - var response = { - status: 'error', - message: error - }; - - root.GravAjax.errorHandler(deferred, callbacks, { xhr: xhr, status: status, response: response}); - }); - - root.GravAjax.jqxhr = jqxhr; - - return deferred; - - }; - - root.GravAjax.successHandler = function (promise, callbacks, response) { - callbacks = callbacks.success; - for (var i = 0; i < callbacks.length; i++) { - if (typeof callbacks[i] === 'function') { - callbacks[i](response.response, response.status, response.xhr); - } - } - - promise.resolve(response.response, response.status, response.xhr); - }; - - root.GravAjax.errorHandler = function (promise, callbacks, response) { - callbacks = callbacks.error; - for (var i = 0; i < callbacks.length; i++) { - if (typeof callbacks[i] === 'function') { - callbacks[i](response.xhr, response.status, response.response.message); - } - } - - promise.reject(response.xhr, response.status, response.response.message); - }; - - root.GravAjax.toastErrorHandler = function (xhr, status, error) { - if (status !== 'abort') { - toastr.error(error); - } - }; -}); diff --git a/src/user/plugins/admin/themes/grav/js/chartist.min.js b/src/user/plugins/admin/themes/grav/js/chartist.min.js deleted file mode 100755 index b69e484..0000000 --- a/src/user/plugins/admin/themes/grav/js/chartist.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/* Chartist.js 0.9.4 - * Copyright © 2015 Gion Kunz - * Free to use under the WTFPL license. - * http://www.wtfpl.net/ - */ - -!function(a,b){"function"==typeof define&&define.amd?define([],function(){return a.Chartist=b()}):"object"==typeof exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.9.4"};return function(a,b,c){"use strict";c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){a=a||{};var b=Array.prototype.slice.call(arguments,1);return b.forEach(function(b){for(var d in b)"object"!=typeof b[d]||null===b[d]||b[d]instanceof Array?a[d]=b[d]:a[d]=c.extend({},a[d],b[d])}),a},c.replaceAll=function(a,b,c){return a.replace(new RegExp(b,"g"),c)},c.stripUnit=function(a){return"string"==typeof a&&(a=a.replace(/[^0-9\+-\.]/g,"")),+a},c.ensureUnit=function(a,b){return"number"==typeof a&&(a+=b),a},c.querySelector=function(a){return a instanceof Node?a:b.querySelector(a)},c.times=function(a){return Array.apply(null,new Array(a))},c.sum=function(a,b){return a+(b?b:0)},c.mapMultiply=function(a){return function(b){return b*a}},c.mapAdd=function(a){return function(b){return b+a}},c.serialMap=function(a,b){var d=[],e=Math.max.apply(null,a.map(function(a){return a.length}));return c.times(e).forEach(function(c,e){var f=a.map(function(a){return a[e]});d[e]=b.apply(null,f)}),d},c.roundWithPrecision=function(a,b){var d=Math.pow(10,b||c.precision);return Math.round(a*d)/d},c.precision=8,c.escapingMap={"&":"&","<":"<",">":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS("http://www.w3.org/2000/xmlns/",c.xmlNs.prefix)}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e).attr({style:"width: "+b+"; height: "+d+";"}),a.appendChild(f._node),f},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&ck,m=e?c.rho(j.range):0;if(e&&c.projectLength(a,1,j)>=d)j.step=1;else if(e&&m=d)j.step=m;else for(;;){if(l&&c.projectLength(a,j.step,j)<=d)j.step*=2;else{if(l||!(c.projectLength(a,j.step/2,j)>=d))break;if(j.step/=2,e&&j.step%1!==0){j.step*=2;break}}if(i++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}for(g=j.min,h=j.max;g+j.step<=j.low;)g+=j.step;for(;h-j.step>=j.high;)h-=j.step;for(j.min=g,j.max=h,j.range=j.max-j.min,j.values=[],f=j.min;f<=j.max;f+=j.step)j.values.push(c.roundWithPrecision(f));return j},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.stripUnit(b.width)||0,i=a.height()||c.stripUnit(b.height)||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createLabel=function(a,b,d,e,f,g,h,i,j,k,l){var m,n={};if(n[f.units.pos]=a+h[f.units.pos],n[f.counterUnits.pos]=h[f.counterUnits.pos],n[f.units.len]=b,n[f.counterUnits.len]=g-10,k){var o=''+e[d]+"";m=i.foreignObject(o,c.extend({style:"overflow: visible;"},n))}else m=i.elem("text",n,j.join(" ")).text(e[d]);l.emit("draw",c.extend({type:"label",axis:f,index:d,group:i,element:m,text:e[d]},n))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i1){var i=[];return h.forEach(function(a){i.push(g(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(a=h[0].pathCoordinates,d=h[0].valueData,a.length<=4)return c.Interpolation.none()(a,d);for(var j,k=(new c.Svg.Path).move(a[0],a[1],!1,d[0]),l=0,m=a.length;m-2*!j>l;l+=2){var n=[{x:+a[l-2],y:+a[l-1]},{x:+a[l],y:+a[l+1]},{x:+a[l+2],y:+a[l+3]},{x:+a[l+4],y:+a[l+5]}];j?l?m-4===l?n[3]={x:+a[0],y:+a[1]}:m-2===l&&(n[2]={x:+a[0],y:+a[1]},n[3]={x:+a[2],y:+a[3]}):n[0]={x:+a[m-2],y:+a[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+a[l],y:+a[l+1]}),k.curve(e*(-n[0].x+6*n[1].x+n[2].x)/6+f*n[2].x,e*(-n[0].y+6*n[1].y+n[2].y)/6+f*n[2].y,e*(n[1].x+6*n[2].x-n[3].x)/6+f*n[2].x,e*(n[1].y+6*n[2].y-n[3].y)/6+f*n[2].y,n[2].x,n[2].y,!1,d[(l+2)/2])}return k}},c.Interpolation.step=function(a){var b={postpone:!0};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=2;g1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(h){var k=i.elem("path",{d:h.stringify()},a.classNames.area,!0).attr({values:b.normalized[g]},c.xmlNs.uri);this.eventEmitter.emit("draw",{type:"area",values:b.normalized[g],path:h.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:k})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d={raw:this.data,normalized:a.distributeSeries?c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y").map(function(a){return[a]}):c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y")};this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars){var i=c.serialMap(d.normalized,function(){return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+b.x||0,y:a.y+b.y||0}},{x:0,y:0})});b=c.getHighLow([i],c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y")}else b=c.getHighLow(d.normalized,c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y");b.high=+a.high||(0===a.high?0:b.high),b.low=+a.low||(0===a.low?0:b.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?d.raw.labels.slice(0,1):d.raw.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,d,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,d,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,d,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,d,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),d.raw.series.forEach(function(b,e){var f,h,i=e-(d.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/d.normalized.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/d.normalized[e].length/2,h=g.elem("g"),h.attr({"series-name":b.name,meta:c.serialize(b.meta)},c.xmlNs.uri),h.addClass([a.classNames.series,b.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),d.normalized[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,d.normalized[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,d.normalized[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,d.normalized[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,d.normalized[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],v[l.counterUnits.pos+"1"]=a.stackBars?t:p,v[l.counterUnits.pos+"2"]=a.stackBars?q[k]:r[l.counterUnits.pos],v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1),s=h.elem("line",v,a.classNames.bar).attr({value:[g.x,g.y].filter(function(a){return a}).join(","),meta:c.getMetaData(b,k)},c.xmlNs.uri), -this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:c.getMetaData(b,k),series:b,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,onlyInteger:!1,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,horizontalBars:!1,distributeSeries:!1,reverseData:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=[],k=a.startAngle,l=c.getDataArray(this.data,a.reverseData);this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||l.reduce(function(a,b){return a+b},0),f-=a.donut?a.donutWidth/2:0,h="outside"===a.labelPosition||a.donut?f:"center"===a.labelPosition?0:f/2,h+=a.labelOffset;var m={x:e.x1+e.width()/2,y:e.y2+e.height()/2},n=1===this.data.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;a.showLabel&&(b=this.svg.elem("g",null,null,!0));for(var o=0;o180,0,r.x,r.y);a.donut||t.line(m.x,m.y);var u=j[o].elem("path",{d:t.stringify()},a.donut?a.classNames.sliceDonut:a.classNames.slicePie);if(u.attr({value:l[o],meta:c.serialize(p.meta)},c.xmlNs.uri),a.donut&&u.attr({style:"stroke-width: "+ +a.donutWidth+"px"}),this.eventEmitter.emit("draw",{type:"slice",value:l[o],totalDataSum:i,index:o,meta:p.meta,series:p,group:j[o],element:u,path:t.clone(),center:m,radius:f,startAngle:k,endAngle:q}),a.showLabel){var v=c.polarToCartesian(m.x,m.y,h,k+(q-k)/2),w=a.labelInterpolationFnc(this.data.labels?this.data.labels[o]:l[o],o);if(w||0===w){var x=b.elem("text",{dx:v.x,dy:v.y,"text-anchor":d(m,v,a.labelDirection)},a.classNames.label).text(""+w);this.eventEmitter.emit("draw",{type:"label",index:o,group:b,element:x,text:""+w,x:v.x,y:v.y})}}k=q}this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a}); -//# sourceMappingURL=chartist.min.js.map \ No newline at end of file diff --git a/src/user/plugins/admin/themes/grav/js/codemirror-compressed.js b/src/user/plugins/admin/themes/grav/js/codemirror-compressed.js deleted file mode 100644 index 32f42a7..0000000 --- a/src/user/plugins/admin/themes/grav/js/codemirror-compressed.js +++ /dev/null @@ -1,23 +0,0 @@ -/* CodeMirror - Minified & Bundled - Generated on 7/30/2015 with http://codemirror.net/doc/compress.html - Version: 5.5 - - CodeMirror Library: - - codemirror.js - Modes: - - css.js - - gfm.js - - htmlmixed.js - - javascript.js - - markdown.js - - php.js - - sass.js - - twig.js - - xml.js - - yaml.js - Add-ons: - - continuelist.js - - overlay.js - */ - -(function(a){if(typeof exports=="object"&&typeof module=="object"){module.exports=a()}else{if(typeof define=="function"&&define.amd){return define([],a)}else{this.CodeMirror=a()}}})(function(){var co=/gecko\/\d/i.test(navigator.userAgent);var eK=/MSIE \d/.test(navigator.userAgent);var bJ=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);var dK=eK||bJ;var k=dK&&(eK?document.documentMode||6:bJ[1]);var c0=/WebKit\//.test(navigator.userAgent);var dN=c0&&/Qt\/\d+\.\d+/.test(navigator.userAgent);var dc=/Chrome\//.test(navigator.userAgent);var d3=/Opera\//.test(navigator.userAgent);var aC=/Apple Computer/.test(navigator.vendor);var c7=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent);var fu=/PhantomJS/.test(navigator.userAgent);var e1=/AppleWebKit/.test(navigator.userAgent)&&/Mobile\/\w+/.test(navigator.userAgent);var eg=e1||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent);var b7=e1||/Mac/.test(navigator.platform);var aP=/win/i.test(navigator.platform);var aZ=d3&&navigator.userAgent.match(/Version\/(\d*\.\d*)/);if(aZ){aZ=Number(aZ[1])}if(aZ&&aZ>=15){d3=false;c0=true}var bQ=b7&&(dN||d3&&(aZ==null||aZ<12.11));var ga=co||(dK&&k>=9);var gd=false,a7=false;function H(gj,gl){if(!(this instanceof H)){return new H(gj,gl)}this.options=gl=gl?aN(gl):{};aN(e3,gl,false);ce(gl);var gp=gl.value;if(typeof gp=="string"){gp=new at(gp,gl.mode,null,gl.lineSeparator)}this.doc=gp;var gk=new H.inputStyles[gl.inputStyle](this);var go=this.display=new eI(gj,gp,gk);go.wrapper.CodeMirror=this;ec(this);cO(this);if(gl.lineWrapping){this.display.wrapper.className+=" CodeMirror-wrap"}if(gl.autofocus&&!eg){go.input.focus()}aD(this);this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:false,delayingBlurEvent:false,focused:false,suppressEdits:false,pasteIncoming:false,cutIncoming:false,draggingText:false,highlight:new gh(),keySeq:null,specialChars:null};var gi=this;if(dK&&k<11){setTimeout(function(){gi.display.input.reset(true)},20)}fQ(this);bj();cI(this);this.curOp.forceUpdate=true;eb(this,gp);if((gl.autofocus&&!eg)||gi.hasFocus()){setTimeout(cv(cB,this),20)}else{aV(this)}for(var gn in bf){if(bf.hasOwnProperty(gn)){bf[gn](this,gl[gn],cc)}}d5(this);if(gl.finishInit){gl.finishInit(this)}for(var gm=0;gmgk.maxLineLength){gk.maxLineLength=gl;gk.maxLine=gm}})}function ce(gi){var gj=dh(gi.gutters,"CodeMirror-linenumbers");if(gj==-1&&gi.lineNumbers){gi.gutters=gi.gutters.concat(["CodeMirror-linenumbers"])}else{if(gj>-1&&!gi.lineNumbers){gi.gutters=gi.gutters.slice(0);gi.gutters.splice(gj,1)}}}function dA(gi){var gl=gi.display,gk=gl.gutters.offsetWidth;var gj=Math.round(gi.doc.height+bI(gi.display));return{clientHeight:gl.scroller.clientHeight,viewHeight:gl.wrapper.clientHeight,scrollWidth:gl.scroller.scrollWidth,clientWidth:gl.scroller.clientWidth,viewWidth:gl.wrapper.clientWidth,barLeft:gi.options.fixedGutter?gk:0,docHeight:gj,scrollHeight:gj+cT(gi)+gl.barHeight,nativeBarWidth:gl.nativeBarWidth,gutterWidth:gk}}function dk(gk,gj,gi){this.cm=gi;var gl=this.vert=f3("div",[f3("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar");var gm=this.horiz=f3("div",[f3("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");gk(gl);gk(gm);bX(gl,"scroll",function(){if(gl.clientHeight){gj(gl.scrollTop,"vertical")}});bX(gm,"scroll",function(){if(gm.clientWidth){gj(gm.scrollLeft,"horizontal")}});this.checkedOverlay=false;if(dK&&k<8){this.horiz.style.minHeight=this.vert.style.minWidth="18px"}}dk.prototype=aN({update:function(gl){var gm=gl.scrollWidth>gl.clientWidth+1;var gk=gl.scrollHeight>gl.clientHeight+1;var gn=gl.nativeBarWidth;if(gk){this.vert.style.display="block";this.vert.style.bottom=gm?gn+"px":"0";var gj=gl.viewHeight-(gm?gn:0);this.vert.firstChild.style.height=Math.max(0,gl.scrollHeight-gl.clientHeight+gj)+"px"}else{this.vert.style.display="";this.vert.firstChild.style.height="0"}if(gm){this.horiz.style.display="block";this.horiz.style.right=gk?gn+"px":"0";this.horiz.style.left=gl.barLeft+"px";var gi=gl.viewWidth-gl.barLeft-(gk?gn:0);this.horiz.firstChild.style.width=(gl.scrollWidth-gl.clientWidth+gi)+"px"}else{this.horiz.style.display="";this.horiz.firstChild.style.width="0"}if(!this.checkedOverlay&&gl.clientHeight>0){if(gn==0){this.overlayHack()}this.checkedOverlay=true}return{right:gk?gn:0,bottom:gm?gn:0}},setScrollLeft:function(gi){if(this.horiz.scrollLeft!=gi){this.horiz.scrollLeft=gi}},setScrollTop:function(gi){if(this.vert.scrollTop!=gi){this.vert.scrollTop=gi}},overlayHack:function(){var gi=b7&&!c7?"12px":"18px";this.horiz.style.minHeight=this.vert.style.minWidth=gi;var gj=this;var gk=function(gl){if(L(gl)!=gj.vert&&L(gl)!=gj.horiz){c2(gj.cm,eu)(gl)}};bX(this.vert,"mousedown",gk);bX(this.horiz,"mousedown",gk)},clear:function(){var gi=this.horiz.parentNode;gi.removeChild(this.horiz);gi.removeChild(this.vert)}},dk.prototype);function e4(){}e4.prototype=aN({update:function(){return{bottom:0,right:0}},setScrollLeft:function(){},setScrollTop:function(){},clear:function(){}},e4.prototype);H.scrollbarModel={"native":dk,"null":e4};function aD(gi){if(gi.display.scrollbars){gi.display.scrollbars.clear();if(gi.display.scrollbars.addClass){f(gi.display.wrapper,gi.display.scrollbars.addClass)}}gi.display.scrollbars=new H.scrollbarModel[gi.options.scrollbarStyle](function(gj){gi.display.wrapper.insertBefore(gj,gi.display.scrollbarFiller);bX(gj,"mousedown",function(){if(gi.state.focused){setTimeout(function(){gi.display.input.focus()},0)}});gj.setAttribute("cm-not-content","true")},function(gk,gj){if(gj=="horizontal"){bE(gi,gk)}else{N(gi,gk)}},gi);if(gi.display.scrollbars.addClass){fA(gi.display.wrapper,gi.display.scrollbars.addClass)}}function eY(gk,gm){if(!gm){gm=dA(gk)}var gj=gk.display.barWidth,gi=gk.display.barHeight;aU(gk,gm);for(var gl=0;gl<4&&gj!=gk.display.barWidth||gi!=gk.display.barHeight;gl++){if(gj!=gk.display.barWidth&&gk.options.lineWrapping){a9(gk)}aU(gk,dA(gk));gj=gk.display.barWidth;gi=gk.display.barHeight}}function aU(gi,gj){var gl=gi.display;var gk=gl.scrollbars.update(gj);gl.sizer.style.paddingRight=(gl.barWidth=gk.right)+"px";gl.sizer.style.paddingBottom=(gl.barHeight=gk.bottom)+"px";if(gk.right&&gk.bottom){gl.scrollbarFiller.style.display="block";gl.scrollbarFiller.style.height=gk.bottom+"px";gl.scrollbarFiller.style.width=gk.right+"px"}else{gl.scrollbarFiller.style.display=""}if(gk.bottom&&gi.options.coverGutterNextToScrollbar&&gi.options.fixedGutter){gl.gutterFiller.style.display="block";gl.gutterFiller.style.height=gk.bottom+"px";gl.gutterFiller.style.width=gj.gutterWidth+"px"}else{gl.gutterFiller.style.display=""}}function b6(gl,gp,gk){var gm=gk&&gk.top!=null?Math.max(0,gk.top):gl.scroller.scrollTop;gm=Math.floor(gm-e8(gl));var gi=gk&&gk.bottom!=null?gk.bottom:gm+gl.wrapper.clientHeight;var gn=bG(gp,gm),go=bG(gp,gi);if(gk&&gk.ensure){var gj=gk.ensure.from.line,gq=gk.ensure.to.line;if(gj=go){gn=bG(gp,bM(ff(gp,gq))-gl.wrapper.clientHeight);go=gq}}}return{from:gn,to:Math.max(go,gn+1)}}function eE(gq){var go=gq.display,gp=go.view;if(!go.alignWidgets&&(!go.gutters.firstChild||!gq.options.fixedGutter)){return}var gm=dX(go)-go.scroller.scrollLeft+gq.doc.scrollLeft;var gi=go.gutters.offsetWidth,gj=gm+"px";for(var gl=0;gl=gm.viewFrom&&gl.visible.to<=gm.viewTo&&(gm.updateLineNumbers==null||gm.updateLineNumbers>=gm.viewTo)&&gm.renderedView==gm.view&&db(gr)==0){return false}if(d5(gr)){ex(gr);gl.dims=fd(gr)}var gk=gq.first+gq.size;var go=Math.max(gl.visible.from-gr.options.viewportMargin,gq.first);var gp=Math.min(gk,gl.visible.to+gr.options.viewportMargin);if(gm.viewFromgp&&gm.viewTo-gp<20){gp=Math.min(gk,gm.viewTo)}if(a7){go=aW(gr.doc,go);gp=d2(gr.doc,gp)}var gj=go!=gm.viewFrom||gp!=gm.viewTo||gm.lastWrapHeight!=gl.wrapperHeight||gm.lastWrapWidth!=gl.wrapperWidth;cR(gr,go,gp);gm.viewOffset=bM(ff(gr.doc,gm.viewFrom));gr.display.mover.style.top=gm.viewOffset+"px";var gi=db(gr);if(!gj&&gi==0&&!gl.force&&gm.renderedView==gm.view&&(gm.updateLineNumbers==null||gm.updateLineNumbers>=gm.viewTo)){return false}var gn=dO();if(gi>4){gm.lineDiv.style.display="none"}cm(gr,gm.updateLineNumbers,gl.dims);if(gi>4){gm.lineDiv.style.display=""}gm.renderedView=gm.view;if(gn&&dO()!=gn&&gn.offsetHeight){gn.focus()}d1(gm.cursorDiv);d1(gm.selectionDiv);gm.gutters.style.height=gm.sizer.style.minHeight=0;if(gj){gm.lastWrapHeight=gl.wrapperHeight;gm.lastWrapWidth=gl.wrapperWidth;ef(gr,400)}gm.updateLineNumbers=null;return true}function cj(gj,gm){var gi=gm.viewport;for(var gl=true;;gl=false){if(!gl||!gj.options.lineWrapping||gm.oldDisplayWidth==dl(gj)){if(gi&&gi.top!=null){gi={top:Math.min(gj.doc.height+bI(gj.display)-cV(gj),gi.top)}}gm.visible=b6(gj.display,gj.doc,gi);if(gm.visible.from>=gj.display.viewFrom&&gm.visible.to<=gj.display.viewTo){break}}if(!B(gj,gm)){break}a9(gj);var gk=dA(gj);bC(gj);dz(gj,gk);eY(gj,gk)}gm.signal(gj,"update",gj);if(gj.display.viewFrom!=gj.display.reportedViewFrom||gj.display.viewTo!=gj.display.reportedViewTo){gm.signal(gj,"viewportChange",gj,gj.display.viewFrom,gj.display.viewTo);gj.display.reportedViewFrom=gj.display.viewFrom;gj.display.reportedViewTo=gj.display.viewTo}}function dT(gj,gi){var gl=new aI(gj,gi);if(B(gj,gl)){a9(gj);cj(gj,gl);var gk=dA(gj);bC(gj);dz(gj,gk);eY(gj,gk);gl.finish()}}function dz(gi,gj){gi.display.sizer.style.minHeight=gj.docHeight+"px";var gk=gj.docHeight+gi.display.barHeight;gi.display.heightForcer.style.top=gk+"px";gi.display.gutters.style.height=Math.max(gk+cT(gi),gj.clientHeight)+"px"}function a9(gp){var gn=gp.display;var gj=gn.lineDiv.offsetTop;for(var gk=0;gk0.001||go<-0.001){f6(gq.line,gr);cb(gq.line);if(gq.rest){for(var gi=0;gi-1){gr=false}ab(gt,gm,gn,gs)}if(gr){d1(gm.lineNumber);gm.lineNumber.appendChild(document.createTextNode(es(gt.options,gn)))}gu=gm.node.nextSibling}}gn+=gm.size}while(gu){gu=go(gu)}}function ab(gi,gk,gm,gn){for(var gj=0;gj1){if(bm&&bm.join("\n")==gm){if(gj.ranges.length%bm.length==0){gi=[];for(var gn=0;gn=0;gn--){var go=gj.ranges[gn];var gt=go.from(),gs=go.to();if(go.empty()){if(gk&&gk>0){gt=W(gt.line,gt.ch-gk)}else{if(gw.state.overwrite&&!gl){gs=W(gs.line,Math.min(ff(gu,gs.line).text.length,gs.ch+fG(gp).length))}}}var gq=gw.curOp.updateInput;var gr={from:gt,to:gs,text:gi?gi[gn%gi.length]:gp,origin:gv||(gl?"paste":gw.state.cutIncoming?"cut":"+input")};bg(gw.doc,gr);ae(gw,"inputRead",gw,gr)}if(gm&&!gl){fW(gw,gm)}fF(gw);gw.curOp.updateInput=gq;gw.curOp.typing=true;gw.state.pasteIncoming=gw.state.cutIncoming=false}function ba(gk,gi){var gj=gk.clipboardData&&gk.clipboardData.getData("text/plain");if(gj){gk.preventDefault();cM(gi,function(){fZ(gi,gj,0,null,"paste")});return true}}function fW(gi,gm){if(!gi.options.electricChars||!gi.options.smartIndent){return}var gn=gi.doc.sel;for(var gl=gn.ranges.length-1;gl>=0;gl--){var gj=gn.ranges[gl];if(gj.head.ch>100||(gl&&gn.ranges[gl-1].head.line==gj.head.line)){continue}var go=gi.getModeAt(gj.head);var gp=false;if(go.electricChars){for(var gk=0;gk-1){gp=ad(gi,gj.head.line,"smart");break}}}else{if(go.electricInput){if(go.electricInput.test(ff(gi.doc,gj.head.line).text.slice(0,gj.head.ch))){gp=ad(gi,gj.head.line,"smart")}}}if(gp){ae(gi,"electricInput",gi,gj.head.line)}}}function dj(gi){var gn=[],gk=[];for(var gl=0;gl=9&&gj.hasSelection){gj.hasSelection=null}gj.poll()});bX(gl,"paste",function(go){if(ba(go,gi)){return true}gi.state.pasteIncoming=true;gj.fastPoll()});function gm(gp){if(gi.somethingSelected()){bm=gi.getSelections();if(gj.inaccurateSelection){gj.prevInput="";gj.inaccurateSelection=false;gl.value=bm.join("\n");dL(gl)}}else{if(!gi.options.lineWiseCopyCut){return}else{var go=dj(gi);bm=go.text;if(gp.type=="cut"){gi.setSelections(go.ranges,null,Z)}else{gj.prevInput="";gl.value=go.text.join("\n");dL(gl)}}}if(gp.type=="cut"){gi.state.cutIncoming=true}}bX(gl,"cut",gm);bX(gl,"copy",gm);bX(gk.scroller,"paste",function(go){if(bb(gk,go)){return}gi.state.pasteIncoming=true;gj.focus()});bX(gk.lineSpace,"selectstart",function(go){if(!bb(gk,go)){cG(go)}});bX(gl,"compositionstart",function(){var go=gi.getCursor("from");gj.composing={start:go,range:gi.markText(go,gi.getCursor("to"),{className:"CodeMirror-composing"})}});bX(gl,"compositionend",function(){if(gj.composing){gj.poll();gj.composing.range.clear();gj.composing=null}})},prepareSelection:function(){var gj=this.cm,gn=gj.display,gm=gj.doc;var gi=fI(gj);if(gj.options.moveInputWithCursor){var go=dU(gj,gm.sel.primary().head,"div");var gk=gn.wrapper.getBoundingClientRect(),gl=gn.lineDiv.getBoundingClientRect();gi.teTop=Math.max(0,Math.min(gn.wrapper.clientHeight-10,go.top+gl.top-gk.top));gi.teLeft=Math.max(0,Math.min(gn.wrapper.clientWidth-10,go.left+gl.left-gk.left))}return gi},showSelection:function(gk){var gi=this.cm,gj=gi.display;bR(gj.cursorDiv,gk.cursors);bR(gj.selectionDiv,gk.selection);if(gk.teTop!=null){this.wrapper.style.top=gk.teTop+"px";this.wrapper.style.left=gk.teLeft+"px"}},reset:function(gm){if(this.contextMenuPending){return}var gj,gl,gi=this.cm,go=gi.doc;if(gi.somethingSelected()){this.prevInput="";var gk=go.sel.primary();gj=da&&(gk.to().line-gk.from().line>100||(gl=gi.getSelection()).length>1000);var gn=gj?"-":gl||gi.getSelection();this.textarea.value=gn;if(gi.state.focused){dL(this.textarea)}if(dK&&k>=9){this.hasSelection=gn}}else{if(!gm){this.prevInput=this.textarea.value="";if(dK&&k>=9){this.hasSelection=null}}}this.inaccurateSelection=gj},getField:function(){return this.textarea},supportsTouch:function(){return false},focus:function(){if(this.cm.options.readOnly!="nocursor"&&(!eg||dO()!=this.textarea)){try{this.textarea.focus()}catch(gi){}}},blur:function(){this.textarea.blur()},resetPosition:function(){this.wrapper.style.top=this.wrapper.style.left=0},receivedFocus:function(){this.slowPoll()},slowPoll:function(){var gi=this;if(gi.pollingFast){return}gi.polling.set(this.cm.options.pollInterval,function(){gi.poll();if(gi.cm.state.focused){gi.slowPoll()}})},fastPoll:function(){var gj=false,gi=this;gi.pollingFast=true;function gk(){var gl=gi.poll();if(!gl&&!gj){gj=true;gi.polling.set(60,gk)}else{gi.pollingFast=false;gi.slowPoll()}}gi.polling.set(20,gk)},poll:function(){var gi=this.cm,gl=this.textarea,gm=this.prevInput;if(this.contextMenuPending||!gi.state.focused||(bs(gl)&&!gm&&!this.composing)||aj(gi)||gi.options.disableInput||gi.state.keySeq){return false}var go=gl.value;if(go==gm&&!gi.somethingSelected()){return false}if(dK&&k>=9&&this.hasSelection===go||b7&&/[\uf700-\uf7ff]/.test(go)){gi.display.input.reset();return false}if(gi.doc.sel==gi.display.selForContextMenu){var gn=go.charCodeAt(0);if(gn==8203&&!gm){gm="\u200b"}if(gn==8666){this.reset();return this.cm.execCommand("undo")}}var gp=0,gj=Math.min(gm.length,go.length);while(gp1000||go.indexOf("\n")>-1){gl.value=gk.prevInput=""}else{gk.prevInput=go}if(gk.composing){gk.composing.range.clear();gk.composing.range=gi.markText(gk.composing.start,gi.getCursor("to"),{className:"CodeMirror-composing"})}});return true},ensurePolled:function(){if(this.pollingFast&&this.poll()){this.pollingFast=false}},onKeyPress:function(){if(dK&&k>=9){this.hasSelection=null}this.fastPoll()},onContextMenu:function(gn){var gs=this,gt=gs.cm,gp=gt.display,gj=gs.textarea;var gr=cn(gt,gn),gi=gp.scroller.scrollTop;if(!gr||d3){return}var gm=gt.options.resetSelectionOnContextMenu;if(gm&>.doc.sel.contains(gr)==-1){c2(gt,bU)(gt.doc,eS(gr),Z)}var go=gj.style.cssText;gs.wrapper.style.position="absolute";gj.style.cssText="position: fixed; width: 30px; height: 30px; top: "+(gn.clientY-5)+"px; left: "+(gn.clientX-5)+"px; z-index: 1000; background: "+(dK?"rgba(255, 255, 255, .05)":"transparent")+"; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";if(c0){var gu=window.scrollY}gp.input.focus();if(c0){window.scrollTo(null,gu)}gp.input.reset();if(!gt.somethingSelected()){gj.value=gs.prevInput=" "}gs.contextMenuPending=true;gp.selForContextMenu=gt.doc.sel;clearTimeout(gp.detectingSelectAll);function gl(){if(gj.selectionStart!=null){var gv=gt.somethingSelected();var gw="\u200b"+(gv?gj.value:"");gj.value="\u21da";gj.value=gw;gs.prevInput=gv?"":"\u200b";gj.selectionStart=1;gj.selectionEnd=gw.length;gp.selForContextMenu=gt.doc.sel}}function gq(){gs.contextMenuPending=false;gs.wrapper.style.position="relative";gj.style.cssText=go;if(dK&&k<9){gp.scrollbars.setScrollTop(gp.scroller.scrollTop=gi)}if(gj.selectionStart!=null){if(!dK||(dK&&k<9)){gl()}var gv=0,gw=function(){if(gp.selForContextMenu==gt.doc.sel&&gj.selectionStart==0&&gj.selectionEnd>0&&gs.prevInput=="\u200b"){c2(gt,eD.selectAll)(gt)}else{if(gv++<10){gp.detectingSelectAll=setTimeout(gw,500)}else{gp.input.reset()}}};gp.detectingSelectAll=setTimeout(gw,200)}}if(dK&&k>=9){gl()}if(ga){er(gn);var gk=function(){ed(window,"mouseup",gk);setTimeout(gq,20)};bX(window,"mouseup",gk)}else{setTimeout(gq,50)}},setUneditable:fV,needsContentAttribute:false},Y.prototype);function dv(gi){this.cm=gi;this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null;this.polling=new gh();this.gracePeriod=false}dv.prototype=aN({init:function(gl){var gk=this,gi=gk.cm;var gm=gk.div=gl.lineDiv;gm.contentEditable="true";fP(gm);bX(gm,"paste",function(gn){ba(gn,gi)});bX(gm,"compositionstart",function(gr){var gq=gr.data;gk.composing={sel:gi.doc.sel,data:gq,startData:gq};if(!gq){return}var go=gi.doc.sel.primary();var gn=gi.getLine(go.head.line);var gp=gn.indexOf(gq,Math.max(0,go.head.ch-gq.length));if(gp>-1&&gp<=go.head.ch){gk.composing.sel=eS(W(go.head.line,gp),W(go.head.line,gp+gq.length))}});bX(gm,"compositionupdate",function(gn){gk.composing.data=gn.data});bX(gm,"compositionend",function(go){var gn=gk.composing;if(!gn){return}if(go.data!=gn.startData&&!/\u200b/.test(go.data)){gn.data=go.data}setTimeout(function(){if(!gn.handled){gk.applyComposition(gn)}if(gk.composing==gn){gk.composing=null}},50)});bX(gm,"touchstart",function(){gk.forceCompositionEnd()});bX(gm,"input",function(){if(gk.composing){return}if(!gk.pollContent()){cM(gk.cm,function(){ah(gi)})}});function gj(gq){if(gi.somethingSelected()){bm=gi.getSelections();if(gq.type=="cut"){gi.replaceSelection("",null,"cut")}}else{if(!gi.options.lineWiseCopyCut){return}else{var go=dj(gi);bm=go.text;if(gq.type=="cut"){gi.operation(function(){gi.setSelections(go.ranges,0,Z);gi.replaceSelection("",null,"cut")})}}}if(gq.clipboardData&&!e1){gq.preventDefault();gq.clipboardData.clearData();gq.clipboardData.setData("text/plain",bm.join("\n"))}else{var gp=aX(),gr=gp.firstChild;gi.display.lineSpace.insertBefore(gp,gi.display.lineSpace.firstChild);gr.value=bm.join("\n");var gn=document.activeElement;dL(gr);setTimeout(function(){gi.display.lineSpace.removeChild(gp);gn.focus()},50)}}bX(gm,"copy",gj);bX(gm,"cut",gj)},prepareSelection:function(){var gi=fI(this.cm,false);gi.focus=this.cm.state.focused;return gi},showSelection:function(gi){if(!gi||!this.cm.display.view.length){return}if(gi.focus){this.showPrimarySelection()}this.showMultipleSelections(gi)},showPrimarySelection:function(){var gm=window.getSelection(),gp=this.cm.doc.sel.primary();var gn=az(this.cm,gm.anchorNode,gm.anchorOffset);var gr=az(this.cm,gm.focusNode,gm.focusOffset);if(gn&&!gn.bad&&gr&&!gr.bad&&cf(ar(gn,gr),gp.from())==0&&cf(bx(gn,gr),gp.to())==0){return}var gl=cz(this.cm,gp.from());var gq=cz(this.cm,gp.to());if(!gl&&!gq){return}var gt=this.cm.display.view;var go=gm.rangeCount&&gm.getRangeAt(0);if(!gl){gl={node:gt[0].measure.map[2],offset:0}}else{if(!gq){var gk=gt[gt.length-1].measure;var gj=gk.maps?gk.maps[gk.maps.length-1]:gk.map;gq={node:gj[gj.length-1],offset:gj[gj.length-2]-gj[gj.length-3]}}}try{var gi=cl(gl.node,gl.offset,gq.offset,gq.node)}catch(gs){}if(gi){gm.removeAllRanges();gm.addRange(gi);if(go&&gm.anchorNode==null){gm.addRange(go)}else{if(co){this.startGracePeriod()}}}this.rememberSelection()},startGracePeriod:function(){var gi=this;clearTimeout(this.gracePeriod);this.gracePeriod=setTimeout(function(){gi.gracePeriod=false;if(gi.selectionChanged()){gi.cm.operation(function(){gi.cm.curOp.selectionChanged=true})}},20)},showMultipleSelections:function(gi){bR(this.cm.display.cursorDiv,gi.cursors);bR(this.cm.display.selectionDiv,gi.selection)},rememberSelection:function(){var gi=window.getSelection();this.lastAnchorNode=gi.anchorNode;this.lastAnchorOffset=gi.anchorOffset;this.lastFocusNode=gi.focusNode;this.lastFocusOffset=gi.focusOffset},selectionInEditor:function(){var gj=window.getSelection();if(!gj.rangeCount){return false}var gi=gj.getRangeAt(0).commonAncestorContainer;return gb(this.div,gi)},focus:function(){if(this.cm.options.readOnly!="nocursor"){this.div.focus()}},blur:function(){this.div.blur()},getField:function(){return this.div},supportsTouch:function(){return true},receivedFocus:function(){var gi=this;if(this.selectionInEditor()){this.pollSelection()}else{cM(this.cm,function(){gi.cm.curOp.selectionChanged=true})}function gj(){if(gi.cm.state.focused){gi.pollSelection();gi.polling.set(gi.cm.options.pollInterval,gj)}}this.polling.set(this.cm.options.pollInterval,gj)},selectionChanged:function(){var gi=window.getSelection();return gi.anchorNode!=this.lastAnchorNode||gi.anchorOffset!=this.lastAnchorOffset||gi.focusNode!=this.lastFocusNode||gi.focusOffset!=this.lastFocusOffset},pollSelection:function(){if(!this.composing&&!this.gracePeriod&&this.selectionChanged()){var gl=window.getSelection(),gi=this.cm;this.rememberSelection();var gj=az(gi,gl.anchorNode,gl.anchorOffset);var gk=az(gi,gl.focusNode,gl.focusOffset);if(gj&&gk){cM(gi,function(){bU(gi.doc,eS(gj,gk),Z);if(gj.bad||gk.bad){gi.curOp.selectionChanged=true}})}}},pollContent:function(){var gs=this.cm,gC=gs.display,gA=gs.doc.sel.primary();var gB=gA.from(),gm=gA.to();if(gB.linegC.viewTo-1){return false}var gp;if(gB.line==gC.viewFrom||(gp=dr(gs,gB.line))==0){var gn=bN(gC.view[0].line);var gr=gC.view[0].node}else{var gn=bN(gC.view[gp].line);var gr=gC.view[gp-1].node.nextSibling}var gz=dr(gs,gm.line);if(gz==gC.view.length-1){var gu=gC.viewTo-1;var gx=gC.lineDiv.lastChild}else{var gu=bN(gC.view[gz+1].line)-1;var gx=gC.view[gz+1].node.previousSibling}var gD=gs.doc.splitLines(f0(gs,gr,gx,gn,gu));var gw=f5(gs.doc,W(gn,0),W(gu,ff(gs.doc,gu).text.length));while(gD.length>1&&gw.length>1){if(fG(gD)==fG(gw)){gD.pop();gw.pop();gu--}else{if(gD[0]==gw[0]){gD.shift();gw.shift();gn++}else{break}}}var gy=0,gk=0;var gt=gD[0],gj=gw[0],gi=Math.min(gt.length,gj.length);while(gy1||gD[0]||cf(go,gv)){a1(gs.doc,gD,go,gv,"+input");return true}},ensurePolled:function(){this.forceCompositionEnd()},reset:function(){this.forceCompositionEnd()},forceCompositionEnd:function(){if(!this.composing||this.composing.handled){return}this.applyComposition(this.composing);this.composing.handled=true;this.div.blur();this.div.focus()},applyComposition:function(gi){if(gi.data&&gi.data!=gi.startData){c2(this.cm,fZ)(this.cm,gi.data,0,gi.sel)}},setUneditable:function(gi){gi.setAttribute("contenteditable","false")},onKeyPress:function(gi){gi.preventDefault();c2(this.cm,fZ)(this.cm,String.fromCharCode(gi.charCode==null?gi.keyCode:gi.charCode),0)},onContextMenu:fV,resetPosition:fV,needsContentAttribute:true},dv.prototype);function cz(go,gm){var gn=fb(go,gm.line);if(!gn||gn.hidden){return null}var gq=ff(go.doc,gm.line);var gj=ct(gn,gq,gm.line);var gk=a(gq),gl="left";if(gk){var gi=aG(gk,gm.ch);gl=gi%2?"right":"left"}var gp=aL(gj.map,gm.ch,gl);gp.offset=gp.collapse=="right"?gp.end:gp.start;return gp}function et(gj,gi){if(gi){gj.bad=true}return gj}function az(gi,gl,gn){var gm;if(gl==gi.display.lineDiv){gm=gi.display.lineDiv.childNodes[gn];if(!gm){return et(gi.clipPos(W(gi.display.viewTo-1)),true)}gl=null;gn=0}else{for(gm=gl;;gm=gm.parentNode){if(!gm||gm==gi.display.lineDiv){return null}if(gm.parentNode&&gm.parentNode==gi.display.lineDiv){break}}}for(var gk=0;gk=0&&cf(gl,gj.to())<=0){return gk}}return -1}};function dY(gi,gj){this.anchor=gi;this.head=gj}dY.prototype={from:function(){return ar(this.anchor,this.head)},to:function(){return bx(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}};function cw(gi,gp){var gk=gi[gp];gi.sort(function(gs,gr){return cf(gs.from(),gr.from())});gp=dh(gi,gk);for(var gm=1;gm=0){var gn=ar(gj.from(),gq.from()),go=bx(gj.to(),gq.to());var gl=gj.empty()?gq.from()==gq.head:gj.from()==gj.head;if(gm<=gp){--gp}gi.splice(--gm,2,new dY(gl?go:gn,gl?gn:go))}}return new f4(gi,gp)}function eS(gi,gj){return new f4([new dY(gi,gj||gi)],0)}function c5(gi,gj){return Math.max(gi.first,Math.min(gj,gi.first+gi.size-1))}function fJ(gj,gk){if(gk.linegi){return W(gi,ff(gj,gi).text.length)}return fs(gk,ff(gj,gk.line).text.length)}function fs(gk,gj){var gi=gk.ch;if(gi==null||gi>gj){return W(gk.line,gj)}else{if(gi<0){return W(gk.line,0)}else{return gk}}}function b9(gj,gi){return gi>=gj.first&&gi=gk.ch:gi.to>gk.ch))){if(go){aE(gj,"beforeCursorEnter");if(gj.explicitlyCleared){if(!gt.markedSpans){break}else{--gm;continue}}}if(!gj.atomic){continue}var gp=gj.find(gl<0?-1:1);if(cf(gp,gk)==0){gp.ch+=gl;if(gp.ch<0){if(gp.line>gr.first){gp=fJ(gr,W(gp.line-1))}else{gp=null}}else{if(gp.ch>gt.text.length){if(gp.line3){gt(gN,gL.top,null,gL.bottom);gN=gl;if(gL.bottomgA.bottom||gM.bottom==gA.bottom&&gM.right>gA.right){gA=gM}if(gN0){gk.blinker=setInterval(function(){gk.cursorDiv.style.visibility=(gj=!gj)?"":"hidden"},gi.options.cursorBlinkRate)}else{if(gi.options.cursorBlinkRate<0){gk.cursorDiv.style.visibility="hidden"}}}function ef(gi,gj){if(gi.doc.mode.startState&&gi.doc.frontier=gi.display.viewTo){return}var gk=+new Date+gi.options.workTime;var gl=b3(gm.mode,dC(gi,gm.frontier));var gj=[];gm.iter(gm.frontier,Math.min(gm.first+gm.size,gi.display.viewTo+500),function(gn){if(gm.frontier>=gi.display.viewFrom){var gq=gn.styles;var gs=fz(gi,gn,gl,true);gn.styles=gs.styles;var gp=gn.styleClasses,gr=gs.classes;if(gr){gn.styleClasses=gr}else{if(gp){gn.styleClasses=null}}var gt=!gq||gq.length!=gn.styles.length||gp!=gr&&(!gp||!gr||gp.bgClass!=gr.bgClass||gp.textClass!=gr.textClass);for(var go=0;!gt&&gogk){ef(gi,gi.options.workDelay);return true}});if(gj.length){cM(gi,function(){for(var gn=0;gngk;--gr){if(gr<=gn.first){return gn.first}var gq=ff(gn,gr-1);if(gq.stateAfter&&(!gl||gr<=gn.frontier)){return gr}var gp=bT(gq.text,null,go.options.tabSize);if(gm==null||gj>gp){gm=gr-1;gj=gp}}return gm}function dC(gi,go,gj){var gm=gi.doc,gl=gi.display;if(!gm.mode.startState){return true}var gn=cy(gi,go,gj),gk=gn>gm.first&&ff(gm,gn-1).stateAfter;if(!gk){gk=b0(gm.mode)}else{gk=b3(gm.mode,gk)}gm.iter(gn,go,function(gp){dx(gi,gp.text,gk);var gq=gn==go-1||gn%5==0||gn>=gl.viewFrom&&gn2){gn.push((gq.bottom+gj.top)/2-go.top)}}}gn.push(go.bottom-go.top)}}function ct(gk,gi,gl){if(gk.line==gi){return{map:gk.measure.map,cache:gk.measure.cache}}for(var gj=0;gjgl){return{map:gk.measure.maps[gj],cache:gk.measure.caches[gj],before:true}}}}function c1(gi,gk){gk=y(gk);var gm=bN(gk);var gj=gi.display.externalMeasured=new bv(gi.doc,gk,gm);gj.lineN=gm;var gl=gj.built=eR(gi,gj);gj.text=gl.pre;bR(gi.display.lineMeasure,gl.pre);return gj}function eh(gi,gj,gl,gk){return C(gi,a4(gi,gj),gl,gk)}function fb(gi,gk){if(gk>=gi.display.viewFrom&&gk=gj.lineN&&gkgi){gn=gr-gm;gk=gn-1;if(gi>=gr){gq="right"}}}}if(gk!=null){gl=gj[go+2];if(gm==gr&&gp==(gl.insertLeft?"left":"right")){gq=gp}if(gp=="left"&&gk==0){while(go&&gj[go-2]==gj[go-3]&&gj[go-1].insertLeft){gl=gj[(go-=3)+2];gq="left"}}if(gp=="right"&&gk==gr-gm){while(go0){gi=gn="right"}var gk;if(gp.options.lineWrapping&&(gk=gx.getClientRects()).length>1){gj=gk[gn=="right"?gk.length-1:0]}else{gj=gx.getBoundingClientRect()}}if(dK&&k<9&&!gm&&(!gj||!gj.left&&!gj.right)){var go=gx.parentNode.getClientRects()[0];if(go){gj={left:go.left,right:go.left+dD(gp.display),top:go.top,bottom:go.bottom}}else{gj=eB}}var gv=gj.top-gz.rect.top,gt=gj.bottom-gz.rect.top;var gB=(gv+gt)/2;var gA=gz.view.measure.heights;for(var gy=0;gygv.from){return gm(gx-1)}return gm(gx,gw)}var gn=a(go),gi=gq.ch;if(!gn){return gm(gi)}var gj=aG(gn,gi);var gl=gs(gi,gj);if(e2!=null){gl.other=gs(gi,e2)}return gl}function dH(gi,gm){var gl=0,gm=fJ(gi.doc,gm);if(!gi.options.lineWrapping){gl=dD(gi.display)*gm.ch}var gj=ff(gi.doc,gm.line);var gk=bM(gj)+e8(gi.display);return{left:gl,right:gl,top:gk,bottom:gk+gj.height}}function f2(gi,gj,gk,gm){var gl=W(gi,gj);gl.xRel=gm;if(gk){gl.outside=true}return gl}function fO(gp,gm,gl){var go=gp.doc;gl+=gp.display.viewOffset;if(gl<0){return f2(go.first,0,true,-1)}var gk=bG(go,gl),gq=go.first+go.size-1;if(gk>gq){return f2(go.first+go.size-1,ff(go,gq).text.length,true,1)}if(gm<0){gm=0}var gj=ff(go,gk);for(;;){var gr=cZ(gp,gj,gk,gm,gl);var gn=ew(gj);var gi=gn&&gn.find(0,true);if(gn&&(gr.ch>gi.from.ch||gr.ch==gi.from.ch&&gr.xRel>0)){gk=bN(gj=gi.to.line)}else{return gr}}}function cZ(gs,gk,gv,gu,gt){var gr=gt-bM(gk);var go=false,gB=2*gs.display.wrapper.clientWidth;var gy=a4(gs,gk);function gF(gH){var gI=dU(gs,W(gv,gH),"line",gk,gy);go=true;if(gr>gI.bottom){return gI.left-gB}else{if(grgj){return f2(gv,gl,gn,1)}for(;;){if(gx?gl==gC||gl==u(gk,gC,1):gl-gC<=1){var gw=gu1?1:0);return gq}var gp=Math.ceil(gA/2),gG=gC+gp;if(gx){gG=gC;for(var gD=0;gDgu){gl=gG;gj=gm;if(gn=go){gj+=1000}gA=gp}else{gC=gG;gz=gm;gi=go;gA-=gp}}}var aH;function aY(gk){if(gk.cachedTextHeight!=null){return gk.cachedTextHeight}if(aH==null){aH=f3("pre");for(var gj=0;gj<49;++gj){aH.appendChild(document.createTextNode("x"));aH.appendChild(f3("br"))}aH.appendChild(document.createTextNode("x"))}bR(gk.measure,aH);var gi=aH.offsetHeight/50;if(gi>3){gk.cachedTextHeight=gi}d1(gk.measure);return gi||1}function dD(gm){if(gm.cachedCharWidth!=null){return gm.cachedCharWidth}var gi=f3("span","xxxxxxxxxx");var gl=f3("pre",[gi]);bR(gm.measure,gl);var gk=gi.getBoundingClientRect(),gj=(gk.right-gk.left)/10;if(gj>2){gm.cachedCharWidth=gj}return gj||10}var bp=null;var d8=0;function cI(gi){gi.curOp={cm:gi,viewChanged:false,startHeight:gi.doc.height,forceUpdate:false,updateInput:null,typing:false,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:false,updateMaxLine:false,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:false,id:++d8};if(bp){bp.ops.push(gi.curOp)}else{gi.curOp.ownsGroup=bp={ops:[gi.curOp],delayedCallbacks:[]}}}function cU(gl){var gk=gl.delayedCallbacks,gj=0;do{for(;gj=gj.viewTo)||gj.maxLineChanged&&gi.options.lineWrapping;gk.update=gk.mustUpdate&&new aI(gi,gk.mustUpdate&&{top:gk.scrollTop,ensure:gk.scrollToPos},gk.forceUpdate)}function aq(gi){gi.updatedDisplay=gi.mustUpdate&&B(gi.cm,gi.update)}function b2(gk){var gi=gk.cm,gj=gi.display;if(gk.updatedDisplay){a9(gi)}gk.barMeasure=dA(gi);if(gj.maxLineChanged&&!gi.options.lineWrapping){gk.adjustWidthTo=eh(gi,gj.maxLine,gj.maxLine.text.length).left+3;gi.display.sizerWidth=gk.adjustWidthTo;gk.barMeasure.scrollWidth=Math.max(gj.scroller.clientWidth,gj.sizer.offsetLeft+gk.adjustWidthTo+cT(gi)+gi.display.barWidth);gk.maxScrollLeft=Math.max(0,gj.sizer.offsetLeft+gk.adjustWidthTo-dl(gi))}if(gk.updatedDisplay||gk.selectionChanged){gk.preparedSelection=gj.input.prepareSelection()}}function ap(gj){var gi=gj.cm;if(gj.adjustWidthTo!=null){gi.display.sizer.style.minWidth=gj.adjustWidthTo+"px";if(gj.maxScrollLeftgn)){gk.updateLineNumbers=gn}gp.curOp.viewChanged=true;if(gn>=gk.viewTo){if(a7&&aW(gp.doc,gn)gk.viewFrom){ex(gp)}else{gk.viewFrom+=gq;gk.viewTo+=gq}}else{if(gn<=gk.viewFrom&&go>=gk.viewTo){ex(gp)}else{if(gn<=gk.viewFrom){var gm=de(gp,go,go+gq,1);if(gm){gk.view=gk.view.slice(gm.index);gk.viewFrom=gm.lineN;gk.viewTo+=gq}else{ex(gp)}}else{if(go>=gk.viewTo){var gm=de(gp,gn,gn,-1);if(gm){gk.view=gk.view.slice(0,gm.index);gk.viewTo=gm.lineN}else{ex(gp)}}else{var gl=de(gp,gn,gn,-1);var gj=de(gp,go,go+gq,1);if(gl&&gj){gk.view=gk.view.slice(0,gl.index).concat(eV(gp,gl.lineN,gj.lineN)).concat(gk.view.slice(gj.index));gk.viewTo+=gq}else{ex(gp)}}}}}}var gi=gk.externalMeasured;if(gi){if(go=gm.lineN&&gk=go.viewTo){return}var gl=go.view[dr(gj,gk)];if(gl.node==null){return}var gi=gl.changes||(gl.changes=[]);if(dh(gi,gn)==-1){gi.push(gn)}}function ex(gi){gi.display.viewFrom=gi.display.viewTo=gi.doc.first;gi.display.view=[];gi.display.viewOffset=0}function dr(gi,gl){if(gl>=gi.display.viewTo){return null}gl-=gi.display.viewFrom;if(gl<0){return null}var gj=gi.display.view;for(var gk=0;gk0){if(gn==go.length-1){return null}gp=(gi+go[gn].size)-gk;gn++}else{gp=gi-gk}gk+=gp;gm+=gp}while(aW(gq.doc,gm)!=gm){if(gn==(gj<0?0:go.length-1)){return null}gm+=gj*go[gn-(gj<0?1:0)].size;gn+=gj}return{index:gn,lineN:gm}}function cR(gi,gm,gl){var gk=gi.display,gj=gk.view;if(gj.length==0||gm>=gk.viewTo||gl<=gk.viewFrom){gk.view=eV(gi,gm,gl);gk.viewFrom=gm}else{if(gk.viewFrom>gm){gk.view=eV(gi,gm,gk.viewFrom).concat(gk.view)}else{if(gk.viewFromgl){gk.view=gk.view.slice(0,dr(gi,gl))}}}gk.viewTo=gl}function db(gi){var gj=gi.display.view,gm=0;for(var gl=0;gl20*20}bX(gn.scroller,"touchstart",function(gr){if(!gl(gr)){clearTimeout(gp);var gq=+new Date;gn.activeTouch={start:gq,moved:false,prev:gq-gi.end<=300?gi:null};if(gr.touches.length==1){gn.activeTouch.left=gr.touches[0].pageX;gn.activeTouch.top=gr.touches[0].pageY}}});bX(gn.scroller,"touchmove",function(){if(gn.activeTouch){gn.activeTouch.moved=true}});bX(gn.scroller,"touchend",function(gr){var gt=gn.activeTouch;if(gt&&!bb(gn,gr)&>.left!=null&&!gt.moved&&new Date-gt.start<300){var gs=gj.coordsChar(gn.activeTouch,"page"),gq;if(!gt.prev||gk(gt,gt.prev)){gq=new dY(gs,gs)}else{if(!gt.prev.prev||gk(gt,gt.prev.prev)){gq=gj.findWordAt(gs)}else{gq=new dY(W(gs.line,0),fJ(gj.doc,W(gs.line+1,0)))}}gj.setSelection(gq.anchor,gq.head);gj.focus();cG(gr)}go()});bX(gn.scroller,"touchcancel",go);bX(gn.scroller,"scroll",function(){if(gn.scroller.clientHeight){N(gj,gn.scroller.scrollTop);bE(gj,gn.scroller.scrollLeft,true);aE(gj,"scroll",gj)}});bX(gn.scroller,"mousewheel",function(gq){b(gj,gq)});bX(gn.scroller,"DOMMouseScroll",function(gq){b(gj,gq)});bX(gn.wrapper,"scroll",function(){gn.wrapper.scrollTop=gn.wrapper.scrollLeft=0});gn.dragFunctions={simple:function(gq){if(!aR(gj,gq)){er(gq)}},start:function(gq){Q(gj,gq)},drop:c2(gj,bk)};var gm=gn.input.getField();bX(gm,"keyup",function(gq){bi.call(gj,gq)});bX(gm,"keydown",c2(gj,p));bX(gm,"keypress",c2(gj,cx));bX(gm,"focus",cv(cB,gj));bX(gm,"blur",cv(aV,gj))}function f1(gj,gm,gk){var gn=gk&&gk!=H.Init;if(!gm!=!gn){var gl=gj.display.dragFunctions;var gi=gm?bX:ed;gi(gj.display.scroller,"dragstart",gl.start);gi(gj.display.scroller,"dragenter",gl.simple);gi(gj.display.scroller,"dragover",gl.simple);gi(gj.display.scroller,"drop",gl.drop)}}function aT(gi){var gj=gi.display;if(gj.lastWrapHeight==gj.wrapper.clientHeight&&gj.lastWrapWidth==gj.wrapper.clientWidth){return}gj.cachedCharWidth=gj.cachedTextHeight=gj.cachedPaddingH=null;gj.scrollbarsClipped=false;gi.setSize()}function bb(gj,gi){for(var gk=L(gi);gk!=gj.wrapper;gk=gk.parentNode){if(!gk||(gk.nodeType==1&&gk.getAttribute("cm-ignore-events")=="true")||(gk.parentNode==gj.sizer&&gk!=gj.mover)){return true}}}function cn(gr,gm,gj,gk){var gn=gr.display;if(!gj&&L(gm).getAttribute("cm-not-content")=="true"){return null}var gq,go,gi=gn.lineSpace.getBoundingClientRect();try{gq=gm.clientX-gi.left;go=gm.clientY-gi.top}catch(gm){return null}var gp=fO(gr,gq,go),gs;if(gk&&gp.xRel==1&&(gs=ff(gr.doc,gp.line).text).length==gp.ch){var gl=bT(gs,gs.length,gr.options.tabSize)-gs.length;gp=W(gp.line,Math.max(0,Math.round((gq-e5(gr.display).left)/dD(gr.display))-gl))}return gp}function eu(gk){var gi=this,gj=gi.display;if(gj.activeTouch&&gj.input.supportsTouch()||aR(gi,gk)){return}gj.shift=gk.shiftKey;if(bb(gj,gk)){if(!c0){gj.scroller.draggable=false;setTimeout(function(){gj.scroller.draggable=true},100)}return}if(l(gi,gk)){return}var gl=cn(gi,gk);window.focus();switch(fN(gk)){case 1:if(gl){ax(gi,gk,gl)}else{if(L(gk)==gj.scroller){cG(gk)}}break;case 2:if(c0){gi.state.lastMiddleDown=+new Date}if(gl){fX(gi.doc,gl)}setTimeout(function(){gj.input.focus()},20);cG(gk);break;case 3:if(ga){ay(gi,gk)}else{al(gi)}break}}var dn,dd;function ax(gj,go,gp){if(dK){setTimeout(cv(r,gj),0)}else{gj.curOp.focus=dO()}var gk=+new Date,gm;if(dd&&dd.time>gk-400&&cf(dd.pos,gp)==0){gm="triple"}else{if(dn&&dn.time>gk-400&&cf(dn.pos,gp)==0){gm="double";dd={time:gk,pos:gp}}else{gm="single";dn={time:gk,pos:gp}}}var gn=gj.doc.sel,gi=b7?go.metaKey:go.ctrlKey,gl;if(gj.options.dragDrop&&eL&&!aj(gj)&&gm=="single"&&(gl=gn.contains(gp))>-1&&(cf((gl=gn.ranges[gl]).from(),gp)<0||gp.xRel>0)&&(cf(gl.to(),gp)>0||gp.xRel<0)){a3(gj,go,gp,gi)}else{m(gj,go,gp,gm,gi)}}function a3(gk,gn,go,gj){var gm=gk.display,gl=+new Date;var gi=c2(gk,function(gp){if(c0){gm.scroller.draggable=false}gk.state.draggingText=false;ed(document,"mouseup",gi);ed(gm.scroller,"drop",gi);if(Math.abs(gn.clientX-gp.clientX)+Math.abs(gn.clientY-gp.clientY)<10){cG(gp);if(!gj&&+new Date-200-1){gk=gi[gB]}else{gk=new dY(gl,gl)}}else{gk=gC.sel.primary();gB=gC.sel.primIndex}if(gA.altKey){gj="rect";if(!go){gk=new dY(gl,gl)}gl=cn(gm,gA,true,true);gB=-1}else{if(gj=="double"){var gy=gm.findWordAt(gl);if(gm.display.shift||gC.extend){gk=fv(gC,gk,gy.anchor,gy.head)}else{gk=gy}}else{if(gj=="triple"){var gr=new dY(W(gl.line,0),fJ(gC,W(gl.line+1,0)));if(gm.display.shift||gC.extend){gk=fv(gC,gk,gr.anchor,gr.head)}else{gk=gr}}else{gk=fv(gC,gk,gl)}}}if(!go){gB=0;bU(gC,new f4([gk],0),M);gn=gC.sel}else{if(gB==-1){gB=gi.length;bU(gC,cw(gi.concat([gk]),gB),{scroll:false,origin:"*mouse"})}else{if(gi.length>1&&gi[gB].empty()&&gj=="single"&&!gA.shiftKey){bU(gC,cw(gi.slice(0,gB).concat(gi.slice(gB+1)),0));gn=gC.sel}else{e(gC,gB,gk,M)}}}var gw=gl;function gv(gN){if(cf(gw,gN)==0){return}gw=gN;if(gj=="rect"){var gE=[],gK=gm.options.tabSize;var gD=bT(ff(gC,gl.line).text,gl.ch,gK);var gQ=bT(ff(gC,gN.line).text,gN.ch,gK);var gF=Math.min(gD,gQ),gO=Math.max(gD,gQ);for(var gR=Math.min(gl.line,gN.line),gH=Math.min(gm.lastLine(),Math.max(gl.line,gN.line));gR<=gH;gR++){var gP=ff(gC,gR).text,gG=eq(gP,gF,gK);if(gF==gO){gE.push(new dY(W(gR,gG),W(gR,gG)))}else{if(gP.length>gG){gE.push(new dY(W(gR,gG),W(gR,eq(gP,gO,gK))))}}}if(!gE.length){gE.push(new dY(gl,gl))}bU(gC,cw(gn.ranges.slice(0,gB).concat(gE),gB),{origin:"*mouse",scroll:false});gm.scrollIntoView(gN)}else{var gL=gk;var gI=gL.anchor,gM=gN;if(gj!="single"){if(gj=="double"){var gJ=gm.findWordAt(gN)}else{var gJ=new dY(W(gN.line,0),fJ(gC,W(gN.line+1,0)))}if(cf(gJ.anchor,gI)>0){gM=gJ.head;gI=ar(gL.from(),gJ.anchor)}else{gM=gJ.anchor;gI=bx(gL.to(),gJ.head)}}var gE=gn.ranges.slice(0);gE[gB]=new dY(fJ(gC,gI),gM);bU(gC,cw(gE,gB),M)}}var gt=gx.wrapper.getBoundingClientRect();var gp=0;function gz(gF){var gD=++gp;var gH=cn(gm,gF,true,gj=="rect");if(!gH){return}if(cf(gH,gw)!=0){gm.curOp.focus=dO();gv(gH);var gG=b6(gx,gC);if(gH.line>=gG.to||gH.linegt.bottom?20:0;if(gE){setTimeout(c2(gm,function(){if(gp!=gD){return}gx.scroller.scrollTop+=gE;gz(gF)}),50)}}}function gs(gD){gp=Infinity;cG(gD);gx.input.focus();ed(document,"mousemove",gu);ed(document,"mouseup",gq);gC.history.lastSelOrigin=null}var gu=c2(gm,function(gD){if(!fN(gD)){gs(gD)}else{gz(gD)}});var gq=c2(gm,gs);bX(document,"mousemove",gu);bX(document,"mouseup",gq)}function gg(gt,gp,gr,gs,gl){try{var gj=gp.clientX,gi=gp.clientY}catch(gp){return false}if(gj>=Math.floor(gt.display.gutters.getBoundingClientRect().right)){return false}if(gs){cG(gp)}var gq=gt.display;var go=gq.lineDiv.getBoundingClientRect();if(gi>go.bottom||!fi(gt,gr)){return bL(gp)}gi-=go.top-gq.viewOffset;for(var gm=0;gm=gj){var gu=bG(gt.doc,gi);var gk=gt.options.gutters[gm];gl(gt,gr,gt,gu,gk,gp);return bL(gp)}}}function l(gi,gj){return gg(gi,gj,"gutterClick",true,ae)}var ag=0;function bk(go){var gq=this;if(aR(gq,go)||bb(gq.display,go)){return}cG(go);if(dK){ag=+new Date}var gp=cn(gq,go,true),gi=go.dataTransfer.files;if(!gp||aj(gq)){return}if(gi&&gi.length&&window.FileReader&&window.File){var gk=gi.length,gr=Array(gk),gj=0;var gm=function(gu,gt){var gs=new FileReader;gs.onload=c2(gq,function(){gr[gt]=gs.result;if(++gj==gk){gp=fJ(gq.doc,gp);var gv={from:gp,to:gp,text:gq.doc.splitLines(gr.join(gq.doc.lineSeparator())),origin:"paste"};bg(gq.doc,gv);e7(gq.doc,eS(gp,cX(gv)))}});gs.readAsText(gu)};for(var gn=0;gn-1){gq.state.draggingText(go);setTimeout(function(){gq.display.input.focus()},20);return}try{var gr=go.dataTransfer.getData("Text");if(gr){if(gq.state.draggingText&&!(b7?go.altKey:go.ctrlKey)){var gl=gq.listSelections()}ep(gq.doc,eS(gp,gp));if(gl){for(var gn=0;gngp.clientWidth||gt&&gp.scrollHeight>gp.clientHeight)){return}if(gt&&b7&&c0){outer:for(var gs=gk.target,go=gm.view;gs!=gp;gs=gs.parentNode){for(var gj=0;gj=0;--gi){K(gl,{from:gj[gi].from,to:gj[gi].to,text:gi?[""]:gm.text})}}else{K(gl,gm)}}function K(gk,gl){if(gl.text.length==1&&gl.text[0]==""&&cf(gl.from,gl.to)==0){return}var gj=fk(gk,gl);fM(gk,gl,gj,gk.cm?gk.cm.curOp.id:NaN);ee(gk,gl,gj,ek(gk,gl));var gi=[];d7(gk,function(gn,gm){if(!gm&&dh(gi,gn.history)==-1){dE(gn.history,gl);gi.push(gn.history)}ee(gn,gl,null,ek(gn,gl))})}function b8(gt,gr,gv){if(gt.cm&>.cm.state.suppressEdits){return}var gq=gt.history,gk,gm=gt.sel;var gi=gr=="undo"?gq.done:gq.undone,gu=gr=="undo"?gq.undone:gq.done;for(var gn=0;gn=0;--gn){var gs=gk.changes[gn];gs.origin=gr;if(gl&&!dR(gt,gs,false)){gi.length=0;return}gp.push(du(gt,gs));var gj=gn?fk(gt,gs):fG(gi);ee(gt,gs,gj,d9(gt,gs));if(!gn&>.cm){gt.cm.scrollIntoView({from:gs.from,to:cX(gs)})}var go=[];d7(gt,function(gx,gw){if(!gw&&dh(go,gx.history)==-1){dE(gx.history,gs);go.push(gx.history)}ee(gx,gs,null,d9(gx,gs))})}}function fn(gj,gl){if(gl==0){return}gj.first+=gl;gj.sel=new f4(bS(gj.sel.ranges,function(gm){return new dY(W(gm.anchor.line+gl,gm.anchor.ch),W(gm.head.line+gl,gm.head.ch))}),gj.sel.primIndex);if(gj.cm){ah(gj.cm,gj.first,gj.first-gl,gl);for(var gk=gj.cm.display,gi=gk.viewFrom;gigm.lastLine()){return}if(gn.from.linegk){gn={from:gn.from,to:W(gk,ff(gm,gk).text.length),text:[gn.text[0]],origin:gn.origin}}gn.removed=f5(gm,gn.from,gn.to);if(!gl){gl=fk(gm,gn)}if(gm.cm){aJ(gm.cm,gn,gj)}else{fy(gm,gn,gj)}ep(gm,gl,Z)}function aJ(gt,gp,gn){var gs=gt.doc,go=gt.display,gq=gp.from,gr=gp.to;var gi=false,gm=gq.line;if(!gt.options.lineWrapping){gm=bN(y(ff(gs,gq.line)));gs.iter(gm,gr.line+1,function(gv){if(gv==go.maxLine){gi=true;return true}})}if(gs.sel.contains(gp.from,gp.to)>-1){V(gt)}fy(gs,gp,gn,be(gt));if(!gt.options.lineWrapping){gs.iter(gm,gq.line+gp.text.length,function(gw){var gv=en(gw);if(gv>go.maxLineLength){go.maxLine=gw;go.maxLineLength=gv;go.maxLineChanged=true;gi=false}});if(gi){gt.curOp.updateMaxLine=true}}gs.frontier=Math.min(gs.frontier,gq.line);ef(gt,400);var gu=gp.text.length-(gr.line-gq.line)-1;if(gp.full){ah(gt)}else{if(gq.line==gr.line&&gp.text.length==1&&!dS(gt.doc,gp)){R(gt,gq.line,"text")}else{ah(gt,gq.line,gr.line+1,gu)}}var gk=fi(gt,"changes"),gl=fi(gt,"change");if(gl||gk){var gj={from:gq,to:gr,text:gp.text,removed:gp.removed,origin:gp.origin};if(gl){ae(gt,"change",gt,gj)}if(gk){(gt.curOp.changeObjs||(gt.curOp.changeObjs=[])).push(gj)}}gt.display.selForContextMenu=null}function a1(gl,gk,gn,gm,gi){if(!gm){gm=gn}if(cf(gm,gn)<0){var gj=gm;gm=gn;gn=gj}if(typeof gk=="string"){gk=gl.splitLines(gk)}bg(gl,{from:gn,to:gm,text:gk,origin:gi})}function d6(gj,gm){if(aR(gj,"scrollCursorIntoView")){return}var gn=gj.display,gk=gn.sizer.getBoundingClientRect(),gi=null;if(gm.top+gk.top<0){gi=true}else{if(gm.bottom+gk.top>(window.innerHeight||document.documentElement.clientHeight)){gi=false}}if(gi!=null&&!fu){var gl=f3("div","\u200b",null,"position: absolute; top: "+(gm.top-gn.viewOffset-e8(gj.display))+"px; height: "+(gm.bottom-gm.top+cT(gj)+gn.barHeight)+"px; left: "+gm.left+"px; width: 2px;");gj.display.lineSpace.appendChild(gl);gl.scrollIntoView(gi);gj.display.lineSpace.removeChild(gl)}}function D(gs,gq,gm,gl){if(gl==null){gl=0}for(var gn=0;gn<5;gn++){var go=false,gr=dU(gs,gq);var gi=!gm||gm==gq?gr:dU(gs,gm);var gk=G(gs,Math.min(gr.left,gi.left),Math.min(gr.top,gi.top)-gl,Math.max(gr.left,gi.left),Math.max(gr.bottom,gi.bottom)+gl);var gp=gs.doc.scrollTop,gj=gs.doc.scrollLeft;if(gk.scrollTop!=null){N(gs,gk.scrollTop);if(Math.abs(gs.doc.scrollTop-gp)>1){go=true}}if(gk.scrollLeft!=null){bE(gs,gk.scrollLeft);if(Math.abs(gs.doc.scrollLeft-gj)>1){go=true}}if(!go){break}}return gr}function E(gi,gk,gm,gj,gl){var gn=G(gi,gk,gm,gj,gl);if(gn.scrollTop!=null){N(gi,gn.scrollTop)}if(gn.scrollLeft!=null){bE(gi,gn.scrollLeft)}}function G(gu,gl,gt,gj,gs){var gq=gu.display,go=aY(gu.display);if(gt<0){gt=0}var gm=gu.curOp&&gu.curOp.scrollTop!=null?gu.curOp.scrollTop:gq.scroller.scrollTop;var gw=cV(gu),gy={};if(gs-gt>gw){gs=gt+gw}var gk=gu.doc.height+bI(gq);var gi=gtgk-go;if(gtgm+gw){var gr=Math.min(gt,(gp?gk:gs)-gw);if(gr!=gm){gy.scrollTop=gr}}}var gx=gu.curOp&&gu.curOp.scrollLeft!=null?gu.curOp.scrollLeft:gq.scroller.scrollLeft;var gv=dl(gu)-(gu.options.fixedGutter?gq.gutters.offsetWidth:0);var gn=gj-gl>gv;if(gn){gj=gl+gv}if(gl<10){gy.scrollLeft=0}else{if(glgv+gx-3){gy.scrollLeft=gj+(gn?0:10)-gv}}}return gy}function cL(gi,gk,gj){if(gk!=null||gj!=null){fC(gi)}if(gk!=null){gi.curOp.scrollLeft=(gi.curOp.scrollLeft==null?gi.doc.scrollLeft:gi.curOp.scrollLeft)+gk}if(gj!=null){gi.curOp.scrollTop=(gi.curOp.scrollTop==null?gi.doc.scrollTop:gi.curOp.scrollTop)+gj}}function fF(gi){fC(gi);var gj=gi.getCursor(),gl=gj,gk=gj;if(!gi.options.lineWrapping){gl=gj.ch?W(gj.line,gj.ch-1):gj;gk=W(gj.line,gj.ch+1)}gi.curOp.scrollToPos={from:gl,to:gk,margin:gi.options.cursorScrollMargin,isCursor:true}}function fC(gi){var gk=gi.curOp.scrollToPos;if(gk){gi.curOp.scrollToPos=null;var gm=dH(gi,gk.from),gl=dH(gi,gk.to);var gj=G(gi,Math.min(gm.left,gl.left),Math.min(gm.top,gl.top)-gk.margin,Math.max(gm.right,gl.right),Math.max(gm.bottom,gl.bottom)+gk.margin);gi.scrollTo(gj.scrollLeft,gj.scrollTop)}}function ad(gv,gl,gu,gk){var gt=gv.doc,gj;if(gu==null){gu="add"}if(gu=="smart"){if(!gt.mode.indent){gu="prev"}else{gj=dC(gv,gl)}}var gp=gv.options.tabSize;var gw=ff(gt,gl),go=bT(gw.text,null,gp);if(gw.stateAfter){gw.stateAfter=null}var gi=gw.text.match(/^\s*/)[0],gr;if(!gk&&!/\S/.test(gw.text)){gr=0;gu="not"}else{if(gu=="smart"){gr=gt.mode.indent(gj,gw.text.slice(gi.length),gw.text);if(gr==ca||gr>150){if(!gk){return}gu="prev"}}}if(gu=="prev"){if(gl>gt.first){gr=bT(ff(gt,gl-1).text,null,gp)}else{gr=0}}else{if(gu=="add"){gr=go+gv.options.indentUnit}else{if(gu=="subtract"){gr=go-gv.options.indentUnit}else{if(typeof gu=="number"){gr=go+gu}}}}gr=Math.max(0,gr);var gs="",gq=0;if(gv.options.indentWithTabs){for(var gm=Math.floor(gr/gp);gm;--gm){gq+=gp;gs+="\t"}}if(gq=0;gp--){a1(gi.doc,"",gm[gp].from,gm[gp].to,"+delete")}fF(gi)})}function bw(gA,gm,gu,gt,go){var gr=gm.line,gs=gm.ch,gz=gu;var gj=ff(gA,gr);var gx=true;function gy(){var gB=gr+gu;if(gB=gA.first+gA.size){return(gx=false)}gr=gB;return gj=ff(gA,gB)}function gw(gC){var gB=(go?u:ai)(gj,gs,gu,true);if(gB==null){if(!gC&&gy()){if(go){gs=(gu<0?cS:cE)(gj)}else{gs=gu<0?gj.text.length:0}}else{return(gx=false)}}else{gs=gB}return true}if(gt=="char"){gw()}else{if(gt=="column"){gw(true)}else{if(gt=="word"||gt=="group"){var gv=null,gp=gt=="group";var gi=gA.cm&&gA.cm.getHelper(gm,"wordChars");for(var gn=true;;gn=false){if(gu<0&&!gw(!gn)){break}var gk=gj.text.charAt(gs)||"\n";var gl=cA(gk,gi)?"w":gp&&gk=="\n"?"n":!gp||/\s/.test(gk)?null:"p";if(gp&&!gn&&!gl){gl="s"}if(gv&&gv!=gl){if(gu<0){gu=1;gw()}break}if(gl){gv=gl}if(gu>0&&!gw(!gn)){break}}}}}var gq=bV(gA,W(gr,gs),gz,true);if(!gx){gq.hitSide=true}return gq}function bq(gq,gl,gi,gp){var go=gq.doc,gn=gl.left,gm;if(gp=="page"){var gk=Math.min(gq.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight);gm=gl.top+gi*(gk-(gi<0?1.5:0.5)*aY(gq.display))}else{if(gp=="line"){gm=gi>0?gl.bottom+3:gl.top-3}}for(;;){var gj=fO(gq,gn,gm);if(!gj.outside){break}if(gi<0?gm<=0:gm>=go.height){gj.hitSide=true;break}gm+=gi*5}return gj}H.prototype={constructor:H,focus:function(){window.focus();this.display.input.focus()},setOption:function(gk,gl){var gj=this.options,gi=gj[gk];if(gj[gk]==gl&&gk!="mode"){return}gj[gk]=gl;if(bf.hasOwnProperty(gk)){c2(this,bf[gk])(this,gl,gi)}},getOption:function(gi){return this.options[gi]},getDoc:function(){return this.doc},addKeyMap:function(gj,gi){this.state.keyMaps[gi?"push":"unshift"](fY(gj))},removeKeyMap:function(gj){var gk=this.state.keyMaps;for(var gi=0;gi0){e(this.doc,gn,new dY(gp,gk[gn].to()),Z)}}else{if(go.head.line>gl){ad(this,go.head.line,gr,true);gl=go.head.line;if(gn==this.doc.sel.primIndex){fF(this)}}}}}),getTokenAt:function(gj,gi){return cq(this,gj,gi)},getLineTokens:function(gj,gi){return cq(this,W(gj),gi,true)},getTokenTypeAt:function(gp){gp=fJ(this.doc,gp);var gl=c6(this,ff(this.doc,gp.line));var gn=0,go=(gl.length-1)/2,gk=gp.ch;var gj;if(gk==0){gj=gl[2]}else{for(;;){var gi=(gn+go)>>1;if((gi?gl[gi*2-1]:0)>=gk){go=gi}else{if(gl[gi*2+1]gl){gj=gl;gi=true}}gk=ff(this.doc,gj)}else{gk=gj}return eQ(this,gk,{top:0,left:0},gm||"page").top+(gi?this.doc.height-bM(gk):0)},defaultTextHeight:function(){return aY(this.display)},defaultCharWidth:function(){return dD(this.display)},setGutterMarker:c8(function(gi,gj,gk){return ez(this.doc,gi,"gutter",function(gl){var gm=gl.gutterMarkers||(gl.gutterMarkers={});gm[gj]=gk;if(!gk&&eU(gm)){gl.gutterMarkers=null}return true})}),clearGutter:c8(function(gk){var gi=this,gl=gi.doc,gj=gl.first;gl.iter(function(gm){if(gm.gutterMarkers&&gm.gutterMarkers[gk]){gm.gutterMarkers[gk]=null;R(gi,gj,"gutter");if(eU(gm.gutterMarkers)){gm.gutterMarkers=null}}++gj})}),lineInfo:function(gi){if(typeof gi=="number"){if(!b9(this.doc,gi)){return null}var gj=gi;gi=ff(this.doc,gi);if(!gi){return null}}else{var gj=bN(gi);if(gj==null){return null}}return{line:gj,handle:gi,text:gi.text,gutterMarkers:gi.gutterMarkers,textClass:gi.textClass,bgClass:gi.bgClass,wrapClass:gi.wrapClass,widgets:gi.widgets}},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(gn,gk,gp,gl,gr){var gm=this.display;gn=dU(this,fJ(this.doc,gn));var go=gn.bottom,gj=gn.left;gk.style.position="absolute";gk.setAttribute("cm-ignore-events","true");this.display.input.setUneditable(gk);gm.sizer.appendChild(gk);if(gl=="over"){go=gn.top}else{if(gl=="above"||gl=="near"){var gi=Math.max(gm.wrapper.clientHeight,this.doc.height),gq=Math.max(gm.sizer.clientWidth,gm.lineSpace.clientWidth);if((gl=="above"||gn.bottom+gk.offsetHeight>gi)&&gn.top>gk.offsetHeight){go=gn.top-gk.offsetHeight}else{if(gn.bottom+gk.offsetHeight<=gi){go=gn.bottom}}if(gj+gk.offsetWidth>gq){gj=gq-gk.offsetWidth}}}gk.style.top=go+"px";gk.style.left=gk.style.right="";if(gr=="right"){gj=gm.sizer.clientWidth-gk.offsetWidth;gk.style.right="0px"}else{if(gr=="left"){gj=0}else{if(gr=="middle"){gj=(gm.sizer.clientWidth-gk.offsetWidth)/2}}gk.style.left=gj+"px"}if(gp){E(this,gj,go,gj+gk.offsetWidth,go+gk.offsetHeight)}},triggerOnKeyDown:c8(p),triggerOnKeyPress:c8(cx),triggerOnKeyUp:bi,execCommand:function(gi){if(eD.hasOwnProperty(gi)){return eD[gi](this)}},triggerElectric:c8(function(gi){fW(this,gi)}),findPosH:function(go,gl,gm,gj){var gi=1;if(gl<0){gi=-1;gl=-gl}for(var gk=0,gn=fJ(this.doc,go);gk0&&gi(gl.charAt(go-1))){--go}while(gk0.5){X(this)}aE(this,"refresh",this)}),swapDoc:c8(function(gj){var gi=this.doc;gi.cm=null;eb(this,gj);ak(this);this.display.input.reset();this.scrollTo(gj.scrollLeft,gj.scrollTop);this.curOp.forceScroll=true;ae(this,"swapDoc",this,gi);return gi}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}};by(H);var e3=H.defaults={};var bf=H.optionHandlers={};function s(gi,gl,gk,gj){H.defaults[gi]=gl;if(gk){bf[gi]=gj?function(gm,go,gn){if(gn!=cc){gk(gm,go,gn)}}:gk}}var cc=H.Init={toString:function(){return"CodeMirror.Init"}};s("value","",function(gi,gj){gi.setValue(gj)},true);s("mode",null,function(gi,gj){gi.doc.modeOption=gj;br(gi)},true);s("indentUnit",2,br,true);s("indentWithTabs",false);s("smartIndent",true);s("tabSize",4,function(gi){el(gi);ak(gi);ah(gi)},true);s("lineSeparator",null,function(gi,gl){gi.doc.lineSep=gl;if(!gl){return}var gk=[],gm=gi.doc.first;gi.doc.iter(function(gn){for(var gp=0;;){var go=gn.text.indexOf(gl,gp);if(go==-1){break}gp=go+gl.length;gk.push(W(gm,go))}gm++});for(var gj=gk.length-1;gj>=0;gj--){a1(gi.doc,gl,gk[gj],W(gk[gj].line,gk[gj].ch+gl.length))}});s("specialChars",/[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g,function(gi,gk,gj){gi.state.specialChars=new RegExp(gk.source+(gk.test("\t")?"":"|\t"),"g");if(gj!=H.Init){gi.refresh()}});s("specialCharPlaceholder",fc,function(gi){gi.refresh()},true);s("electricChars",true);s("inputStyle",eg?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},true);s("rtlMoveVisually",!aP);s("wholeLineUpdateBefore",true);s("theme","default",function(gi){cO(gi);dw(gi)},true);s("keyMap","default",function(gi,gm,gj){var gk=fY(gm);var gl=gj!=H.Init&&fY(gj);if(gl&&gl.detach){gl.detach(gi,gk)}if(gk.attach){gk.attach(gi,gl||null)}});s("extraKeys",null);s("lineWrapping",false,eG,true);s("gutters",[],function(gi){ce(gi.options);dw(gi)},true);s("fixedGutter",true,function(gi,gj){gi.display.gutters.style.left=gj?dX(gi.display)+"px":"0";gi.refresh()},true);s("coverGutterNextToScrollbar",false,function(gi){eY(gi)},true);s("scrollbarStyle","native",function(gi){aD(gi);eY(gi);gi.display.scrollbars.setScrollTop(gi.doc.scrollTop);gi.display.scrollbars.setScrollLeft(gi.doc.scrollLeft)},true);s("lineNumbers",false,function(gi){ce(gi.options);dw(gi)},true);s("firstLineNumber",1,dw,true);s("lineNumberFormatter",function(gi){return gi},dw,true);s("showCursorWhenSelecting",false,bC,true);s("resetSelectionOnContextMenu",true);s("lineWiseCopyCut",true);s("readOnly",false,function(gi,gj){if(gj=="nocursor"){aV(gi);gi.display.input.blur();gi.display.disabled=true}else{gi.display.disabled=false;if(!gj){gi.display.input.reset()}}});s("disableInput",false,function(gi,gj){if(!gj){gi.display.input.reset()}},true);s("dragDrop",true,f1);s("cursorBlinkRate",530);s("cursorScrollMargin",0);s("cursorHeight",1,bC,true);s("singleCursorHeightPerLine",true,bC,true);s("workTime",100);s("workDelay",100);s("flattenSpans",true,el,true);s("addModeClass",false,el,true);s("pollInterval",100);s("undoDepth",200,function(gi,gj){gi.doc.history.undoDepth=gj});s("historyEventDelay",1250);s("viewportMargin",10,function(gi){gi.refresh()},true);s("maxHighlightLength",10000,el,true);s("moveInputWithCursor",true,function(gi,gj){if(!gj){gi.display.input.resetPosition()}});s("tabindex",null,function(gi,gj){gi.display.input.getField().tabIndex=gj||""});s("autofocus",null);var ds=H.modes={},aS=H.mimeModes={};H.defineMode=function(gi,gj){if(!H.defaults.mode&&gi!="null"){H.defaults.mode=gi}if(arguments.length>2){gj.dependencies=Array.prototype.slice.call(arguments,2)}ds[gi]=gj};H.defineMIME=function(gj,gi){aS[gj]=gi};H.resolveMode=function(gi){if(typeof gi=="string"&&aS.hasOwnProperty(gi)){gi=aS[gi]}else{if(gi&&typeof gi.name=="string"&&aS.hasOwnProperty(gi.name)){var gj=aS[gi.name];if(typeof gj=="string"){gj={name:gj}}gi=ck(gj,gi);gi.name=gj.name}else{if(typeof gi=="string"&&/^[\w\-]+\/[\w\-]+\+xml$/.test(gi)){return H.resolveMode("application/xml")}}}if(typeof gi=="string"){return{name:gi}}else{return gi||{name:"null"}}};H.getMode=function(gj,gi){var gi=H.resolveMode(gi);var gl=ds[gi.name];if(!gl){return H.getMode(gj,"text/plain")}var gm=gl(gj,gi);if(dp.hasOwnProperty(gi.name)){var gk=dp[gi.name];for(var gn in gk){if(!gk.hasOwnProperty(gn)){continue}if(gm.hasOwnProperty(gn)){gm["_"+gn]=gm[gn]}gm[gn]=gk[gn]}}gm.name=gi.name;if(gi.helperType){gm.helperType=gi.helperType}if(gi.modeProps){for(var gn in gi.modeProps){gm[gn]=gi.modeProps[gn]}}return gm};H.defineMode("null",function(){return{token:function(gi){gi.skipToEnd()}}});H.defineMIME("text/plain","null");var dp=H.modeExtensions={};H.extendMode=function(gk,gj){var gi=dp.hasOwnProperty(gk)?dp[gk]:(dp[gk]={});aN(gj,gi)};H.defineExtension=function(gi,gj){H.prototype[gi]=gj};H.defineDocExtension=function(gi,gj){at.prototype[gi]=gj};H.defineOption=s;var a8=[];H.defineInitHook=function(gi){a8.push(gi)};var fo=H.helpers={};H.registerHelper=function(gj,gi,gk){if(!fo.hasOwnProperty(gj)){fo[gj]=H[gj]={_global:[]}}fo[gj][gi]=gk};H.registerGlobalHelper=function(gk,gj,gi,gl){H.registerHelper(gk,gj,gl);fo[gk]._global.push({pred:gi,val:gl})};var b3=H.copyState=function(gl,gi){if(gi===true){return gi}if(gl.copyState){return gl.copyState(gi)}var gk={};for(var gm in gi){var gj=gi[gm];if(gj instanceof Array){gj=gj.concat([])}gk[gm]=gj}return gk};var b0=H.startState=function(gk,gj,gi){return gk.startState?gk.startState(gj,gi):true};H.innerMode=function(gk,gi){while(gk.innerMode){var gj=gk.innerMode(gi);if(!gj||gj.mode==gk){break}gi=gj.state;gk=gj.mode}return gj||{mode:gk,state:gi}};var eD=H.commands={selectAll:function(gi){gi.setSelection(W(gi.firstLine(),0),W(gi.lastLine()),Z)},singleSelection:function(gi){gi.setSelection(gi.getCursor("anchor"),gi.getCursor("head"),Z)},killLine:function(gi){eX(gi,function(gk){if(gk.empty()){var gj=ff(gi.doc,gk.head.line).text.length;if(gk.head.ch==gj&&gk.head.line0){go=new W(go.line,go.ch+1);gi.replaceRange(gj.charAt(go.ch-1)+gj.charAt(go.ch-2),W(go.line,go.ch-2),go,"+transpose")}else{if(go.line>gi.doc.first){var gn=ff(gi.doc,go.line-1).text;if(gn){gi.replaceRange(gj.charAt(0)+gi.doc.lineSeparator()+gn.charAt(gn.length-1),W(go.line-1,gn.length-1),W(go.line,1),"+transpose")}}}}gk.push(new dY(go,go))}gi.setSelections(gk)})},newlineAndIndent:function(gi){cM(gi,function(){var gj=gi.listSelections().length;for(var gl=0;gl=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||undefined},next:function(){if(this.posgj},eatSpace:function(){var gi=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos))){++this.pos}return this.pos>gi},skipToEnd:function(){this.pos=this.string.length},skipTo:function(gi){var gj=this.string.indexOf(gi,this.pos);if(gj>-1){this.pos=gj;return true}},backUp:function(gi){this.pos-=gi},column:function(){if(this.lastColumnPos0){return null}if(gk&&gj!==false){this.pos+=gk[0].length}return gk}},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(gj,gi){this.lineStart+=gj;try{return gi()}finally{this.lineStart-=gj}}};var a5=0;var P=H.TextMarker=function(gj,gi){this.lines=[];this.type=gi;this.doc=gj;this.id=++a5};by(P);P.prototype.clear=function(){if(this.explicitlyCleared){return}var gp=this.doc.cm,gj=gp&&!gp.curOp;if(gj){cI(gp)}if(fi(this,"clear")){var gq=this.find();if(gq){ae(this,"clear",gq.from,gq.to)}}var gk=null,gn=null;for(var gl=0;glgp.display.maxLineLength){gp.display.maxLine=gi;gp.display.maxLineLength=gm;gp.display.maxLineChanged=true}}}if(gk!=null&&gp&&this.collapsed){ah(gp,gk,gn+1)}this.lines.length=0;this.explicitlyCleared=true;if(this.atomic&&this.doc.cantEdit){this.doc.cantEdit=false;if(gp){ey(gp.doc)}}if(gp){ae(gp,"markerCleared",gp,this)}if(gj){am(gp)}if(this.parent){this.parent.clear()}};P.prototype.find=function(gl,gj){if(gl==null&&this.type=="bookmark"){gl=1}var go,gn;for(var gk=0;gk0||gr==0&&gl.clearWhenEmpty!==false){return gl}if(gl.replacedWith){gl.collapsed=true;gl.widgetNode=f3("span",[gl.replacedWith],"CodeMirror-widget");if(!gs.handleMouseEvents){gl.widgetNode.setAttribute("cm-ignore-events","true")}if(gs.insertLeft){gl.widgetNode.insertLeft=true}}if(gl.collapsed){if(z(gq,go.line,go,gp,gl)||go.line!=gp.line&&z(gq,gp.line,go,gp,gl)){throw new Error("Inserting collapsed marker partially overlapping an existing one")}a7=true}if(gl.addToHistory){fM(gq,{from:go,to:gp,origin:"markText"},gq.sel,NaN)}var gj=go.line,gn=gq.cm,gi;gq.iter(gj,gp.line+1,function(gt){if(gn&&gl.collapsed&&!gn.options.lineWrapping&&y(gt)==gn.display.maxLine){gi=true}if(gl.collapsed&&gj!=go.line){f6(gt,0)}cd(gt,new ei(gl,gj==go.line?go.ch:null,gj==gp.line?gp.ch:null));++gj});if(gl.collapsed){gq.iter(go.line,gp.line+1,function(gt){if(fw(gq,gt)){f6(gt,0)}})}if(gl.clearOnEnter){bX(gl,"beforeCursorEnter",function(){gl.clear()})}if(gl.readOnly){gd=true;if(gq.history.done.length||gq.history.undone.length){gq.clearHistory()}}if(gl.collapsed){gl.id=++a5;gl.atomic=true}if(gn){if(gi){gn.curOp.updateMaxLine=true}if(gl.collapsed){ah(gn,go.line,gp.line+1)}else{if(gl.className||gl.title||gl.startStyle||gl.endStyle||gl.css){for(var gk=go.line;gk<=gp.line;gk++){R(gn,gk,"text")}}}if(gl.atomic){ey(gn.doc)}ae(gn,"markerAdded",gn,gl)}return gl}var x=H.SharedTextMarker=function(gk,gj){this.markers=gk;this.primary=gj;for(var gi=0;gi=gk:gq.to>gk);(gp||(gp=[])).push(new ei(gn,gq.from,gl?null:gq.to))}}}return gp}function aB(gj,gl,go){if(gj){for(var gm=0,gp;gm=gl:gq.to>gl);if(gk||gq.from==gl&&gn.type=="bookmark"&&(!go||gq.marker.insertLeft)){var gi=gq.from==null||(gn.inclusiveLeft?gq.from<=gl:gq.from0&&go){for(var gl=0;gl0){continue}var gr=[gl,1],gi=cf(gj.from,gk.from),gq=cf(gj.to,gk.to);if(gi<0||!gp.inclusiveLeft&&!gi){gr.push({from:gj.from,to:gk.from})}if(gq>0||!gp.inclusiveRight&&!gq){gr.push({from:gk.to,to:gj.to})}gn.splice.apply(gn,gr);gl+=gr.length-1}}return gn}function f9(gi){var gk=gi.markedSpans;if(!gk){return}for(var gj=0;gj=0&&gn<=0||gr<=0&&gn>=0){continue}if(gr<=0&&(cf(gs.to,go)>0||(gj.marker.inclusiveRight&&gm.inclusiveLeft))||gr>=0&&(cf(gs.from,gp)<0||(gj.marker.inclusiveLeft&&gm.inclusiveRight))){return true}}}}function y(gj){var gi;while(gi=eO(gj)){gj=gi.find(-1,true).line}return gj}function g(gk){var gi,gj;while(gi=ew(gk)){gk=gi.find(1,true).line;(gj||(gj=[])).push(gk)}return gj}function aW(gl,gj){var gi=ff(gl,gj),gk=y(gi);if(gi==gk){return gj}return bN(gk)}function d2(gl,gk){if(gk>gl.lastLine()){return gk}var gj=ff(gl,gk),gi;if(!fw(gl,gj)){return gk}while(gi=ew(gj)){gj=gi.find(1,true).line}return bN(gj)+1}function fw(gm,gj){var gi=a7&&gj.markedSpans;if(gi){for(var gl,gk=0;gkgm.start){return gk}}throw new Error("Mode "+gn.name+" failed to advance stream.")}function cq(gr,gp,gm,gl){function gi(gu){return{start:gs.start,end:gs.pos,string:gs.current(),type:gk||null,state:gu?b3(gq.mode,gj):gj}}var gq=gr.doc,gn=gq.mode,gk;gp=fJ(gq,gp);var gt=ff(gq,gp.line),gj=dC(gr,gp.line,gm);var gs=new eT(gt.text,gr.options.tabSize),go;if(gl){go=[]}while((gl||gs.posgs.options.maxHighlightLength){gk=false;if(gm){dx(gs,gu,gj,gt.pos)}gt.pos=gu.length;gi=null}else{gi=di(eA(gn,gt,gj,gw),gl)}if(gw){var gv=gw[0].name;if(gv){gi="m-"+(gi?gv+" "+gi:gv)}}if(!gk||gp!=gi){while(gqgs){gq.splice(go,1,gs,gq[go+1],gt)}go+=2;gk=Math.min(gs,gt)}if(!gu){return}if(gn.opaque){gq.splice(gw,go-gw,gs,"cm-overlay "+gu);go=gw+2}else{for(;gwgl&&gm.from<=gl){break}}if(gm.to>=gn){return gj(gr,gt,gk,go,gu,gs,gq)}gj(gr,gt.slice(0,gm.to-gl),gk,go,null,gs,gq);go=null;gt=gt.slice(gm.to-gl);gl=gm.to}}}function ac(gj,gl,gi,gk){var gm=!gk&&gi.widgetNode;if(gm){gj.map.push(gj.pos,gj.pos+gl,gm)}if(!gk&&gj.cm.display.input.needsContentAttribute){if(!gm){gm=gj.content.appendChild(document.createElement("span"))}gm.setAttribute("cm-marker",gi.id)}if(gm){gj.cm.display.input.setUneditable(gm);gj.content.appendChild(gm)}gj.pos+=gl}function bo(gr,gy,gq){var gn=gr.markedSpans,gp=gr.text,gw=0;if(!gn){for(var gB=1;gBgm||gx.collapsed&&gA.to==gm&&gA.from==gm)){if(gA.to!=null&&gA.to!=gm&&gF>gA.to){gF=gA.to;gE=""}if(gx.className){gi+=" "+gx.className}if(gx.css){gs=gx.css}if(gx.startStyle&&gA.from==gm){gv+=" "+gx.startStyle}if(gx.endStyle&&gA.to==gF){gE+=" "+gx.endStyle}if(gx.title&&!gG){gG=gx.title}if(gx.collapsed&&(!gk||dQ(gk.marker,gx)<0)){gk=gA}}else{if(gA.from>gm&&gF>gA.from){gF=gA.from}}}}if(gk&&(gk.from||0)==gm){ac(gy,(gk.to==null?gC+1:gk.to)-gm,gk.marker,gk.from==null);if(gk.to==null){return}if(gk.to==gm){gk=false}}if(!gk&&go.length){for(var gz=0;gz=gC){break}var gt=Math.min(gC,gF);while(true){if(gu){var gj=gm+gu.length;if(!gk){var gl=gj>gt?gu.slice(0,gt-gm):gu;gy.addToken(gy,gl,gD?gD+gi:gi,gv,gm+gl.length==gF?gE:"",gG,gs)}if(gj>=gt){gu=gu.slice(gt-gm);gm=gt;break}gm=gj;gv=""}gu=gp.slice(gw,gw=gq[gB++]);gD=eW(gq[gB++],gy.cm.options)}}}function dS(gi,gj){return gj.from.ch==0&&gj.to.ch==0&&fG(gj.text)==""&&(!gi.cm||gi.cm.options.wholeLineUpdateBefore)}function fy(gv,gq,gj,gm){function gw(gy){return gj?gj[gy]:null}function gk(gy,gA,gz){em(gy,gA,gz,gm);ae(gy,"change",gy,gq)}function gi(gB,gz){for(var gA=gB,gy=[];gA1){gv.remove(gu.line+1,go-1)}gv.insert(gu.line+1,gn)}}}}ae(gv,"change",gv,gq)}function eZ(gj){this.lines=gj;this.parent=null;for(var gk=0,gi=0;gk1||!(this.children[0] instanceof eZ))){var gj=[];this.collapse(gj);this.children=[new eZ(gj)];this.children[0].parent=this}},collapse:function(gi){for(var gj=0;gj50){while(gp.lines.length>50){var gm=gp.lines.splice(gp.lines.length-25,25);var gl=new eZ(gm);gp.height-=gl.height;this.children.splice(gn+1,0,gl);gl.parent=this}this.maybeSpill()}break}gj-=go}},maybeSpill:function(){if(this.children.length<=10){return}var gl=this;do{var gj=gl.children.splice(gl.children.length-5,5);var gk=new fx(gj);if(!gl.parent){var gm=new fx(gl.children);gm.parent=gl;gl.children=[gm,gk];gl=gm}else{gl.size-=gk.size;gl.height-=gk.height;var gi=dh(gl.parent.children,gl);gl.parent.children.splice(gi+1,0,gk)}gk.parent=gl.parent}while(gl.children.length>10);gl.parent.maybeSpill()},iterN:function(gi,go,gn){for(var gj=0;gj=0;gl--){bg(this,gm[gl])}if(gi){e7(this,gi)}else{if(this.cm){fF(this.cm)}}}),undo:cD(function(){b8(this,"undo")}),redo:cD(function(){b8(this,"redo")}),undoSelection:cD(function(){b8(this,"undo",true)}),redoSelection:cD(function(){b8(this,"redo",true)}),setExtending:function(gi){this.extend=gi},getExtending:function(){return this.extend},historySize:function(){var gl=this.history,gi=0,gk=0;for(var gj=0;gj=gm.ch)){gl.push(gk.marker.parent||gk.marker)}}}return gl},findMarks:function(gm,gl,gi){gm=fJ(this,gm);gl=fJ(this,gl);var gj=[],gk=gm.line;this.iter(gm.line,gl.line+1,function(gn){var gp=gn.markedSpans;if(gp){for(var go=0;gogq.to||gq.from==null&&gk!=gm.line||gk==gl.line&&gq.from>gl.ch)&&(!gi||gi(gq.marker))){gj.push(gq.marker.parent||gq.marker)}}}++gk});return gj},getAllMarks:function(){var gi=[];this.iter(function(gk){var gj=gk.markedSpans;if(gj){for(var gl=0;glgj){gi=gj;return true}gj-=gm;++gk});return fJ(this,W(gk,gi))},indexFromPos:function(gj){gj=fJ(this,gj);var gi=gj.ch;if(gj.linegl){gl=gi.from}if(gi.to!=null&&gi.to=gl.size){throw new Error("There is no line "+(gn+gl.first)+" in the document.")}for(var gi=gl;!gi.lines;){for(var gj=0;;++gj){var gm=gi.children[gj],gk=gm.chunkSize();if(gn1&&!gj.done[gj.done.length-2].ranges){gj.done.pop();return fG(gj.done)}}}}function fM(go,gm,gi,gl){var gk=go.history;gk.undone.length=0;var gj=+new Date,gp;if((gk.lastOp==gl||gk.lastOrigin==gm.origin&&gm.origin&&((gm.origin.charAt(0)=="+"&&go.cm&&gk.lastModTime>gj-go.cm.options.historyEventDelay)||gm.origin.charAt(0)=="*"))&&(gp=eM(gk,gk.lastOp==gl))){var gq=fG(gp.changes);if(cf(gm.from,gm.to)==0&&cf(gm.from,gq.to)==0){gq.to=cX(gm)}else{gp.changes.push(du(go,gm))}}else{var gn=fG(gk.done);if(!gn||!gn.ranges){cN(go.sel,gk.done)}gp={changes:[du(go,gm)],generation:gk.generation};gk.done.push(gp);while(gk.done.length>gk.undoDepth){gk.done.shift();if(!gk.done[0].ranges){gk.done.shift()}}}gk.done.push(gi);gk.generation=++gk.maxGeneration;gk.lastModTime=gk.lastSelTime=gj;gk.lastOp=gk.lastSelOp=gl;gk.lastOrigin=gk.lastSelOrigin=gm.origin;if(!gq){aE(go,"historyAdded")}}function bA(gm,gi,gk,gl){var gj=gi.charAt(0);return gj=="*"||gj=="+"&&gk.ranges.length==gl.ranges.length&&gk.somethingSelected()==gl.somethingSelected()&&new Date-gm.history.lastSelTime<=(gm.cm?gm.cm.options.historyEventDelay:500)}function gc(gn,gl,gi,gk){var gm=gn.history,gj=gk&&gk.origin;if(gi==gm.lastSelOp||(gj&&gm.lastSelOrigin==gj&&(gm.lastModTime==gm.lastSelTime&&gm.lastOrigin==gj||bA(gn,gj,fG(gm.done),gl)))){gm.done[gm.done.length-1]=gl}else{cN(gl,gm.done)}gm.lastSelTime=+new Date;gm.lastSelOrigin=gj;gm.lastSelOp=gi;if(gk&&gk.clearRedo!==false){fB(gm.undone)}}function cN(gj,gi){var gk=fG(gi);if(!(gk&&gk.ranges&&gk.equals(gj))){gi.push(gj)}}function bY(gj,gn,gm,gl){var gi=gn["spans_"+gj.id],gk=0;gj.iter(Math.max(gj.first,gm),Math.min(gj.first+gj.size,gl),function(go){if(go.markedSpans){(gi||(gi=gn["spans_"+gj.id]={}))[gk]=go.markedSpans}++gk})}function bl(gk){if(!gk){return null}for(var gj=0,gi;gj-1){fG(gr)[gi]=gp[gi];delete gp[gi]}}}}}}return gj}function I(gl,gk,gj,gi){if(gj0}function by(gi){gi.prototype.on=function(gj,gk){bX(this,gj,gk)};gi.prototype.off=function(gj,gk){ed(this,gj,gk)}}var dJ=30;var ca=H.Pass={toString:function(){return"CodeMirror.Pass"}};var Z={scroll:false},M={origin:"*mouse"},cW={origin:"+move"};function gh(){this.id=null}gh.prototype.set=function(gi,gj){clearTimeout(this.id);this.id=setTimeout(gj,gi)};var bT=H.countColumn=function(gl,gj,gn,go,gk){if(gj==null){gj=gl.search(/[^\s\u00a0]/);if(gj==-1){gj=gl.length}}for(var gm=go||0,gp=gk||0;;){var gi=gl.indexOf("\t",gm);if(gi<0||gi>=gj){return gp+(gj-gm)}gp+=gi-gm;gp+=gn-(gp%gn);gm=gi+1}};function eq(gm,gl,gn){for(var go=0,gk=0;;){var gj=gm.indexOf("\t",go);if(gj==-1){gj=gm.length}var gi=gj-go;if(gj==gm.length||gk+gi>=gl){return go+Math.min(gi,gl-gk)}gk+=gj-go;gk+=gn-(gk%gn);go=gj+1;if(gk>=gl){return go}}}var a0=[""];function cp(gi){while(a0.length<=gi){a0.push(fG(a0)+" ")}return a0[gi]}function fG(gi){return gi[gi.length-1]}var dL=function(gi){gi.select()};if(e1){dL=function(gi){gi.selectionStart=0;gi.selectionEnd=gi.value.length}}else{if(dK){dL=function(gj){try{gj.select()}catch(gi){}}}}function dh(gk,gi){for(var gj=0;gj"\x80"&&(gi.toUpperCase()!=gi.toLowerCase()||bc.test(gi))};function cA(gi,gj){if(!gj){return fD(gi)}if(gj.source.indexOf("\\w")>-1&&fD(gi)){return true}return gj.test(gi)}function eU(gi){for(var gj in gi){if(gi.hasOwnProperty(gj)&&gi[gj]){return false}}return true}var eJ=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function fp(gi){return gi.charCodeAt(0)>=768&&eJ.test(gi)}function f3(gi,gm,gl,gk){var gn=document.createElement(gi);if(gl){gn.className=gl}if(gk){gn.style.cssText=gk}if(typeof gm=="string"){gn.appendChild(document.createTextNode(gm))}else{if(gm){for(var gj=0;gj0;--gi){gj.removeChild(gj.firstChild)}return gj}function bR(gi,gj){return d1(gi).appendChild(gj)}var gb=H.contains=function(gi,gj){if(gj.nodeType==3){gj=gj.parentNode}if(gi.contains){return gi.contains(gj)}do{if(gj.nodeType==11){gj=gj.host}if(gj==gi){return true}}while(gj=gj.parentNode)};function dO(){var gi=document.activeElement;while(gi&&gi.root&&gi.root.activeElement){gi=gi.root.activeElement}return gi}if(dK&&k<11){dO=function(){try{return document.activeElement}catch(gi){return document.body}}}function S(gi){return new RegExp("(^|\\s)"+gi+"(?:$|\\s)\\s*")}var f=H.rmClass=function(gk,gi){var gl=gk.className;var gj=S(gi).exec(gl);if(gj){var gm=gl.slice(gj.index+gj[0].length);gk.className=gl.slice(0,gj.index)+(gm?gj[1]+gm:"")}};var fA=H.addClass=function(gj,gi){var gk=gj.className;if(!S(gi).test(gk)){gj.className+=(gk?" ":"")+gi}};function fT(gk,gi){var gj=gk.split(" ");for(var gl=0;gl2&&!(dK&&k<8)}}var gj=fL?f3("span","\u200b"):f3("span","\u00a0",null,"display: inline-block; width: 1px; margin-right: -1px");gj.setAttribute("cm-text","");return gj}var fK;function bO(gl){if(fK!=null){return fK}var gi=bR(gl,document.createTextNode("A\u062eA"));var gk=cl(gi,0,1).getBoundingClientRect();if(!gk||gk.left==gk.right){return false}var gj=cl(gi,1,2).getBoundingClientRect();return fK=(gj.right-gk.right<3)}var fS=H.splitLines="\n\nb".split(/\n/).length!=3?function(gn){var go=0,gi=[],gm=gn.length;while(go<=gm){var gl=gn.indexOf("\n",go);if(gl==-1){gl=gn.length}var gk=gn.slice(go,gn.charAt(gl-1)=="\r"?gl-1:gl);var gj=gk.indexOf("\r");if(gj!=-1){gi.push(gk.slice(0,gj));go+=gj+1}else{gi.push(gk);go=gl+1}}return gi}:function(gi){return gi.split(/\r\n?|\n/)};var bs=window.getSelection?function(gj){try{return gj.selectionStart!=gj.selectionEnd}catch(gi){return false}}:function(gk){try{var gi=gk.ownerDocument.selection.createRange()}catch(gj){}if(!gi||gi.parentElement()!=gk){return false}return gi.compareEndPoints("StartToEnd",gi)!=0};var da=(function(){var gi=f3("div");if("oncopy" in gi){return true}gi.setAttribute("oncopy","return;");return typeof gi.oncopy=="function"})();var e6=null;function aK(gj){if(e6!=null){return e6}var gk=bR(gj,f3("span","x"));var gl=gk.getBoundingClientRect();var gi=cl(gk,0,1).getBoundingClientRect();return e6=Math.abs(gl.left-gi.left)>1}var fg={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",107:"=",109:"-",127:"Delete",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"};H.keyNames=fg;(function(){for(var gi=0;gi<10;gi++){fg[gi+48]=fg[gi+96]=String(gi)}for(var gi=65;gi<=90;gi++){fg[gi]=String.fromCharCode(gi)}for(var gi=1;gi<=12;gi++){fg[gi+111]=fg[gi+63235]="F"+gi}})();function d4(gi,go,gn,gm){if(!gi){return gm(go,gn,"ltr")}var gl=false;for(var gk=0;gkgo||go==gn&&gj.to==go){gm(Math.max(gj.from,go),Math.min(gj.to,gn),gj.level==1?"rtl":"ltr");gl=true}}if(!gl){gm(go,gn,"ltr")}}function dy(gi){return gi.level%2?gi.to:gi.from}function ge(gi){return gi.level%2?gi.from:gi.to}function cE(gj){var gi=a(gj);return gi?dy(gi[0]):0}function cS(gj){var gi=a(gj);if(!gi){return gj.text.length}return ge(fG(gi))}function bt(gj,gm){var gk=ff(gj.doc,gm);var gn=y(gk);if(gn!=gk){gm=bN(gn)}var gi=a(gn);var gl=!gi?0:gi[0].level%2?cS(gn):cE(gn);return W(gm,gl)}function dP(gk,gn){var gj,gl=ff(gk.doc,gn);while(gj=ew(gl)){gl=gj.find(1,true).line;gn=null}var gi=a(gl);var gm=!gi?gl.text.length:gi[0].level%2?cE(gl):cS(gl);return W(gn==null?bN(gl):gn,gm)}function dI(gj,go){var gn=bt(gj,go.line);var gk=ff(gj.doc,gn.line);var gi=a(gk);if(!gi||gi[0].level==0){var gm=Math.max(0,gk.text.search(/\S/));var gl=go.line==gn.line&&go.ch<=gm&&go.ch;return W(gn.line,gl?0:gm)}return gn}function an(gj,gk,gi){var gl=gj[0].level;if(gk==gl){return true}if(gi==gl){return false}return gkgm){return gj}if((gl.from==gm||gl.to==gm)){if(gk==null){gk=gj}else{if(an(gi,gl.level,gi[gk].level)){if(gl.from!=gl.to){e2=gk}return gj}else{if(gl.from!=gl.to){e2=gj}return gk}}}}return gk}function fe(gi,gl,gj,gk){if(!gk){return gl+gj}do{gl+=gj}while(gl>0&&fp(gi.text.charAt(gl)));return gl}function u(gi,gp,gk,gl){var gm=a(gi);if(!gm){return ai(gi,gp,gk,gl)}var go=aG(gm,gp),gj=gm[go];var gn=fe(gi,gp,gj.level%2?-gk:gk,gl);for(;;){if(gn>gj.from&&gn0)==gj.level%2?gj.to:gj.from}else{gj=gm[go+=gk];if(!gj){return null}if((gk>0)==gj.level%2){gn=fe(gi,gj.to,-1,gl)}else{gn=fe(gi,gj.from,1,gl)}}}}function ai(gi,gm,gj,gk){var gl=gm+gj;if(gk){while(gl>0&&fp(gi.text.charAt(gl))){gl+=gj}}return gl<0||gl>gi.text.length?null:gl}var bh=(function(){var go="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN";var gm="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm";function gl(gs){if(gs<=247){return go.charAt(gs)}else{if(1424<=gs&&gs<=1524){return"R"}else{if(1536<=gs&&gs<=1773){return gm.charAt(gs-1536)}else{if(1774<=gs&&gs<=2220){return"r"}else{if(8192<=gs&&gs<=8203){return"w"}else{if(gs==8204){return"b"}else{return"L"}}}}}}}var gi=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;var gr=/[stwN]/,gk=/[LRr]/,gj=/[Lb1n]/,gn=/[1n]/;var gq="L";function gp(gu,gt,gs){this.level=gu;this.from=gt;this.to=gs}return function(gC){if(!gi.test(gC)){return false}var gI=gC.length,gy=[];for(var gH=0,gu;gH*\/]/.test(Y)){return U(null,"select-op")}else{if(Y=="."&&aa.match(/^-?[_a-z][_a-z0-9-]*/i)){return U("qualifier","qualifier")}else{if(/[:;{}\[\]\(\)]/.test(Y)){return U(null,Y)}else{if((Y=="u"&&aa.match(/rl(-prefix)?\(/))||(Y=="d"&&aa.match("omain("))||(Y=="r"&&aa.match("egexp("))){aa.backUp(1);Z.tokenize=V;return U("property","word")}else{if(/[\w\\\-]/.test(Y)){aa.eatWhile(/[\w\\\-]/);return U("property","word")}else{return U(null,null)}}}}}}}}}}}}}function H(X){return function(ab,Z){var aa=false,Y;while((Y=ab.next())!=null){if(Y==X&&!aa){if(X==")"){ab.backUp(1)}break}aa=!aa&&Y=="\\"}if(Y==X||!aa&&X!=")"){Z.tokenize=null}return U("string","string")}}function V(Y,X){Y.next();if(!Y.match(/\s*[\"\')]/,false)){X.tokenize=H(")")}else{X.tokenize=null}return U(null,"(")}function N(Y,X,Z){this.type=Y;this.indent=X;this.prev=Z}function D(Y,Z,X){Y.context=new N(X,Z.indentation()+M,Y.context);return X}function P(X){X.context=X.context.prev;return X.context.type}function x(X,Z,Y){return C[Y.context.type](X,Z,Y)}function Q(Y,aa,Z,ab){for(var X=ab||1;X>0;X--){Z.context=Z.context.prev}return x(Y,aa,Z)}function E(Y){var X=Y.current().toLowerCase();if(O.hasOwnProperty(X)){K="atom"}else{if(L.hasOwnProperty(X)){K="keyword"}else{K="variable"}}}var C={};C.top=function(X,Z,Y){if(X=="{"){return D(Y,Z,"block")}else{if(X=="}"&&Y.context.prev){return P(Y)}else{if(/@(media|supports|(-moz-)?document)/.test(X)){return D(Y,Z,"atBlock")}else{if(/@(font-face|counter-style)/.test(X)){Y.stateArg=X;return"restricted_atBlock_before"}else{if(/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(X)){return"keyframes"}else{if(X&&X.charAt(0)=="@"){return D(Y,Z,"at")}else{if(X=="hash"){K="builtin"}else{if(X=="word"){K="tag"}else{if(X=="variable-definition"){return"maybeprop"}else{if(X=="interpolation"){return D(Y,Z,"interpolation")}else{if(X==":"){return"pseudo"}else{if(J&&X=="("){return D(Y,Z,"parens")}}}}}}}}}}}}return Y.context.type};C.block=function(X,aa,Y){if(X=="word"){var Z=aa.current().toLowerCase();if(F.hasOwnProperty(Z)){K="property";return"maybeprop"}else{if(z.hasOwnProperty(Z)){K="string-2";return"maybeprop"}else{if(J){K=aa.match(/^\s*:(?:\s|$)/,false)?"property":"tag";return"block"}else{K+=" error";return"maybeprop"}}}}else{if(X=="meta"){return"block"}else{if(!J&&(X=="hash"||X=="qualifier")){K="error";return"block"}else{return C.top(X,aa,Y)}}}};C.maybeprop=function(X,Z,Y){if(X==":"){return D(Y,Z,"prop")}return x(X,Z,Y)};C.prop=function(X,Z,Y){if(X==";"){return P(Y)}if(X=="{"&&J){return D(Y,Z,"propBlock")}if(X=="}"||X=="{"){return Q(X,Z,Y)}if(X=="("){return D(Y,Z,"parens")}if(X=="hash"&&!/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(Z.current())){K+=" error"}else{if(X=="word"){E(Z)}else{if(X=="interpolation"){return D(Y,Z,"interpolation")}}}return"prop"};C.propBlock=function(Y,X,Z){if(Y=="}"){return P(Z)}if(Y=="word"){K="property";return"maybeprop"}return Z.context.type};C.parens=function(X,Z,Y){if(X=="{"||X=="}"){return Q(X,Z,Y)}if(X==")"){return P(Y)}if(X=="("){return D(Y,Z,"parens")}if(X=="interpolation"){return D(Y,Z,"interpolation")}if(X=="word"){E(Z)}return"parens"};C.pseudo=function(X,Z,Y){if(X=="word"){K="variable-3";return Y.context.type}return x(X,Z,Y)};C.atBlock=function(X,aa,Y){if(X=="("){return D(Y,aa,"atBlock_parens")}if(X=="}"){return Q(X,aa,Y)}if(X=="{"){return P(Y)&&D(Y,aa,J?"block":"top")}if(X=="word"){var Z=aa.current().toLowerCase();if(Z=="only"||Z=="not"||Z=="and"||Z=="or"){K="keyword"}else{if(w.hasOwnProperty(Z)){K="tag"}else{if(S.hasOwnProperty(Z)){K="attribute"}else{if(I.hasOwnProperty(Z)){K="property"}else{if(F.hasOwnProperty(Z)){K="property"}else{if(z.hasOwnProperty(Z)){K="string-2"}else{if(O.hasOwnProperty(Z)){K="atom"}else{if(L.hasOwnProperty(Z)){K="keyword"}else{K="error"}}}}}}}}}return Y.context.type};C.atBlock_parens=function(X,Z,Y){if(X==")"){return P(Y)}if(X=="{"||X=="}"){return Q(X,Z,Y,2)}return C.atBlock(X,Z,Y)};C.restricted_atBlock_before=function(X,Z,Y){if(X=="{"){return D(Y,Z,"restricted_atBlock")}if(X=="word"&&Y.stateArg=="@counter-style"){K="variable";return"restricted_atBlock_before"}return x(X,Z,Y)};C.restricted_atBlock=function(X,Z,Y){if(X=="}"){Y.stateArg=null;return P(Y)}if(X=="word"){if((Y.stateArg=="@font-face"&&!B.hasOwnProperty(Z.current().toLowerCase()))||(Y.stateArg=="@counter-style"&&!R.hasOwnProperty(Z.current().toLowerCase()))){K="error"}else{K="property"}return"maybeprop"}return"restricted_atBlock"};C.keyframes=function(X,Z,Y){if(X=="word"){K="variable";return"keyframes"}if(X=="{"){return D(Y,Z,"top")}return x(X,Z,Y)};C.at=function(X,Z,Y){if(X==";"){return P(Y)}if(X=="{"||X=="}"){return Q(X,Z,Y)}if(X=="word"){K="tag"}else{if(X=="hash"){K="builtin"}}return"at"};C.interpolation=function(X,Z,Y){if(X=="}"){return P(Y)}if(X=="{"||X==";"){return Q(X,Z,Y)}if(X=="word"){K="variable"}else{if(X!="variable"&&X!="("&&X!=")"){K="error"}}return"interpolation"};return{startState:function(X){return{tokenize:null,state:"top",stateArg:null,context:new N("top",X||0,null)}},token:function(Z,Y){if(!Y.tokenize&&Z.eatSpace()){return null}var X=(Y.tokenize||W)(Z,Y);if(X&&typeof X=="object"){A=X[1];X=X[0]}K=X;Y.state=C[Y.state](A,Z,Y);return K},indent:function(ab,Z){var Y=ab.context,aa=Z&&Z.charAt(0);var X=Y.indent;if(Y.type=="prop"&&(aa=="}"||aa==")")){Y=Y.prev}if(Y.prev&&(aa=="}"&&(Y.type=="block"||Y.type=="top"||Y.type=="interpolation"||Y.type=="restricted_atBlock")||aa==")"&&(Y.type=="parens"||Y.type=="atBlock_parens")||aa=="{"&&(Y.type=="at"||Y.type=="atBlock"))){X=Y.indent-M;Y=Y.prev}return X},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",fold:"brace"}});function g(y){var x={};for(var w=0;w]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i)&&k.string.slice(k.start-2,k.start)!="]("){j.combineTokens=true;return"link"}k.next();return null},blankLine:f};var e={underscoresBreakWords:false,taskLists:true,fencedCodeBlocks:true,strikethrough:true};for(var b in h){e[b]=h[b]}e.name="markdown";return a.overlayMode(a.getMode(d,e),g)},"markdown");a.defineMIME("text/x-gfm","gfm")});(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"),require("../xml/xml"),require("../javascript/javascript"),require("../css/css"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],a)}else{a(CodeMirror)}}})(function(a){a.defineMode("htmlmixed",function(c,d){var b=a.getMode(c,{name:"xml",htmlMode:true,multilineTagIndentFactor:d.multilineTagIndentFactor,multilineTagIndentPastTag:d.multilineTagIndentPastTag});var n=a.getMode(c,"css");var l=[],k=d&&d.scriptTypes;l.push({matches:/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i,mode:a.getMode(c,"javascript")});if(k){for(var e=0;e"){var u=t.string.slice(Math.max(0,t.pos-100),t.pos).match(/\btype\s*=\s*("[^"]+"|'[^']+'|\S+)[^<]*$/i);u=u?u[1]:"";if(u&&/[\"\']/.test(u.charAt(0))){u=u.slice(1,u.length-1)}for(var o=0;o"){r.token=g;r.localMode=n;r.localState=n.startState(b.indent(r.htmlState,""))}}return q}function h(r,i,o){var q=r.current();var p=q.search(i);if(p>-1){r.backUp(q.length-p)}else{if(q.match(/<\/?$/)){r.backUp(q.length);if(!r.match(i,false)){r.match(q)}}}return o}function m(o,i){if(o.match(/^<\/\s*script\s*>/i,false)){i.token=f;i.localState=i.localMode=null;return null}return h(o,/<\/\s*script\s*>/,i.localMode.token(o,i.localState))}function g(o,i){if(o.match(/^<\/\s*style\s*>/i,false)){i.token=f;i.localState=i.localMode=null;return null}return h(o,/<\/\s*style\s*>/,n.token(o,i.localState))}return{startState:function(){var i=b.startState();return{token:f,localMode:null,localState:null,htmlState:i}},copyState:function(o){if(o.localState){var i=a.copyState(o.localMode,o.localState)}return{token:o.token,localMode:o.localMode,localState:i,htmlState:a.copyState(b,o.htmlState)}},token:function(o,i){return i.token(o,i)},indent:function(o,i){if(!o.localMode||/^\s*<\//.test(i)){return b.indent(o.htmlState,i)}else{if(o.localMode.indent){return o.localMode.indent(o.localState,i)}else{return a.Pass}}},innerMode:function(i){return{state:i.localState||i.htmlState,mode:i.localMode||b}}}},"xml","javascript","css");a.defineMIME("text/html","htmlmixed")});(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror"],a)}else{a(CodeMirror)}}})(function(a){a.defineMode("javascript",function(Z,aj){var l=Z.indentUnit;var A=aj.statementIndent;var aB=aj.jsonld;var z=aj.json||aB;var g=aj.typescript;var au=aj.wordCharacters||/[\w$\xa1-\uffff]/;var ar=function(){function aR(aT){return{type:aT,style:"keyword"}}var aM=aR("keyword a"),aK=aR("keyword b"),aJ=aR("keyword c");var aL=aR("operator"),aP={type:"atom",style:"atom"};var aN={"if":aR("if"),"while":aM,"with":aM,"else":aK,"do":aK,"try":aK,"finally":aK,"return":aJ,"break":aJ,"continue":aJ,"new":aJ,"delete":aJ,"throw":aJ,"debugger":aJ,"var":aR("var"),"const":aR("var"),let:aR("var"),"function":aR("function"),"catch":aR("catch"),"for":aR("for"),"switch":aR("switch"),"case":aR("case"),"default":aR("default"),"in":aL,"typeof":aL,"instanceof":aL,"true":aP,"false":aP,"null":aP,"undefined":aP,"NaN":aP,"Infinity":aP,"this":aR("this"),module:aR("module"),"class":aR("class"),"super":aR("atom"),yield:aJ,"export":aR("export"),"import":aR("import"),"extends":aJ};if(g){var aS={type:"variable",style:"variable-3"};var aO={"interface":aR("interface"),"extends":aR("extends"),constructor:aR("constructor"),"public":aR("public"),"private":aR("private"),"protected":aR("protected"),"static":aR("static"),string:aS,number:aS,bool:aS,any:aS};for(var aQ in aO){aN[aQ]=aO[aQ]}}return aN}();var P=/[+\-*&%=<>!?|~^]/;var aq=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function F(aM){var aK=false,aJ,aL=false;while((aJ=aM.next())!=null){if(!aK){if(aJ=="/"&&!aL){return}if(aJ=="["){aL=true}else{if(aL&&aJ=="]"){aL=false}}}aK=!aK&&aJ=="\\"}}var S,G;function L(aL,aK,aJ){S=aL;G=aJ;return aK}function U(aN,aL){var aJ=aN.next();if(aJ=='"'||aJ=="'"){aL.tokenize=R(aJ);return aL.tokenize(aN,aL)}else{if(aJ=="."&&aN.match(/^\d+(?:[eE][+\-]?\d+)?/)){return L("number","number")}else{if(aJ=="."&&aN.match("..")){return L("spread","meta")}else{if(/[\[\]{}\(\),;\:\.]/.test(aJ)){return L(aJ)}else{if(aJ=="="&&aN.eat(">")){return L("=>","operator")}else{if(aJ=="0"&&aN.eat(/x/i)){aN.eatWhile(/[\da-f]/i);return L("number","number")}else{if(/\d/.test(aJ)){aN.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/);return L("number","number")}else{if(aJ=="/"){if(aN.eat("*")){aL.tokenize=aA;return aA(aN,aL)}else{if(aN.eat("/")){aN.skipToEnd();return L("comment","comment")}else{if(aL.lastType=="operator"||aL.lastType=="keyword c"||aL.lastType=="sof"||/^[\[{}\(,;:]$/.test(aL.lastType)){F(aN);aN.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/);return L("regexp","string-2")}else{aN.eatWhile(P);return L("operator","operator",aN.current())}}}}else{if(aJ=="`"){aL.tokenize=aC;return aC(aN,aL)}else{if(aJ=="#"){aN.skipToEnd();return L("error","error")}else{if(P.test(aJ)){aN.eatWhile(P);return L("operator","operator",aN.current())}else{if(au.test(aJ)){aN.eatWhile(au);var aM=aN.current(),aK=ar.propertyIsEnumerable(aM)&&ar[aM];return(aK&&aL.lastType!=".")?L(aK.type,aK.style,aM):L("variable","variable",aM)}}}}}}}}}}}}}function R(aJ){return function(aN,aL){var aM=false,aK;if(aB&&aN.peek()=="@"&&aN.match(aq)){aL.tokenize=U;return L("jsonld-keyword","meta")}while((aK=aN.next())!=null){if(aK==aJ&&!aM){break}aM=!aM&&aK=="\\"}if(!aM){aL.tokenize=U}return L("string","string")}}function aA(aM,aL){var aJ=false,aK;while(aK=aM.next()){if(aK=="/"&&aJ){aL.tokenize=U;break}aJ=(aK=="*")}return L("comment","comment")}function aC(aM,aK){var aL=false,aJ;while((aJ=aM.next())!=null){if(!aL&&(aJ=="`"||aJ=="$"&&aM.eat("{"))){aK.tokenize=U;break}aL=!aL&&aJ=="\\"}return L("quasi","string-2",aM.current())}var m="([{}])";function ax(aP,aM){if(aM.fatArrowAt){aM.fatArrowAt=null}var aL=aP.string.indexOf("=>",aP.start);if(aL<0){return}var aO=0,aK=false;for(var aQ=aL-1;aQ>=0;--aQ){var aJ=aP.string.charAt(aQ);var aN=m.indexOf(aJ);if(aN>=0&&aN<3){if(!aO){++aQ;break}if(--aO==0){break}}else{if(aN>=3&&aN<6){++aO}else{if(au.test(aJ)){aK=true}else{if(/["'\/]/.test(aJ)){return}else{if(aK&&!aO){++aQ;break}}}}}}if(aK&&!aO){aM.fatArrowAt=aQ}}var b={atom:true,number:true,variable:true,string:true,regexp:true,"this":true,"jsonld-keyword":true};function J(aO,aK,aJ,aN,aL,aM){this.indented=aO;this.column=aK;this.type=aJ;this.prev=aL;this.info=aM;if(aN!=null){this.align=aN}}function s(aM,aL){for(var aK=aM.localVars;aK;aK=aK.next){if(aK.name==aL){return true}}for(var aJ=aM.context;aJ;aJ=aJ.prev){for(var aK=aJ.vars;aK;aK=aK.next){if(aK.name==aL){return true}}}}function f(aN,aK,aJ,aM,aO){var aP=aN.cc;D.state=aN;D.stream=aO;D.marked=null,D.cc=aP;D.style=aK;if(!aN.lexical.hasOwnProperty("align")){aN.lexical.align=true}while(true){var aL=aP.length?aP.pop():z?an:aH;if(aL(aJ,aM)){while(aP.length&&aP[aP.length-1].lex){aP.pop()()}if(D.marked){return D.marked}if(aJ=="variable"&&s(aN,aM)){return"variable-2"}return aK}}}var D={state:null,column:null,marked:null,cc:null};function aa(){for(var aJ=arguments.length-1;aJ>=0;aJ--){D.cc.push(arguments[aJ])}}function ae(){aa.apply(null,arguments);return true}function aw(aK){function aJ(aN){for(var aM=aN;aM;aM=aM.next){if(aM.name==aK){return true}}return false}var aL=D.state;if(aL.context){D.marked="def";if(aJ(aL.localVars)){return}aL.localVars={name:aK,next:aL.localVars}}else{if(aJ(aL.globalVars)){return}if(aj.globalVars){aL.globalVars={name:aK,next:aL.globalVars}}}}var q={name:"this",next:{name:"arguments"}};function w(){D.state.context={prev:D.state.context,vars:D.state.localVars};D.state.localVars=q}function x(){D.state.localVars=D.state.context.vars;D.state.context=D.state.context.prev}function aF(aK,aL){var aJ=function(){var aO=D.state,aM=aO.indented;if(aO.lexical.type=="stat"){aM=aO.lexical.indented}else{for(var aN=aO.lexical;aN&&aN.type==")"&&aN.align;aN=aN.prev){aM=aN.indented}}aO.lexical=new J(aM,D.stream.column(),aK,null,aO.lexical,aL)};aJ.lex=true;return aJ}function h(){var aJ=D.state;if(aJ.lexical.prev){if(aJ.lexical.type==")"){aJ.indented=aJ.lexical.indented}aJ.lexical=aJ.lexical.prev}}h.lex=true;function r(aJ){function aK(aL){if(aL==aJ){return ae()}else{if(aJ==";"){return aa()}else{return ae(aK)}}}return aK}function aH(aJ,aK){if(aJ=="var"){return ae(aF("vardef",aK.length),d,r(";"),h)}if(aJ=="keyword a"){return ae(aF("form"),an,aH,h)}if(aJ=="keyword b"){return ae(aF("form"),aH,h)}if(aJ=="{"){return ae(aF("}"),y,h)}if(aJ==";"){return ae()}if(aJ=="if"){if(D.state.lexical.info=="else"&&D.state.cc[D.state.cc.length-1]==h){D.state.cc.pop()()}return ae(aF("form"),an,aH,h,e)}if(aJ=="function"){return ae(M)}if(aJ=="for"){return ae(aF("form"),u,aH,h)}if(aJ=="variable"){return ae(aF("stat"),aI)}if(aJ=="switch"){return ae(aF("form"),an,aF("}","switch"),r("{"),y,h,h)}if(aJ=="case"){return ae(an,r(":"))}if(aJ=="default"){return ae(r(":"))}if(aJ=="catch"){return ae(aF("form"),w,r("("),af,r(")"),aH,h,x)}if(aJ=="module"){return ae(aF("form"),w,H,x,h)}if(aJ=="class"){return ae(aF("form"),V,h)}if(aJ=="export"){return ae(aF("form"),aG,h)}if(aJ=="import"){return ae(aF("form"),ag,h)}return aa(aF("stat"),an,r(";"),h)}function an(aJ){return Y(aJ,false)}function aE(aJ){return Y(aJ,true)}function Y(aK,aM){if(D.state.fatArrowAt==D.stream.start){var aJ=aM?N:W;if(aK=="("){return ae(w,aF(")"),at(i,")"),h,r("=>"),aJ,x)}else{if(aK=="variable"){return aa(w,i,r("=>"),aJ,x)}}}var aL=aM?j:ab;if(b.hasOwnProperty(aK)){return ae(aL)}if(aK=="function"){return ae(M,aL)}if(aK=="keyword c"){return ae(aM?ak:ai)}if(aK=="("){return ae(aF(")"),ai,az,r(")"),h,aL)}if(aK=="operator"||aK=="spread"){return ae(aM?aE:an)}if(aK=="["){return ae(aF("]"),n,h,aL)}if(aK=="{"){return ay(t,"}",null,aL)}if(aK=="quasi"){return aa(Q,aL)}return ae()}function ai(aJ){if(aJ.match(/[;\}\)\],]/)){return aa()}return aa(an)}function ak(aJ){if(aJ.match(/[;\}\)\],]/)){return aa()}return aa(aE)}function ab(aJ,aK){if(aJ==","){return ae(an)}return j(aJ,aK,false)}function j(aJ,aL,aN){var aK=aN==false?ab:j;var aM=aN==false?an:aE;if(aJ=="=>"){return ae(w,aN?N:W,x)}if(aJ=="operator"){if(/\+\+|--/.test(aL)){return ae(aK)}if(aL=="?"){return ae(an,r(":"),aM)}return ae(aM)}if(aJ=="quasi"){return aa(Q,aK)}if(aJ==";"){return}if(aJ=="("){return ay(aE,")","call",aK)}if(aJ=="."){return ae(al,aK)}if(aJ=="["){return ae(aF("]"),ai,r("]"),h,aK)}}function Q(aJ,aK){if(aJ!="quasi"){return aa()}if(aK.slice(aK.length-2)!="${"){return ae(Q)}return ae(an,p)}function p(aJ){if(aJ=="}"){D.marked="string-2";D.state.tokenize=aC;return ae(Q)}}function W(aJ){ax(D.stream,D.state);return aa(aJ=="{"?aH:an)}function N(aJ){ax(D.stream,D.state);return aa(aJ=="{"?aH:aE)}function aI(aJ){if(aJ==":"){return ae(h,aH)}return aa(ab,r(";"),h)}function al(aJ){if(aJ=="variable"){D.marked="property";return ae()}}function t(aJ,aK){if(aJ=="variable"||D.style=="keyword"){D.marked="property";if(aK=="get"||aK=="set"){return ae(I)}return ae(K)}else{if(aJ=="number"||aJ=="string"){D.marked=aB?"property":(D.style+" property");return ae(K)}else{if(aJ=="jsonld-keyword"){return ae(K)}else{if(aJ=="["){return ae(an,r("]"),K)}}}}}function I(aJ){if(aJ!="variable"){return aa(K)}D.marked="property";return ae(M)}function K(aJ){if(aJ==":"){return ae(aE)}if(aJ=="("){return aa(M)}}function at(aL,aJ){function aK(aN){if(aN==","){var aM=D.state.lexical;if(aM.info=="call"){aM.pos=(aM.pos||0)+1}return ae(aL,aK)}if(aN==aJ){return ae()}return ae(r(aJ))}return function(aM){if(aM==aJ){return ae()}return aa(aL,aK)}}function ay(aM,aJ,aL){for(var aK=3;aK=0;--aL){var aQ=aP.cc[aL];if(aQ==h){aM=aM.prev}else{if(aQ!=e){break}}}}if(aM.type=="stat"&&aO=="}"){aM=aM.prev}if(A&&aM.type==")"&&aM.prev.type=="stat"){aM=aM.prev}var aN=aM.type,aK=aO==aN;if(aN=="vardef"){return aM.indented+(aP.lastType=="operator"||aP.lastType==","?aM.info+1:0)}else{if(aN=="form"&&aO=="{"){return aM.indented}else{if(aN=="form"){return aM.indented+l}else{if(aN=="stat"){return aM.indented+(ao(aP,aJ)?A||l:0)}else{if(aM.info=="switch"&&!aK&&aj.doubleIndentSwitch!=false){return aM.indented+(/^(?:case|default)\b/.test(aJ)?l:2*l)}else{if(aM.align){return aM.column+(aK?0:1)}else{return aM.indented+(aK?0:l)}}}}}}},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:z?null:"/*",blockCommentEnd:z?null:"*/",lineComment:z?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:z?"json":"javascript",jsonldMode:aB,jsonMode:z}});a.registerHelper("wordChars","javascript",/[\w$]/);a.defineMIME("text/javascript","javascript");a.defineMIME("text/ecmascript","javascript");a.defineMIME("application/javascript","javascript");a.defineMIME("application/x-javascript","javascript");a.defineMIME("application/ecmascript","javascript");a.defineMIME("application/json",{name:"javascript",json:true});a.defineMIME("application/x-json",{name:"javascript",json:true});a.defineMIME("application/ld+json",{name:"javascript",jsonld:true});a.defineMIME("text/typescript",{name:"javascript",typescript:true});a.defineMIME("application/typescript",{name:"javascript",typescript:true})});(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"),require("../xml/xml"),require("../meta"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror","../xml/xml","../meta"],a)}else{a(CodeMirror)}}})(function(a){a.defineMode("markdown",function(y,z){var p=a.modes.hasOwnProperty("xml");var j=a.getMode(y,p?{name:"xml",htmlMode:true}:"text/plain");function F(X){if(a.findModeByName){var Y=a.findModeByName(X);if(Y){X=Y.mime||Y.mimes[0]}}var Z=a.getMode(y,X);return Z.name=="null"?null:Z}if(z.highlightFormatting===undefined){z.highlightFormatting=false}if(z.maxBlockquoteDepth===undefined){z.maxBlockquoteDepth=0}if(z.underscoresBreakWords===undefined){z.underscoresBreakWords=true}if(z.fencedCodeBlocks===undefined){z.fencedCodeBlocks=false}if(z.taskLists===undefined){z.taskLists=false}if(z.strikethrough===undefined){z.strikethrough=false}var k=0;var i="header",g="comment",r="quote",Q="variable-2",N="variable-3",M="keyword",P="hr",h="tag",u="formatting",q="link",m="link",G="link",E="string",R="em",A="strong",n="strikethrough";var b=/^([*\-_])(?:\s*\1){2,}\s*$/,e=/^[*\-+]\s+/,C=/^[0-9]+([.)])\s+/,t=/^\[(x| )\](?=\s)/,T=/^(#+)(?: |$)/,W=/^ *(?:\={1,}|-{1,})\s*$/,B=/^[^#!\[\]*_\\<>` "'(~]+/;function U(Z,Y,X){Y.f=Y.inline=X;return X(Z,Y)}function D(Z,Y,X){Y.f=Y.block=X;return X(Z,Y)}function c(X){X.linkTitle=false;X.em=false;X.strong=false;X.strikethrough=false;X.quote=0;X.indentedCode=false;if(!p&&X.f==s){X.f=S;X.block=J}X.trailingSpace=0;X.trailingSpaceNewLine=false;X.thisLineHasContent=false;return null}function J(ad,ac){var ab=ad.sol();var Z=ac.list!==false,X=ac.indentedCode;ac.indentedCode=false;if(Z){if(ac.indentationDiff>=0){if(ac.indentationDiff<4){ac.indentation-=ac.indentationDiff}ac.list=null}else{if(ac.indentation>0){ac.list=null;ac.listDepth=Math.floor(ac.indentation/4)}else{ac.list=false;ac.listDepth=0}}}var Y=null;if(ac.indentationDiff>=4){ad.skipToEnd();if(X||!ac.prevLineHasContent){ac.indentation-=4;ac.indentedCode=true;return g}else{return null}}else{if(ad.eatSpace()){return null}else{if((Y=ad.match(T))&&Y[1].length<=6){ac.header=Y[1].length;if(z.highlightFormatting){ac.formatting="header"}ac.f=ac.inline;return w(ac)}else{if(ac.prevLineHasContent&&!ac.quote&&!Z&&!X&&(Y=ad.match(W))){ac.header=Y[0].charAt(0)=="="?1:2;if(z.highlightFormatting){ac.formatting="header"}ac.f=ac.inline;return w(ac)}else{if(ad.eat(">")){ac.quote=ab?1:ac.quote+1;if(z.highlightFormatting){ac.formatting="quote"}ad.eatSpace();return w(ac)}else{if(ad.peek()==="["){return U(ad,ac,d)}else{if(ad.match(b,true)){ac.hr=true;return P}else{if((!ac.prevLineHasContent||Z)&&(ad.match(e,false)||ad.match(C,false))){var aa=null;if(ad.match(e,true)){aa="ul"}else{ad.match(C,true);aa="ol"}ac.indentation+=4;ac.list=true;ac.listDepth++;if(z.taskLists&&ad.match(t,false)){ac.taskList=true}ac.f=ac.inline;if(z.highlightFormatting){ac.formatting=["list","list-"+aa]}return w(ac)}else{if(z.fencedCodeBlocks&&ad.match(/^```[ \t]*([\w+#]*)/,true)){ac.localMode=F(RegExp.$1);if(ac.localMode){ac.localState=ac.localMode.startState()}ac.f=ac.block=I;if(z.highlightFormatting){ac.formatting="code-block"}ac.code=true;return w(ac)}}}}}}}}}return U(ad,ac,ac.inline)}function s(Z,Y){var X=j.token(Z,Y.htmlState);if((p&&Y.htmlState.tagStart===null&&(!Y.htmlState.context&&Y.htmlState.tokenize.isInText))||(Y.md_inside&&Z.current().indexOf(">")>-1)){Y.f=S;Y.block=J;Y.htmlState=null}return X}function I(Y,X){if(Y.sol()&&Y.match("```",false)){X.localMode=X.localState=null;X.f=X.block=O;return null}else{if(X.localMode){return X.localMode.token(Y,X.localState)}else{Y.skipToEnd();return g}}}function O(Z,Y){Z.match("```");Y.block=J;Y.f=S;if(z.highlightFormatting){Y.formatting="code-block"}Y.code=true;var X=w(Y);Y.code=false;return X}function w(aa){var Z=[];if(aa.formatting){Z.push(u);if(typeof aa.formatting==="string"){aa.formatting=[aa.formatting]}for(var X=0;X=aa.quote){Z.push(u+"-"+aa.formatting[X]+"-"+aa.quote)}else{Z.push("error")}}}}if(aa.taskOpen){Z.push("meta");return Z.length?Z.join(" "):null}if(aa.taskClosed){Z.push("property");return Z.length?Z.join(" "):null}if(aa.linkHref){Z.push(E,"url")}else{if(aa.strong){Z.push(A)}if(aa.em){Z.push(R)}if(aa.strikethrough){Z.push(n)}if(aa.linkText){Z.push(G)}if(aa.code){Z.push(g)}}if(aa.header){Z.push(i);Z.push(i+"-"+aa.header)}if(aa.quote){Z.push(r);if(!z.maxBlockquoteDepth||z.maxBlockquoteDepth>=aa.quote){Z.push(r+"-"+aa.quote)}else{Z.push(r+"-"+z.maxBlockquoteDepth)}}if(aa.list!==false){var Y=(aa.listDepth-1)%3;if(!Y){Z.push(Q)}else{if(Y===1){Z.push(N)}else{Z.push(M)}}}if(aa.trailingSpaceNewLine){Z.push("trailing-space-new-line")}else{if(aa.trailingSpace){Z.push("trailing-space-"+(aa.trailingSpace%2?"a":"b"))}}return Z.length?Z.join(" "):null}function o(Y,X){if(Y.match(B,true)){return w(X)}return undefined}function S(ac,ab){var am=ab.text(ac,ab);if(typeof am!=="undefined"){return am}if(ab.list){ab.list=null;return w(ab)}if(ab.taskList){var ai=ac.match(t,true)[1]!=="x";if(ai){ab.taskOpen=true}else{ab.taskClosed=true}if(z.highlightFormatting){ab.formatting="task"}ab.taskList=false;return w(ab)}ab.taskOpen=false;ab.taskClosed=false;if(ab.header&&ac.match(/^#+$/,true)){if(z.highlightFormatting){ab.formatting="header"}return w(ab)}var X=ac.sol();var af=ac.next();if(af==="\\"){ac.next();if(z.highlightFormatting){var Z=w(ab);return Z?Z+" formatting-escape":"formatting-escape"}}if(ab.linkTitle){ab.linkTitle=false;var al=af;if(af==="("){al=")"}al=(al+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1");var Y="^\\s*(?:[^"+al+"\\\\]+|\\\\\\\\|\\\\.)"+al;if(ac.match(new RegExp(Y),true)){return E}}if(af==="`"){var ak=ab.formatting;if(z.highlightFormatting){ab.formatting="code"}var ag=w(ab);var ah=ac.pos;ac.eatWhile("`");var an=1+ac.pos-ah;if(!ab.code){k=an;ab.code=true;return w(ab)}else{if(an===k){ab.code=false;return ag}ab.formatting=ak;return w(ab)}}else{if(ab.code){return w(ab)}}if(af==="!"&&ac.match(/\[[^\]]*\] ?(?:\(|\[)/,false)){ac.match(/\[[^\]]*\]/);ab.inline=ab.f=x;return h}if(af==="["&&ac.match(/.*\](\(.*\)| ?\[.*\])/,false)){ab.linkText=true;if(z.highlightFormatting){ab.formatting="link"}return w(ab)}if(af==="]"&&ab.linkText&&ac.match(/\(.*\)| ?\[.*\]/,false)){if(z.highlightFormatting){ab.formatting="link"}var Z=w(ab);ab.linkText=false;ab.inline=ab.f=x;return Z}if(af==="<"&&ac.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,false)){ab.f=ab.inline=L;if(z.highlightFormatting){ab.formatting="link"}var Z=w(ab);if(Z){Z+=" "}else{Z=""}return Z+q}if(af==="<"&&ac.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,false)){ab.f=ab.inline=L;if(z.highlightFormatting){ab.formatting="link"}var Z=w(ab);if(Z){Z+=" "}else{Z=""}return Z+m}if(af==="<"&&ac.match(/^(!--|\w)/,false)){var aa=ac.string.indexOf(">",ac.pos);if(aa!=-1){var aj=ac.string.substring(ac.start,aa);if(/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(aj)){ab.md_inside=true}}ac.backUp(1);ab.htmlState=a.startState(j);return D(ac,ab,s)}if(af==="<"&&ac.match(/^\/\w*?>/)){ab.md_inside=false;return"tag"}var ae=false;if(!z.underscoresBreakWords){if(af==="_"&&ac.peek()!=="_"&&ac.match(/(\w)/,false)){var ad=ac.pos-2;if(ad>=0){var ao=ac.string.charAt(ad);if(ao!=="_"&&ao.match(/(\w)/,false)){ae=true}}}}if(af==="*"||(af==="_"&&!ae)){if(X&&ac.peek()===" "){}else{if(ab.strong===af&&ac.eat(af)){if(z.highlightFormatting){ab.formatting="strong"}var ag=w(ab);ab.strong=false;return ag}else{if(!ab.strong&&ac.eat(af)){ab.strong=af;if(z.highlightFormatting){ab.formatting="strong"}return w(ab)}else{if(ab.em===af){if(z.highlightFormatting){ab.formatting="em"}var ag=w(ab);ab.em=false;return ag}else{if(!ab.em){ab.em=af;if(z.highlightFormatting){ab.formatting="em"}return w(ab)}}}}}}else{if(af===" "){if(ac.eat("*")||ac.eat("_")){if(ac.peek()===" "){return w(ab)}else{ac.backUp(1)}}}}if(z.strikethrough){if(af==="~"&&ac.eatWhile(af)){if(ab.strikethrough){if(z.highlightFormatting){ab.formatting="strikethrough"}var ag=w(ab);ab.strikethrough=false;return ag}else{if(ac.match(/^[^\s]/,false)){ab.strikethrough=true;if(z.highlightFormatting){ab.formatting="strikethrough"}return w(ab)}}}else{if(af===" "){if(ac.match(/^~~/,true)){if(ac.peek()===" "){return w(ab)}else{ac.backUp(2)}}}}}if(af===" "){if(ac.match(/ +$/,false)){ab.trailingSpace++}else{if(ab.trailingSpace){ab.trailingSpaceNewLine=true}}}return w(ab)}function L(aa,Z){var Y=aa.next();if(Y===">"){Z.f=Z.inline=S;if(z.highlightFormatting){Z.formatting="link"}var X=w(Z);if(X){X+=" "}else{X=""}return X+q}aa.match(/^[^>]+/,true);return q}function x(Z,Y){if(Z.eatSpace()){return null}var X=Z.next();if(X==="("||X==="["){Y.f=Y.inline=K(X==="("?")":"]");if(z.highlightFormatting){Y.formatting="link-string"}Y.linkHref=true;return w(Y)}return"error"}function K(X){return function(ab,aa){var Z=ab.next();if(Z===X){aa.f=aa.inline=S;if(z.highlightFormatting){aa.formatting="link-string"}var Y=w(aa);aa.linkHref=false;return Y}if(ab.match(v(X),true)){ab.backUp(1)}aa.linkHref=true;return w(aa)}}function d(Y,X){if(Y.match(/^[^\]]*\]:/,false)){X.f=H;Y.next();if(z.highlightFormatting){X.formatting="link"}X.linkText=true;return w(X)}return U(Y,X,S)}function H(Z,Y){if(Z.match(/^\]:/,true)){Y.f=Y.inline=f;if(z.highlightFormatting){Y.formatting="link"}var X=w(Y);Y.linkText=false;return X}Z.match(/^[^\]]+/,true);return G}function f(Y,X){if(Y.eatSpace()){return null}Y.match(/^[^\s]+/,true);if(Y.peek()===undefined){X.linkTitle=true}else{Y.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/,true)}X.f=X.inline=S;return E+" url"}var V=[];function v(X){if(!V[X]){X=(X+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1");V[X]=new RegExp("^(?:[^\\\\]|\\\\.)*?("+X+")")}return V[X]}var l={startState:function(){return{f:J,prevLineHasContent:false,thisLineHasContent:false,block:J,htmlState:null,indentation:0,inline:S,text:o,formatting:false,linkText:false,linkHref:false,linkTitle:false,em:false,strong:false,header:0,hr:false,taskList:false,list:false,listDepth:0,quote:0,trailingSpace:0,trailingSpaceNewLine:false,strikethrough:false}},copyState:function(X){return{f:X.f,prevLineHasContent:X.prevLineHasContent,thisLineHasContent:X.thisLineHasContent,block:X.block,htmlState:X.htmlState&&a.copyState(j,X.htmlState),indentation:X.indentation,localMode:X.localMode,localState:X.localMode?a.copyState(X.localMode,X.localState):null,inline:X.inline,text:X.text,formatting:false,linkTitle:X.linkTitle,em:X.em,strong:X.strong,strikethrough:X.strikethrough,header:X.header,hr:X.hr,taskList:X.taskList,list:X.list,listDepth:X.listDepth,quote:X.quote,indentedCode:X.indentedCode,trailingSpace:X.trailingSpace,trailingSpaceNewLine:X.trailingSpaceNewLine,md_inside:X.md_inside}},token:function(ab,aa){aa.formatting=false;if(ab.sol()){var X=!!aa.header||aa.hr;aa.header=0;aa.hr=false;if(ab.match(/^\s*$/,true)||X){aa.prevLineHasContent=false;c(aa);return X?this.token(ab,aa):null}else{aa.prevLineHasContent=aa.thisLineHasContent;aa.thisLineHasContent=true}aa.taskList=false;aa.code=false;aa.trailingSpace=0;aa.trailingSpaceNewLine=false;aa.f=aa.block;var Y=ab.match(/^\s*/,true)[0].replace(/\t/g," ").length;var ac=Math.floor((Y-aa.indentation)/4)*4;if(ac>4){ac=4}var Z=aa.indentation+ac;aa.indentationDiff=Z-aa.indentation;aa.indentation=Z;if(Y>0){return null}}return aa.f(ab,aa)},innerMode:function(X){if(X.block==s){return{state:X.htmlState,mode:j}}if(X.localState){return{state:X.localState,mode:X.localMode}}return{state:X,mode:l}},blankLine:c,getType:w,fold:"markdown"};return l},"xml");a.defineMIME("text/x-markdown","markdown")});(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"),require("../htmlmixed/htmlmixed"),require("../clike/clike"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror","../htmlmixed/htmlmixed","../clike/clike"],a)}else{a(CodeMirror)}}})(function(d){function f(m){var k={},l=m.split(" ");for(var j=0;j\w/,false)){l.tokenize=e([[["->",null]],[[/[\w]+/,"variable"]]],k,j)}return"variable-2"}var m=false;while(!n.eol()&&(m||j===false||(!n.match("{$",false)&&!n.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|\$\{)/,false)))){if(!m&&n.match(k)){l.tokenize=null;l.tokStack.pop();l.tokStack.pop();break}m=n.next()=="\\"&&!m}return"string"}var h="abstract and array as break case catch class clone const continue declare default do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global goto if implements interface instanceof namespace new or private protected public static switch throw trait try use var while xor die echo empty exit eval include include_once isset list require require_once return print unset __halt_compiler self static parent yield insteadof finally";var i="true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__";var a="func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count";d.registerHelper("hintWords","php",[h,i,a].join(" ").split(" "));d.registerHelper("wordChars","php",/[\w$]/);var g={name:"clike",helperType:"php",keywords:f(h),blockKeywords:f("catch do else elseif for foreach if switch try while finally"),defKeywords:f("class function interface namespace trait"),atoms:f(i),builtin:f(a),multiLineStrings:true,hooks:{"$":function(j){j.eatWhile(/[\w\$_]/);return"variable-2"},"<":function(m,k){if(m.match(/<",false)){j.next()}return"comment"},"/":function(j){if(j.eat("/")){while(!j.eol()&&!j.match("?>",false)){j.next()}return"comment"}return false},'"':function(j,k){(k.tokStack||(k.tokStack=[])).push('"',0);k.tokenize=b('"');return"string"},"{":function(j,k){if(k.tokStack&&k.tokStack.length){k.tokStack[k.tokStack.length-1]++}return false},"}":function(j,k){if(k.tokStack&&k.tokStack.length>0&&!--k.tokStack[k.tokStack.length-1]){k.tokenize=b(k.tokStack[k.tokStack.length-2])}return false}}};d.defineMode("php",function(l,m){var n=d.getMode(l,"text/html");var j=d.getMode(l,g);function k(u,s){var r=s.curMode==j;if(u.sol()&&s.pending&&s.pending!='"'&&s.pending!="'"){s.pending=null}if(!r){if(u.match(/^<\?\w*/)){s.curMode=j;s.curState=s.php;return"meta"}if(s.pending=='"'||s.pending=="'"){while(!u.eol()&&u.next()!=s.pending){}var q="string"}else{if(s.pending&&u.pos/.test(t)){s.pending=o[0]}else{s.pending={end:u.pos,style:q}}u.backUp(t.length-p)}return q}else{if(r&&s.php.tokenize==null&&u.match("?>")){s.curMode=n;s.curState=s.html;return"meta"}else{return j.token(u,s.curState)}}}return{startState:function(){var o=d.startState(n),p=d.startState(j);return{html:o,php:p,curMode:m.startOpen?j:n,curState:m.startOpen?p:o,pending:null}},copyState:function(r){var p=r.html,q=d.copyState(n,p),t=r.php,o=d.copyState(j,t),s;if(r.curMode==n){s=q}else{s=o}return{html:q,php:o,curMode:r.curMode,curState:s,pending:r.pending}},token:k,indent:function(p,o){if((p.curMode!=j&&/^\s*<\//.test(o))||(p.curMode==j&&/^\?>/.test(o))){return n.indent(p.html,o)}return p.curMode.indent(p.curState,o)},blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",innerMode:function(o){return{state:o.curState,mode:o.curMode}}}},"htmlmixed","clike");d.defineMIME("application/x-httpd-php","php");d.defineMIME("application/x-httpd-php-open",{name:"php",startOpen:true});d.defineMIME("text/x-php",g)});(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror"],a)}else{a(CodeMirror)}}})(function(a){a.defineMode("sass",function(f){function p(q){return new RegExp("^"+q.join("|"))}var k=["true","false","null","auto"];var b=new RegExp("^"+k.join("|"));var i=["\\(","\\)","=",">","<","==",">=","<=","\\+","-","\\!=","/","\\*","%","and","or","not",";","\\{","\\}",":"];var n=p(i);var o=/^::?[a-zA-Z_][\w\-]*/;function m(s,r){var q=s.peek();if(q===")"){s.next();r.tokenizer=g;return"operator"}else{if(q==="("){s.next();s.eatSpace();return"operator"}else{if(q==="'"||q==='"'){r.tokenizer=h(s.next());return"string"}else{r.tokenizer=h(")",false);return"string"}}}}function l(q,r){return function(t,s){if(t.sol()&&t.indentation()<=q){s.tokenizer=g;return g(t,s)}if(r&&t.skipTo("*/")){t.next();t.next();s.tokenizer=g}else{t.skipToEnd()}return"comment"}}function h(q,s){if(s==null){s=true}function r(x,u){var w=x.next();var t=x.peek();var y=x.string.charAt(x.pos-2);var v=((w!=="\\"&&t===q)||(w===q&&y!=="\\"));if(v){if(w!==q&&s){x.next()}u.tokenizer=g;return"string"}else{if(w==="#"&&t==="{"){u.tokenizer=d(r);x.next();return"operator"}else{return"string"}}}return r}function d(q){return function(s,r){if(s.peek()==="}"){s.next();r.tokenizer=q;return"operator"}else{return g(s,r)}}}function e(r){if(r.indentCount==0){r.indentCount++;var s=r.scopes[0].offset;var q=s+f.indentUnit;r.scopes.unshift({offset:q})}}function j(q){if(q.scopes.length==1){return}q.scopes.shift()}function g(s,r){var q=s.peek();if(s.match("/*")){r.tokenizer=l(s.indentation(),true);return r.tokenizer(s,r)}if(s.match("//")){r.tokenizer=l(s.indentation(),false);return r.tokenizer(s,r)}if(s.match("#{")){r.tokenizer=d(g);return"operator"}if(q==='"'||q==="'"){s.next();r.tokenizer=h(q);return"string"}if(!r.cursorHalf){if(q==="."){s.next();if(s.match(/^[\w-]+/)){e(r);return"atom"}else{if(s.peek()==="#"){e(r);return"atom"}}}if(q==="#"){s.next();if(s.match(/^[\w-]+/)){e(r);return"atom"}if(s.peek()==="#"){e(r);return"atom"}}if(q==="$"){s.next();s.eatWhile(/[\w-]/);return"variable-2"}if(s.match(/^-?[0-9\.]+/)){return"number"}if(s.match(/^(px|em|in)\b/)){return"unit"}if(s.match(b)){return"keyword"}if(s.match(/^url/)&&s.peek()==="("){r.tokenizer=m;return"atom"}if(q==="="){if(s.match(/^=[\w-]+/)){e(r);return"meta"}}if(q==="+"){if(s.match(/^\+[\w-]+/)){return"variable-3"}}if(q==="@"){if(s.match(/@extend/)){if(!s.match(/\s*[\w]/)){j(r)}}}if(s.match(/^@(else if|if|media|else|for|each|while|mixin|function)/)){e(r);return"meta"}if(q==="@"){s.next();s.eatWhile(/[\w-]/);return"meta"}if(s.eatWhile(/[\w-]/)){if(s.match(/ *: *[\w-\+\$#!\("']/,false)){return"property"}else{if(s.match(/ *:/,false)){e(r);r.cursorHalf=1;return"atom"}else{if(s.match(/ *,/,false)){return"atom"}else{e(r);return"atom"}}}}if(q===":"){if(s.match(o)){return"keyword"}s.next();r.cursorHalf=1;return"operator"}}else{if(q==="#"){s.next();if(s.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/)){if(!s.peek()){r.cursorHalf=0}return"number"}}if(s.match(/^-?[0-9\.]+/)){if(!s.peek()){r.cursorHalf=0}return"number"}if(s.match(/^(px|em|in)\b/)){if(!s.peek()){r.cursorHalf=0}return"unit"}if(s.match(b)){if(!s.peek()){r.cursorHalf=0}return"keyword"}if(s.match(/^url/)&&s.peek()==="("){r.tokenizer=m;if(!s.peek()){r.cursorHalf=0}return"atom"}if(q==="$"){s.next();s.eatWhile(/[\w-]/);if(!s.peek()){r.cursorHalf=0}return"variable-3"}if(q==="!"){s.next();if(!s.peek()){r.cursorHalf=0}return s.match(/^[\w]+/)?"keyword":"operator"}if(s.match(n)){if(!s.peek()){r.cursorHalf=0}return"operator"}if(s.eatWhile(/[\w-]/)){if(!s.peek()){r.cursorHalf=0}return"attribute"}if(!s.peek()){r.cursorHalf=0;return null}}if(s.match(n)){return"operator"}s.next();return null}function c(x,r){if(x.sol()){r.indentCount=0}var s=r.tokenizer(x,r);var w=x.current();if(w==="@return"||w==="}"){j(r)}if(s!==null){var t=x.pos-w.length;var v=t+(f.indentUnit*r.indentCount);var q=[];for(var u=0;u!?|~^]/,b=/^[:\[\(\{]/,f=["true","false","null","empty","defined","divisibleby","divisible by","even","odd","iterable","sameas","same as"],e=/^(\d[+\-\*\/])?\d+(\.\d+)?/;d=new RegExp("(("+d.join(")|(")+"))\\b");f=new RegExp("(("+f.join(")|(")+"))\\b");function g(j,i){var h=j.peek();if(i.incomment){if(!j.skipTo("#}")){j.skipToEnd()}else{j.eatWhile(/\#|}/);i.incomment=false}return"comment"}else{if(i.intag){if(i.operator){i.operator=false;if(j.match(f)){return"atom"}if(j.match(e)){return"number"}}if(i.sign){i.sign=false;if(j.match(f)){return"atom"}if(j.match(e)){return"number"}}if(i.instring){if(h==i.instring){i.instring=false}j.next();return"string"}else{if(h=="'"||h=='"'){i.instring=h;j.next();return"string"}else{if(j.match(i.intag+"}")||j.eat("-")&&j.match(i.intag+"}")){i.intag=false;return"tag"}else{if(j.match(c)){i.operator=true;return"operator"}else{if(j.match(b)){i.sign=true}else{if(j.eat(" ")||j.sol()){if(j.match(d)){return"keyword"}if(j.match(f)){return"atom"}if(j.match(e)){return"number"}if(j.sol()){j.next()}}else{j.next()}}}}}}return"variable"}else{if(j.eat("{")){if(h=j.eat("#")){i.incomment=true;if(!j.skipTo("#}")){j.skipToEnd()}else{j.eatWhile(/\#|}/);i.incomment=false}return"comment"}else{if(h=j.eat(/\{|%/)){i.intag=h;if(h=="{"){i.intag="}"}j.eat("-");return"tag"}}}}}j.next()}return{startState:function(){return{}},token:function(i,h){return g(i,h)}}});a.defineMIME("text/x-twig","twig")});(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror"],a)}else{a(CodeMirror)}}})(function(a){a.defineMode("xml",function(y,k){var p=y.indentUnit;var x=k.multilineTagIndentFactor||1;var d=k.multilineTagIndentPastTag;if(d==null){d=true}var w=k.htmlMode?{autoSelfClosers:{area:true,base:true,br:true,col:true,command:true,embed:true,frame:true,hr:true,img:true,input:true,keygen:true,link:true,meta:true,param:true,source:true,track:true,wbr:true,menuitem:true},implicitlyClosed:{dd:true,li:true,optgroup:true,option:true,p:true,rp:true,rt:true,tbody:true,td:true,tfoot:true,th:true,tr:true},contextGrabbers:{dd:{dd:true,dt:true},dt:{dd:true,dt:true},li:{li:true},option:{option:true,optgroup:true},optgroup:{optgroup:true},p:{address:true,article:true,aside:true,blockquote:true,dir:true,div:true,dl:true,fieldset:true,footer:true,form:true,h1:true,h2:true,h3:true,h4:true,h5:true,h6:true,header:true,hgroup:true,hr:true,menu:true,nav:true,ol:true,p:true,pre:true,section:true,table:true,ul:true},rp:{rp:true,rt:true},rt:{rp:true,rt:true},tbody:{tbody:true,tfoot:true},td:{td:true,th:true},tfoot:{tbody:true},th:{td:true,th:true},thead:{tbody:true,tfoot:true},tr:{tr:true}},doNotIndent:{pre:true},allowUnquoted:true,allowMissing:true,caseFold:true}:{autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:false,allowMissing:false,caseFold:false};var c=k.alignCDATA;var f,g;function n(F,E){function C(G){E.tokenize=G;return G(F,E)}var D=F.next();if(D=="<"){if(F.eat("!")){if(F.eat("[")){if(F.match("CDATA[")){return C(v("atom","]]>"))}else{return null}}else{if(F.match("--")){return C(v("comment","-->"))}else{if(F.match("DOCTYPE",true,true)){F.eatWhile(/[\w\._\-]/);return C(z(1))}else{return null}}}}else{if(F.eat("?")){F.eatWhile(/[\w\._\-]/);E.tokenize=v("meta","?>");return"meta"}else{f=F.eat("/")?"closeTag":"openTag";E.tokenize=m;return"tag bracket"}}}else{if(D=="&"){var B;if(F.eat("#")){if(F.eat("x")){B=F.eatWhile(/[a-fA-F\d]/)&&F.eat(";")}else{B=F.eatWhile(/[\d]/)&&F.eat(";")}}else{B=F.eatWhile(/[\w\.\-:]/)&&F.eat(";")}return B?"atom":"error"}else{F.eatWhile(/[^&<]/);return null}}}n.isInText=true;function m(E,D){var C=E.next();if(C==">"||(C=="/"&&E.eat(">"))){D.tokenize=n;f=C==">"?"endTag":"selfcloseTag";return"tag bracket"}else{if(C=="="){f="equals";return null}else{if(C=="<"){D.tokenize=n;D.state=l;D.tagName=D.tagStart=null;var B=D.tokenize(E,D);return B?B+" tag error":"tag error"}else{if(/[\'\"]/.test(C)){D.tokenize=j(C);D.stringStartCol=E.column();return D.tokenize(E,D)}else{E.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/);return"word"}}}}}function j(B){var C=function(E,D){while(!E.eol()){if(E.next()==B){D.tokenize=m;break}}return"string"};C.isInAttribute=true;return C}function v(C,B){return function(E,D){while(!E.eol()){if(E.match(B)){D.tokenize=n;break}E.next()}return C}}function z(B){return function(E,D){var C;while((C=E.next())!=null){if(C=="<"){D.tokenize=z(B+1);return D.tokenize(E,D)}else{if(C==">"){if(B==1){D.tokenize=n;break}else{D.tokenize=z(B-1);return D.tokenize(E,D)}}}}return"meta"}}function r(C,B,D){this.prev=C.context;this.tagName=B;this.indent=C.indented;this.startOfLine=D;if(w.doNotIndent.hasOwnProperty(B)||(C.context&&C.context.noIndent)){this.noIndent=true}}function u(B){if(B.context){B.context=B.context.prev}}function q(D,C){var B;while(true){if(!D.context){return}B=D.context.tagName;if(!w.contextGrabbers.hasOwnProperty(B)||!w.contextGrabbers[B].hasOwnProperty(C)){return}u(D)}}function l(B,D,C){if(B=="openTag"){C.tagStart=D.column();return b}else{if(B=="closeTag"){return t}else{return l}}}function b(B,D,C){if(B=="word"){C.tagName=D.current();g="tag";return e}else{g="error";return b}}function t(C,E,D){if(C=="word"){var B=E.current();if(D.context&&D.context.tagName!=B&&w.implicitlyClosed.hasOwnProperty(D.context.tagName)){u(D)}if(D.context&&D.context.tagName==B){g="tag";return s}else{g="tag error";return A}}else{g="error";return A}}function s(C,B,D){if(C!="endTag"){g="error";return s}u(D);return l}function A(B,D,C){g="error";return s(B,D,C)}function e(E,C,F){if(E=="word"){g="attribute";return i}else{if(E=="endTag"||E=="selfcloseTag"){var D=F.tagName,B=F.tagStart;F.tagName=F.tagStart=null;if(E=="selfcloseTag"||w.autoSelfClosers.hasOwnProperty(D)){q(F,D)}else{q(F,D);F.context=new r(F,D,B==F.indented)}return l}}g="error";return e}function i(B,D,C){if(B=="equals"){return o}if(!w.allowMissing){g="error"}return e(B,D,C)}function o(B,D,C){if(B=="string"){return h}if(B=="word"&&w.allowUnquoted){g="string";return e}g="error";return e(B,D,C)}function h(B,D,C){if(B=="string"){return h}return e(B,D,C)}return{startState:function(){return{tokenize:n,state:l,indented:0,tagName:null,tagStart:null,context:null}},token:function(D,C){if(!C.tagName&&D.sol()){C.indented=D.indentation()}if(D.eatSpace()){return null}f=null;var B=C.tokenize(D,C);if((B||f)&&B!="comment"){g=null;C.state=C.state(f||B,D,C);if(g){B=g=="error"?B+" error":g}}return B},indent:function(G,C,F){var E=G.context;if(G.tokenize.isInAttribute){if(G.tagStart==G.indented){return G.stringStartCol+1}else{return G.indented+p}}if(E&&E.noIndent){return a.Pass}if(G.tokenize!=m&&G.tokenize!=n){return F?F.match(/^(\s*)/)[0].length:0}if(G.tagName){if(d){return G.tagStart+G.tagName.length+2}else{return G.tagStart+p*x}}if(c&&/$/,blockCommentStart:"",configuration:k.htmlMode?"html":"xml",helperType:k.htmlMode?"html":"xml"}});a.defineMIME("text/xml","xml");a.defineMIME("application/xml","xml");if(!a.mimeModes.hasOwnProperty("text/html")){a.defineMIME("text/html",{name:"xml",htmlMode:true})}});(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror"],a)}else{a(CodeMirror)}}})(function(a){a.defineMode("yaml",function(){var b=["true","false","on","off","yes","no"];var c=new RegExp("\\b(("+b.join(")|(")+"))$","i");return{token:function(g,f){var e=g.peek();var d=f.escaped;f.escaped=false;if(e=="#"&&(g.pos==0||/\s/.test(g.string.charAt(g.pos-1)))){g.skipToEnd();return"comment"}if(g.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/)){return"string"}if(f.literal&&g.indentation()>f.keyCol){g.skipToEnd();return"string"}else{if(f.literal){f.literal=false}}if(g.sol()){f.keyCol=0;f.pair=false;f.pairStart=false;if(g.match(/---/)){return"def"}if(g.match(/\.\.\./)){return"def"}if(g.match(/\s*-\s+/)){return"meta"}}if(g.match(/^(\{|\}|\[|\])/)){if(e=="{"){f.inlinePairs++}else{if(e=="}"){f.inlinePairs--}else{if(e=="["){f.inlineList++}else{f.inlineList--}}}return"meta"}if(f.inlineList>0&&!d&&e==","){g.next();return"meta"}if(f.inlinePairs>0&&!d&&e==","){f.keyCol=0;f.pair=false;f.pairStart=false;g.next();return"meta"}if(f.pairStart){if(g.match(/^\s*(\||\>)\s*/)){f.literal=true;return"meta"}if(g.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i)){return"variable-2"}if(f.inlinePairs==0&&g.match(/^\s*-?[0-9\.\,]+\s?$/)){return"number"}if(f.inlinePairs>0&&g.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/)){return"number"}if(g.match(c)){return"keyword"}}if(!f.pair&&g.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)){f.pair=true;f.keyCol=g.indentation();return"atom"}if(f.pair&&g.match(/^:\s*/)){f.pairStart=true;return"meta"}f.pairStart=false;f.escaped=(e=="\\");g.next();return null},startState:function(){return{pair:false,pairStart:false,keyCol:0,inlinePairs:0,inlineList:0,literal:false,escaped:false}}}});a.defineMIME("text/x-yaml","yaml")});(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror"],a)}else{a(CodeMirror)}}})(function(b){var d=/^(\s*)(>[> ]*|[*+-]\s|(\d+)([.)]))(\s*)/,c=/^(\s*)(>[> ]*|[*+-]|(\d+)[.)])(\s*)$/,a=/[*+-]\s/;b.commands.newlineAndIndentContinueMarkdownList=function(q){if(q.getOption("disableInput")){return b.Pass}var g=q.listSelections(),k=[];for(var m=0;m")>=0?n[2]:(parseInt(n[3],10)+1)+n[4];k[m]="\n"+j+e+f}}q.replaceSelections(k)}});(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror"],a)}else{a(CodeMirror)}}})(function(a){a.overlayMode=function(c,b,d){return{startState:function(){return{base:a.startState(c),overlay:a.startState(b),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(e){return{base:a.copyState(c,e.base),overlay:a.copyState(b,e.overlay),basePos:e.basePos,baseCur:null,overlayPos:e.overlayPos,overlayCur:null}},token:function(f,e){if(f!=e.streamSeen||Math.min(e.basePos,e.overlayPos)").addClass("k-animation-container").css({width:o,height:s,marginLeft:r.left*(p?1:-1),paddingLeft:r.left,paddingRight:r.right,paddingBottom:r.bottom})),i&&t.css({width:"100%",height:"100%",boxSizing:"border-box",mozBoxSizing:"border-box",webkitBoxSizing:"border-box"})),f.msie&&kt.floor(f.version)<=7&&(t.css({zoom:1}),t.children(".k-menu").width(t.width())),t.parent()}function l(e){var t=1,n=arguments.length;for(t=1;n>t;t++)u(e,arguments[t]);return e}function u(e,t){var n,i,r,o,a,s=gt.data.ObservableArray,l=gt.data.LazyObservableArray,c=gt.data.DataSource,d=gt.data.HierarchicalDataSource;for(n in t)i=t[n],r=typeof i,o=r===At&&null!==i?i.constructor:null,o&&o!==Array&&o!==s&&o!==l&&o!==c&&o!==d?i instanceof Date?e[n]=new Date(i.getTime()):F(i.clone)?e[n]=i.clone():(a=e[n],e[n]=typeof a===At?a||{}:{},u(e[n],i)):r!==Pt&&(e[n]=i);return e}function c(e,t,i){for(var r in t)if(t.hasOwnProperty(r)&&t[r].test(e))return r;return i!==n?i:e}function d(e){return e.replace(/([a-z][A-Z])/g,function(e){return e.charAt(0)+"-"+e.charAt(1).toLowerCase()})}function f(e){return e.replace(/\-(\w)/g,function(e,t){return t.toUpperCase()})}function p(t,n){var i,r={};return document.defaultView&&document.defaultView.getComputedStyle?(i=document.defaultView.getComputedStyle(t,""),n&&e.each(n,function(e,t){r[t]=i.getPropertyValue(t)})):(i=t.currentStyle,n&&e.each(n,function(e,t){r[t]=i[f(t)]})),gt.size(r)||(r=i),r}function m(e){return"visible"!=p(e,["overflow"]).overflow}function h(e){var t,n=0;for(t in e)e.hasOwnProperty(t)&&"toJSON"!=t&&n++;return n}function g(e,n,i){n||(n="offset");var r=e[n]();return Tt.browser.msie&&(Tt.pointers||Tt.msPointers)&&!i&&(r.top-=t.pageYOffset-document.documentElement.scrollTop,r.left-=t.pageXOffset-document.documentElement.scrollLeft),r}function v(e){var t={};return _t("string"==typeof e?e.split(" "):e,function(e){t[e]=this}),t}function _(e){return new gt.effects.Element(e)}function y(e,t,n,i){return typeof e===zt&&(F(t)&&(i=t,t=400,n=!1),F(n)&&(i=n,n=!1),typeof t===Et&&(n=t,t=400),e={effects:e,duration:t,reverse:n,complete:i}),vt({effects:{},duration:400,reverse:!1,init:bt,teardown:bt,hide:!1},e,{completeCallback:e.complete,complete:bt})}function w(t,n,i,r,o){for(var a,s=0,l=t.length;l>s;s++)a=e(t[s]),a.queue(function(){L.promise(a,y(n,i,r,o))});return t}function b(e,t,n,i){return t&&(t=t.split(" "),_t(t,function(t,n){e.toggleClass(n,i)})),e}function k(e){return(""+e).replace(B,"&").replace($,"<").replace(J,">").replace(j,""").replace(q,"'")}function x(e,t){var i;return 0===t.indexOf("data")&&(t=t.substring(4),t=t.charAt(0).toLowerCase()+t.substring(1)),t=t.replace(it,"-$1"),i=e.getAttribute("data-"+gt.ns+t),null===i?i=n:"null"===i?i=null:"true"===i?i=!0:"false"===i?i=!1:Ct.test(i)?i=parseFloat(i):tt.test(i)&&!nt.test(i)&&(i=Function("return ("+i+")")()),i}function T(t,i){var r,o,a={};for(r in i)o=x(t,r),o!==n&&(et.test(r)&&(o=gt.template(e("#"+o).html())),a[r]=o);return a}function M(t,n){return e.contains(t,n)?-1:1}function D(){var t=e(this);return e.inArray(t.attr("data-"+gt.ns+"role"),["slider","rangeslider"])>-1||t.is(":visible")}function S(e,t){var n=e.nodeName.toLowerCase();return(/input|select|textarea|button|object/.test(n)?!e.disabled:"a"===n?e.href||t:t)&&C(e)}function C(t){return!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")||e.expr.filters.hidden(this)}).length}function O(e,t){return new O.fn.init(e,t)}var z,F,A,H,E,P,N,I,V,W,R,Y,U,L,B,$,j,q,J,G,K,Q,Z,X,et,tt,nt,it,rt,ot,at,st,lt,ut,ct,dt,ft,pt,mt,ht,gt=t.kendo=t.kendo||{cultures:{}},vt=e.extend,_t=e.each,yt=e.isArray,wt=e.proxy,bt=e.noop,kt=Math,xt=t.JSON||{},Tt={},Mt=/%/,Dt=/\{(\d+)(:[^\}]+)?\}/g,St=/(\d+(?:\.?)\d*)px\s*(\d+(?:\.?)\d*)px\s*(\d+(?:\.?)\d*)px\s*(\d+)?/i,Ct=/^(\+|-?)\d+(\.?)\d*$/,Ot="function",zt="string",Ft="number",At="object",Ht="null",Et="boolean",Pt="undefined",Nt={},It={},Vt=[].slice,Wt=t.Globalize;gt.version="$KENDO_VERSION",i.extend=function(e){var t,n,i=function(){},r=this,o=e&&e.init?e.init:function(){r.apply(this,arguments)};i.prototype=r.prototype,n=o.fn=o.prototype=new i;for(t in e)n[t]=null!=e[t]&&e[t].constructor===Object?vt(!0,{},i.prototype[t],e[t]):e[t];return n.constructor=o,o.extend=r.extend,o},i.prototype._initOptions=function(e){this.options=l({},this.options,e)},F=gt.isFunction=function(e){return"function"==typeof e},A=function(){this._defaultPrevented=!0},H=function(){return this._defaultPrevented===!0},E=i.extend({init:function(){this._events={}},bind:function(e,t,i){var r,o,a,s,l,u=this,c=typeof e===zt?[e]:e,d=typeof t===Ot;if(t===n){for(r in e)u.bind(r,e[r]);return u}for(r=0,o=c.length;o>r;r++)e=c[r],s=d?t:t[e],s&&(i&&(a=s,s=function(){u.unbind(e,s),a.apply(u,arguments)},s.original=a),l=u._events[e]=u._events[e]||[],l.push(s));return u},one:function(e,t){return this.bind(e,t,!0)},first:function(e,t){var n,i,r,o,a=this,s=typeof e===zt?[e]:e,l=typeof t===Ot;for(n=0,i=s.length;i>n;n++)e=s[n],r=l?t:t[e],r&&(o=a._events[e]=a._events[e]||[],o.unshift(r));return a},trigger:function(e,t){var n,i,r=this,o=r._events[e];if(o){for(t=t||{},t.sender=r,t._defaultPrevented=!1,t.preventDefault=A,t.isDefaultPrevented=H,o=o.slice(),n=0,i=o.length;i>n;n++)o[n].call(r,t);return t._defaultPrevented===!0}return!1},unbind:function(e,t){var i,r=this,o=r._events[e];if(e===n)r._events={};else if(o)if(t)for(i=o.length-1;i>=0;i--)(o[i]===t||o[i].original===t)&&o.splice(i,1);else r._events[e]=[];return r}}),P=/^\w+/,N=/\$\{([^}]*)\}/g,I=/\\\}/g,V=/__CURLY__/g,W=/\\#/g,R=/__SHARP__/g,Y=["","0","00","000","0000"],z={paramName:"data",useWithBlock:!0,render:function(e,t){var n,i,r="";for(n=0,i=t.length;i>n;n++)r+=e(t[n]);return r},compile:function(e,t){var n,i,o,a=vt({},this,t),s=a.paramName,l=s.match(P)[0],u=a.useWithBlock,c="var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;";if(F(e))return e;for(c+=u?"with("+s+"){":"",c+="$kendoOutput=",i=e.replace(I,"__CURLY__").replace(N,"#=$kendoHtmlEncode($1)#").replace(V,"}").replace(W,"__SHARP__").split("#"),o=0;i.length>o;o++)c+=r(i[o],o%2===0);c+=u?";}":";",c+="return $kendoOutput;",c=c.replace(R,"#");try{return n=Function(l,c),n._slotCount=Math.floor(i.length/2),n}catch(d){throw Error(gt.format("Invalid template:'{0}' Generated code:'{1}'",e,c))}}},function(){function e(e){return a.lastIndex=0,a.test(e)?'"'+e.replace(a,function(e){var t=s[e];return typeof t===zt?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+e+'"'}function t(o,a){var s,u,c,d,f,p,m=n,h=a[o];if(h&&typeof h===At&&typeof h.toJSON===Ot&&(h=h.toJSON(o)),typeof r===Ot&&(h=r.call(a,o,h)),p=typeof h,p===zt)return e(h);if(p===Ft)return isFinite(h)?h+"":Ht;if(p===Et||p===Ht)return h+"";if(p===At){if(!h)return Ht;if(n+=i,f=[],"[object Array]"===l.apply(h)){for(d=h.length,s=0;d>s;s++)f[s]=t(s,h)||Ht;return c=0===f.length?"[]":n?"[\n"+n+f.join(",\n"+n)+"\n"+m+"]":"["+f.join(",")+"]",n=m,c}if(r&&typeof r===At)for(d=r.length,s=0;d>s;s++)typeof r[s]===zt&&(u=r[s],c=t(u,h),c&&f.push(e(u)+(n?": ":":")+c));else for(u in h)Object.hasOwnProperty.call(h,u)&&(c=t(u,h),c&&f.push(e(u)+(n?": ":":")+c));return c=0===f.length?"{}":n?"{\n"+n+f.join(",\n"+n)+"\n"+m+"}":"{"+f.join(",")+"}",n=m,c}}var n,i,r,a=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,s={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},l={}.toString;typeof Date.prototype.toJSON!==Ot&&(Date.prototype.toJSON=function(){var e=this;return isFinite(e.valueOf())?o(e.getUTCFullYear(),4)+"-"+o(e.getUTCMonth()+1)+"-"+o(e.getUTCDate())+"T"+o(e.getUTCHours())+":"+o(e.getUTCMinutes())+":"+o(e.getUTCSeconds())+"Z":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()}),typeof xt.stringify!==Ot&&(xt.stringify=function(e,o,a){var s;if(n="",i="",typeof a===Ft)for(s=0;a>s;s+=1)i+=" ";else typeof a===zt&&(i=a);if(r=o,o&&typeof o!==Ot&&(typeof o!==At||typeof o.length!==Ft))throw Error("JSON.stringify");return t("",{"":e})})}(),function(){function t(e){if(e){if(e.numberFormat)return e;if(typeof e===zt){var t=gt.cultures;return t[e]||t[e.split("-")[0]]||null}return null}return null}function i(e){return e&&(e=t(e)),e||gt.cultures.current}function r(e){e.groupSizes=e.groupSize,e.percent.groupSizes=e.percent.groupSize,e.currency.groupSizes=e.currency.groupSize}function a(e,t,r){r=i(r);var a=r.calendars.standard,s=a.days,l=a.months;return t=a.patterns[t]||t,t.replace(c,function(t){var i,r,u;return"d"===t?r=e.getDate():"dd"===t?r=o(e.getDate()):"ddd"===t?r=s.namesAbbr[e.getDay()]:"dddd"===t?r=s.names[e.getDay()]:"M"===t?r=e.getMonth()+1:"MM"===t?r=o(e.getMonth()+1):"MMM"===t?r=l.namesAbbr[e.getMonth()]:"MMMM"===t?r=l.names[e.getMonth()]:"yy"===t?r=o(e.getFullYear()%100):"yyyy"===t?r=o(e.getFullYear(),4):"h"===t?r=e.getHours()%12||12:"hh"===t?r=o(e.getHours()%12||12):"H"===t?r=e.getHours():"HH"===t?r=o(e.getHours()):"m"===t?r=e.getMinutes():"mm"===t?r=o(e.getMinutes()):"s"===t?r=e.getSeconds():"ss"===t?r=o(e.getSeconds()):"f"===t?r=kt.floor(e.getMilliseconds()/100):"ff"===t?(r=e.getMilliseconds(),r>99&&(r=kt.floor(r/10)),r=o(r)):"fff"===t?r=o(e.getMilliseconds(),3):"tt"===t?r=e.getHours()<12?a.AM[0]:a.PM[0]:"zzz"===t?(i=e.getTimezoneOffset(),u=0>i,r=(""+kt.abs(i/60)).split(".")[0],i=kt.abs(i)-60*r,r=(u?"+":"-")+o(r),r+=":"+o(i)):("zz"===t||"z"===t)&&(r=e.getTimezoneOffset()/60,u=0>r,r=(""+kt.abs(r)).split(".")[0],r=(u?"+":"-")+("zz"===t?o(r):r)),r!==n?r:t.slice(1,t.length-1)})}function s(e,t,r){r=i(r);var o,a,s,u,c,w,b,k,x,T,M,D,S,C,O,z,F,A,H,E,P,N,I,V=r.numberFormat,W=V.groupSize[0],R=V[g],Y=V[h],U=V.decimals,L=V.pattern[0],B=[],$=0>e,j=m,q=m,J=-1;if(e===n)return m;if(!isFinite(e))return e;if(!t)return r.name.length?e.toLocaleString():""+e;if(c=d.exec(t)){if(t=c[1].toLowerCase(),a="c"===t,s="p"===t,(a||s)&&(V=a?V.currency:V.percent,W=V.groupSize[0],R=V[g],Y=V[h],U=V.decimals,o=V.symbol,L=V.pattern[$?0:1]),u=c[2],u&&(U=+u),"e"===t)return u?e.toExponential(U):e.toExponential();if(s&&(e*=100),e=l(e,U),$=0>e,e=e.split(h),w=e[0],b=e[1],$&&(w=w.substring(1)),q=w,k=w.length,k>=W)for(q=m,T=0;k>T;T++)T>0&&(k-T)%W===0&&(q+=R),q+=w.charAt(T);if(b&&(q+=Y+b),"n"===t&&!$)return q;for(e=m,T=0,M=L.length;M>T;T++)D=L.charAt(T),e+="n"===D?q:"$"===D||"%"===D?o:D;return e}if($&&(e=-e),(t.indexOf("'")>-1||t.indexOf('"')>-1||t.indexOf("\\")>-1)&&(t=t.replace(f,function(e){var t=e.charAt(0).replace("\\",""),n=e.slice(1).replace(t,"");return B.push(n),y})),t=t.split(";"),$&&t[1])t=t[1],C=!0;else if(0===e){if(t=t[2]||t[0],-1==t.indexOf(v)&&-1==t.indexOf(_))return t}else t=t[0];if(E=t.indexOf("%"),P=t.indexOf("$"),s=-1!=E,a=-1!=P,s&&(e*=100),a&&"\\"===t[P-1]&&(t=t.split("\\").join(""),a=!1),(a||s)&&(V=a?V.currency:V.percent,W=V.groupSize[0],R=V[g],Y=V[h],U=V.decimals,o=V.symbol),S=t.indexOf(g)>-1,S&&(t=t.replace(p,m)),O=t.indexOf(h),M=t.length,-1!=O?(b=(""+e).split("e"),b=b[1]?l(e,Math.abs(b[1])):b[0],b=b.split(h)[1]||m,F=t.lastIndexOf(_)-O,z=t.lastIndexOf(v)-O,A=F>-1,H=z>-1,T=b.length,A||H||(t=t.substring(0,O)+t.substring(O+1),M=t.length,O=-1,T=0),A&&F>z?T=F:z>F&&(H&&T>z?T=z:A&&F>T&&(T=F)),T>-1&&(e=l(e,T))):e=l(e),z=t.indexOf(v),N=F=t.indexOf(_),J=-1==z&&-1!=F?F:-1!=z&&-1==F?z:z>F?F:z,z=t.lastIndexOf(v),F=t.lastIndexOf(_),I=-1==z&&-1!=F?F:-1!=z&&-1==F?z:z>F?z:F,J==M&&(I=J),-1!=J){if(q=(""+e).split(h),w=q[0],b=q[1]||m,k=w.length,x=b.length,$&&-1*e>=0&&($=!1),S)if(k===W&&O-N>k)w=R+w;else if(k>W){for(q=m,T=0;k>T;T++)T>0&&(k-T)%W===0&&(q+=R),q+=w.charAt(T);w=q}for(e=t.substring(0,J),$&&!C&&(e+="-"),T=J;M>T;T++){if(D=t.charAt(T),-1==O){if(k>I-T){e+=w;break}}else if(-1!=F&&T>F&&(j=m),k>=O-T&&O-T>-1&&(e+=w,T=O),O===T){e+=(b?Y:m)+b,T+=I-O+1;continue}D===_?(e+=D,j=D):D===v&&(e+=j)}if(I>=J&&(e+=t.substring(I+1)),a||s){for(q=m,T=0,M=e.length;M>T;T++)D=e.charAt(T),q+="$"===D||"%"===D?o:D;e=q}if(M=B.length)for(T=0;M>T;T++)e=e.replace(y,B[T])}return e}var l,u,c=/dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|"[^"]*"|'[^']*'/g,d=/^(n|c|p|e)(\d*)$/i,f=/(\\.)|(['][^']*[']?)|(["][^"]*["]?)/g,p=/\,/g,m="",h=".",g=",",v="#",_="0",y="??",w="en-US",b={}.toString;gt.cultures["en-US"]={name:w,numberFormat:{pattern:["-n"],decimals:2,",":",",".":".",groupSize:[3],percent:{pattern:["-n %","n %"],decimals:2,",":",",".":".",groupSize:[3],symbol:"%"},currency:{pattern:["($n)","$n"],decimals:2,",":",",".":".",groupSize:[3],symbol:"$"}},calendars:{standard:{days:{names:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],namesAbbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],namesShort:["Su","Mo","Tu","We","Th","Fr","Sa"]},months:{names:["January","February","March","April","May","June","July","August","September","October","November","December"],namesAbbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]},AM:["AM","am","AM"],PM:["PM","pm","PM"],patterns:{d:"M/d/yyyy",D:"dddd, MMMM dd, yyyy",F:"dddd, MMMM dd, yyyy h:mm:ss tt",g:"M/d/yyyy h:mm tt",G:"M/d/yyyy h:mm:ss tt",m:"MMMM dd",M:"MMMM dd",s:"yyyy'-'MM'-'ddTHH':'mm':'ss",t:"h:mm tt",T:"h:mm:ss tt",u:"yyyy'-'MM'-'dd HH':'mm':'ss'Z'",y:"MMMM, yyyy",Y:"MMMM, yyyy"},"/":"/",":":":",firstDay:0,twoDigitYearMax:2029}}},gt.culture=function(e){var i,o=gt.cultures;return e===n?o.current:(i=t(e)||o[w],i.calendar=i.calendars.standard,o.current=i,Wt&&!Wt.load&&r(i.numberFormat),n)},gt.findCulture=t,gt.getCulture=i,gt.culture(w),l=function(e,t){return t=t||0,e=(""+e).split("e"),e=Math.round(+(e[0]+"e"+(e[1]?+e[1]+t:t))),e=(""+e).split("e"),e=+(e[0]+"e"+(e[1]?+e[1]-t:-t)),e.toFixed(t)},u=function(e,t,i){if(t){if("[object Date]"===b.call(e))return a(e,t,i);if(typeof e===Ft)return s(e,t,i)}return e!==n?e:""},Wt&&!Wt.load&&(u=function(t,n,i){return e.isPlainObject(i)&&(i=i.name),Wt.format(t,n,i)}),gt.format=function(e){var t=arguments;return e.replace(Dt,function(e,n,i){var r=t[parseInt(n,10)+1];return u(r,i?i.substring(1):"")})},gt._extractFormat=function(e){return"{0:"===e.slice(0,3)&&(e=e.slice(3,e.length-1)),e},gt._activeElement=function(){try{return document.activeElement}catch(e){return document.documentElement.activeElement}},gt._round=l,gt.toString=u}(),function(){function t(e,t,n){return!(e>=t&&n>=e)}function i(e){return e.charAt(0)}function r(t){return e.map(t,i)}function o(e,t){t||23!==e.getHours()||e.setHours(e.getHours()+2)}function a(e){for(var t=0,n=e.length,i=[];n>t;t++)i[t]=(e[t]+"").toLowerCase();return i}function s(e){var t,n={};for(t in e)n[t]=a(e[t]);return n}function l(e,i,a){if(!e)return null;var l,u,c,d,m,h,g,_,y,w,b,k,x,T=function(e){for(var t=0;i[N]===e;)t++,N++;return t>0&&(N-=1),t},M=function(t){var n=v[t]||RegExp("^\\d{1,"+t+"}"),i=e.substr(I,t).match(n);return i?(i=i[0],I+=i.length,parseInt(i,10)):null},D=function(t,n){for(var i,r,o,a=0,s=t.length;s>a;a++)if(i=t[a],r=i.length,o=e.substr(I,r),n&&(o=o.toLowerCase()),o==i)return I+=r,a+1;return null},S=function(){var t=!1;return e.charAt(I)===i[N]&&(I++,t=!0),t},C=a.calendars.standard,O=null,z=null,F=null,A=null,H=null,E=null,P=null,N=0,I=0,V=!1,W=new Date,R=C.twoDigitYearMax||2029,Y=W.getFullYear();for(i||(i="d"),d=C.patterns[i],d&&(i=d),i=i.split(""),c=i.length;c>N;N++)if(l=i[N],V)"'"===l?V=!1:S();else if("d"===l){if(u=T("d"),C._lowerDays||(C._lowerDays=s(C.days)),F=3>u?M(2):D(C._lowerDays[3==u?"namesAbbr":"names"],!0),null===F||t(F,1,31))return null}else if("M"===l){if(u=T("M"),C._lowerMonths||(C._lowerMonths=s(C.months)),z=3>u?M(2):D(C._lowerMonths[3==u?"namesAbbr":"names"],!0),null===z||t(z,1,12))return null;z-=1}else if("y"===l){if(u=T("y"),O=M(u),null===O)return null;2==u&&("string"==typeof R&&(R=Y+parseInt(R,10)),O=Y-Y%100+O,O>R&&(O-=100))}else if("h"===l){if(T("h"),A=M(2),12==A&&(A=0),null===A||t(A,0,11))return null}else if("H"===l){if(T("H"),A=M(2),null===A||t(A,0,23))return null}else if("m"===l){if(T("m"),H=M(2),null===H||t(H,0,59))return null}else if("s"===l){if(T("s"),E=M(2),null===E||t(E,0,59))return null}else if("f"===l){if(u=T("f"),x=e.substr(I,u).match(v[3]),P=M(u),null!==P&&(x=x[0].length,3>x&&(P*=Math.pow(10,3-x)),u>3&&(P=parseInt((""+P).substring(0,3),10))),null===P||t(P,0,999))return null}else if("t"===l){if(u=T("t"),_=C.AM,y=C.PM,1===u&&(_=r(_),y=r(y)),m=D(y),!m&&!D(_))return null}else if("z"===l){if(h=!0,u=T("z"),"Z"===e.substr(I,1)){S();continue}if(g=e.substr(I,6).match(u>2?p:f),!g)return null;if(g=g[0].split(":"),w=g[0],b=g[1],!b&&w.length>3&&(I=w.length-2,b=w.substring(I),w=w.substring(0,I)),w=parseInt(w,10),t(w,-12,13))return null;if(u>2&&(b=parseInt(b,10),isNaN(b)||t(b,0,59)))return null}else if("'"===l)V=!0,S();else if(!S())return null;return k=null!==A||null!==H||E||null,null===O&&null===z&&null===F&&k?(O=Y,z=W.getMonth(),F=W.getDate()):(null===O&&(O=Y),null===F&&(F=1)),m&&12>A&&(A+=12),h?(w&&(A+=-w),b&&(H+=-b),e=new Date(Date.UTC(O,z,F,A,H,E,P))):(e=new Date(O,z,F,A,H,E,P),o(e,A)),100>O&&e.setFullYear(O),e.getDate()!==F&&h===n?null:e}function u(e){var t="-"===e.substr(0,1)?-1:1;return e=e.substring(1),e=60*parseInt(e.substr(0,2),10)+parseInt(e.substring(2),10),t*e}var c=/\u00A0/g,d=/[eE][\-+]?[0-9]+/,f=/[+|\-]\d{1,2}/,p=/[+|\-]\d{1,2}:?\d{2}/,m=/^\/Date\((.*?)\)\/$/,h=/[+-]\d*/,g=["G","g","d","F","D","y","m","T","t"],v={2:/^\d{1,2}/,3:/^\d{1,3}/,4:/^\d{4}/},_={}.toString;gt.parseDate=function(e,t,n){var i,r,o,a,s;if("[object Date]"===_.call(e))return e;if(i=0,r=null,e&&0===e.indexOf("/D")&&(r=m.exec(e)))return r=r[1],s=h.exec(r.substring(1)),r=new Date(parseInt(r,10)),s&&(s=u(s[0]),r=gt.timezone.apply(r,0),r=gt.timezone.convert(r,0,-1*s)),r;if(n=gt.getCulture(n),!t){for(t=[],a=n.calendar.patterns,o=g.length;o>i;i++)t[i]=a[g[i]];i=0,t=["yyyy/MM/dd HH:mm:ss","yyyy/MM/dd HH:mm","yyyy/MM/dd","ddd MMM dd yyyy HH:mm:ss","yyyy-MM-ddTHH:mm:ss.fffffffzzz","yyyy-MM-ddTHH:mm:ss.fffzzz","yyyy-MM-ddTHH:mm:sszzz","yyyy-MM-ddTHH:mm:ss.fffffff","yyyy-MM-ddTHH:mm:ss.fff","yyyy-MM-ddTHH:mmzzz","yyyy-MM-ddTHH:mmzz","yyyy-MM-ddTHH:mm:ss","yyyy-MM-ddTHH:mm","yyyy-MM-dd HH:mm:ss","yyyy-MM-dd HH:mm","yyyy-MM-dd","HH:mm:ss","HH:mm"].concat(t)}for(t=yt(t)?t:[t],o=t.length;o>i;i++)if(r=l(e,t[i],n))return r;return r},gt.parseInt=function(e,t){var n=gt.parseFloat(e,t);return n&&(n=0|n),n},gt.parseFloat=function(e,t,n){if(!e&&0!==e)return null;if(typeof e===Ft)return e;e=""+e,t=gt.getCulture(t);var i,r,o=t.numberFormat,a=o.percent,s=o.currency,l=s.symbol,u=a.symbol,f=e.indexOf("-");return d.test(e)?(e=parseFloat(e.replace(o["."],".")),isNaN(e)&&(e=null),e):f>0?null:(f=f>-1,e.indexOf(l)>-1||n&&n.toLowerCase().indexOf("c")>-1?(o=s,i=o.pattern[0].replace("$",l).split("n"),e.indexOf(i[0])>-1&&e.indexOf(i[1])>-1&&(e=e.replace(i[0],"").replace(i[1],""),f=!0)):e.indexOf(u)>-1&&(r=!0,o=a,l=u),e=e.replace("-","").replace(l,"").replace(c," ").split(o[","].replace(c," ")).join("").replace(o["."],"."),e=parseFloat(e),isNaN(e)?e=null:f&&(e*=-1),e&&r&&(e/=100),e)},Wt&&!Wt.load&&(gt.parseDate=function(e,t,n){return"[object Date]"===_.call(e)?e:Wt.parseDate(e,t,n)},gt.parseFloat=function(t,i){return typeof t===Ft?t:t===n||null===t?null:(e.isPlainObject(i)&&(i=i.name),t=Wt.parseFloat(t,i),isNaN(t)?null:t)})}(),function(){var i,r,o,a,s,l,u;Tt._scrollbar=n,Tt.scrollbar=function(e){if(isNaN(Tt._scrollbar)||e){var t,n=document.createElement("div");return n.style.cssText="overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block",n.innerHTML=" ",document.body.appendChild(n),Tt._scrollbar=t=n.offsetWidth-n.scrollWidth,document.body.removeChild(n),t}return Tt._scrollbar},Tt.isRtl=function(t){return e(t).closest(".k-rtl").length>0},i=document.createElement("table");try{i.innerHTML="",Tt.tbodyInnerHtml=!0}catch(d){Tt.tbodyInnerHtml=!1}Tt.touch="ontouchstart"in t,Tt.msPointers=t.MSPointerEvent,Tt.pointers=t.PointerEvent,r=Tt.transitions=!1,o=Tt.transforms=!1,a="HTMLElement"in t?HTMLElement.prototype:[],Tt.hasHW3D="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix||"MozPerspective"in document.documentElement.style||"msPerspective"in document.documentElement.style,_t(["Moz","webkit","O","ms"],function(){var e,t=""+this,a=typeof i.style[t+"Transition"]===zt;return a||typeof i.style[t+"Transform"]===zt?(e=t.toLowerCase(),o={css:"ms"!=e?"-"+e+"-":"",prefix:t,event:"o"===e||"webkit"===e?e:""},a&&(r=o,r.event=r.event?r.event+"TransitionEnd":"transitionend"),!1):n}),i=null,Tt.transforms=o,Tt.transitions=r,Tt.devicePixelRatio=t.devicePixelRatio===n?1:t.devicePixelRatio;try{Tt.screenWidth=t.outerWidth||t.screen?t.screen.availWidth:t.innerWidth,Tt.screenHeight=t.outerHeight||t.screen?t.screen.availHeight:t.innerHeight}catch(d){Tt.screenWidth=t.screen.availWidth,Tt.screenHeight=t.screen.availHeight}Tt.detectOS=function(e){var n,i,r=!1,o=[],a=!/mobile safari/i.test(e),s={wp:/(Windows Phone(?: OS)?)\s(\d+)\.(\d+(\.\d+)?)/,fire:/(Silk)\/(\d+)\.(\d+(\.\d+)?)/,android:/(Android|Android.*(?:Opera|Firefox).*?\/)\s*(\d+)\.(\d+(\.\d+)?)/,iphone:/(iPhone|iPod).*OS\s+(\d+)[\._]([\d\._]+)/,ipad:/(iPad).*OS\s+(\d+)[\._]([\d_]+)/,meego:/(MeeGo).+NokiaBrowser\/(\d+)\.([\d\._]+)/,webos:/(webOS)\/(\d+)\.(\d+(\.\d+)?)/,blackberry:/(BlackBerry|BB10).*?Version\/(\d+)\.(\d+(\.\d+)?)/,playbook:/(PlayBook).*?Tablet\s*OS\s*(\d+)\.(\d+(\.\d+)?)/,windows:/(MSIE)\s+(\d+)\.(\d+(\.\d+)?)/,tizen:/(tizen).*?Version\/(\d+)\.(\d+(\.\d+)?)/i,sailfish:/(sailfish).*rv:(\d+)\.(\d+(\.\d+)?).*firefox/i,ffos:/(Mobile).*rv:(\d+)\.(\d+(\.\d+)?).*Firefox/},l={ios:/^i(phone|pad|pod)$/i,android:/^android|fire$/i,blackberry:/^blackberry|playbook/i,windows:/windows/,wp:/wp/,flat:/sailfish|ffos|tizen/i,meego:/meego/},u={tablet:/playbook|ipad|fire/i},d={omini:/Opera\sMini/i,omobile:/Opera\sMobi/i,firefox:/Firefox|Fennec/i,mobilesafari:/version\/.*safari/i,ie:/MSIE|Windows\sPhone/i,chrome:/chrome|crios/i,webkit:/webkit/i};for(i in s)if(s.hasOwnProperty(i)&&(o=e.match(s[i]))){if("windows"==i&&"plugins"in navigator)return!1;r={},r.device=i,r.tablet=c(i,u,!1),r.browser=c(e,d,"default"),r.name=c(i,l),r[r.name]=!0,r.majorVersion=o[2],r.minorVersion=o[3].replace("_","."),n=r.minorVersion.replace(".","").substr(0,2),r.flatVersion=r.majorVersion+n+Array(3-(3>n.length?n.length:2)).join("0"),r.cordova=typeof t.PhoneGap!==Pt||typeof t.cordova!==Pt,r.appMode=t.navigator.standalone||/file|local|wmapp/.test(t.location.protocol)||r.cordova,r.android&&(1.5>Tt.devicePixelRatio&&400>r.flatVersion||a)&&(Tt.screenWidth>800||Tt.screenHeight>800)&&(r.tablet=i);break}return r},s=Tt.mobileOS=Tt.detectOS(navigator.userAgent),Tt.wpDevicePixelRatio=s.wp?screen.width/320:0,Tt.kineticScrollNeeded=s&&(Tt.touch||Tt.msPointers||Tt.pointers),Tt.hasNativeScrolling=!1,(s.ios||s.android&&s.majorVersion>2||s.wp)&&(Tt.hasNativeScrolling=s),Tt.mouseAndTouchPresent=Tt.touch&&!(Tt.mobileOS.ios||Tt.mobileOS.android),Tt.detectBrowser=function(e){var t,n=!1,i=[],r={webkit:/(chrome)[ \/]([\w.]+)/i,safari:/(webkit)[ \/]([\w.]+)/i,opera:/(opera)(?:.*version|)[ \/]([\w.]+)/i,msie:/(msie\s|trident.*? rv:)([\w.]+)/i,mozilla:/(mozilla)(?:.*? rv:([\w.]+)|)/i};for(t in r)if(r.hasOwnProperty(t)&&(i=e.match(r[t]))){n={},n[t]=!0,n[i[1].toLowerCase().split(" ")[0].split("/")[0]]=!0,n.version=parseInt(document.documentMode||i[2],10);break}return n},Tt.browser=Tt.detectBrowser(navigator.userAgent),Tt.zoomLevel=function(){var e,n,i;try{return e=Tt.browser,n=0,i=document.documentElement,e.msie&&11==e.version&&i.scrollHeight>i.clientHeight&&!Tt.touch&&(n=Tt.scrollbar()),Tt.touch?i.clientWidth/t.innerWidth:e.msie&&e.version>=10?((top||t).document.documentElement.offsetWidth+n)/(top||t).innerWidth:1}catch(r){return 1}},Tt.cssBorderSpacing=n!==document.documentElement.style.borderSpacing&&!(Tt.browser.msie&&8>Tt.browser.version),function(t){var n="",i=e(document.documentElement),r=parseInt(t.version,10);t.msie?n="ie":t.mozilla?n="ff":t.safari?n="safari":t.webkit?n="webkit":t.opera&&(n="opera"),n&&(n="k-"+n+" k-"+n+r),Tt.mobileOS&&(n+=" k-mobile"),i.addClass(n)}(Tt.browser),Tt.eventCapture=document.documentElement.addEventListener,l=document.createElement("input"),Tt.placeholder="placeholder"in l,Tt.propertyChangeEvent="onpropertychange"in l,Tt.input=function(){for(var e,t=["number","date","time","month","week","datetime","datetime-local"],n=t.length,i="test",r={},o=0;n>o;o++)e=t[o],l.setAttribute("type",e),l.value=i,r[e.replace("-","")]="text"!==l.type&&l.value!==i;return r}(),l.style.cssText="float:left;",Tt.cssFloat=!!l.style.cssFloat,l=null,Tt.stableSort=function(){var e,t=513,n=[{index:0,field:"b"}];for(e=1;t>e;e++)n.push({index:e,field:"a"});return n.sort(function(e,t){return e.field>t.field?1:t.field>e.field?-1:0}),1===n[0].index}(),Tt.matchesSelector=a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||a.oMatchesSelector||a.matchesSelector||a.matches||function(t){for(var n=document.querySelectorAll?(this.parentNode||document).querySelectorAll(t)||[]:e(t),i=n.length;i--;)if(n[i]==this)return!0;return!1},Tt.pushState=t.history&&t.history.pushState,u=document.documentMode,Tt.hashChange="onhashchange"in t&&!(Tt.browser.msie&&(!u||8>=u))}(),U={left:{reverse:"right"},right:{reverse:"left"},down:{reverse:"up"},up:{reverse:"down"},top:{reverse:"bottom"},bottom:{reverse:"top"},"in":{reverse:"out"},out:{reverse:"in"}},L={},e.extend(L,{enabled:!0,Element:function(t){this.element=e(t)},promise:function(e,t){e.is(":visible")||e.css({display:e.data("olddisplay")||"block"}).css("display"),t.hide&&e.data("olddisplay",e.css("display")).hide(),t.init&&t.init(),t.completeCallback&&t.completeCallback(e),e.dequeue()},disable:function(){this.enabled=!1,this.promise=this.promiseShim},enable:function(){this.enabled=!0,this.promise=this.animatedPromise}}),L.promiseShim=L.promise,"kendoAnimate"in e.fn||vt(e.fn,{kendoStop:function(e,t){return this.stop(e,t)},kendoAnimate:function(e,t,n,i){return w(this,e,t,n,i)},kendoAddClass:function(e,t){return gt.toggleClass(this,e,t,!0)},kendoRemoveClass:function(e,t){return gt.toggleClass(this,e,t,!1)},kendoToggleClass:function(e,t,n){return gt.toggleClass(this,e,t,n)}}),B=/&/g,$=//g,G=function(e){return e.target},Tt.touch&&(G=function(e){var t="originalEvent"in e?e.originalEvent.changedTouches:"changedTouches"in e?e.changedTouches:null;return t?document.elementFromPoint(t[0].clientX,t[0].clientY):e.target},_t(["swipe","swipeLeft","swipeRight","swipeUp","swipeDown","doubleTap","tap"],function(t,n){e.fn[n]=function(e){return this.bind(n,e)}})),Tt.touch?Tt.mobileOS?(Tt.mousedown="touchstart",Tt.mouseup="touchend",Tt.mousemove="touchmove",Tt.mousecancel="touchcancel",Tt.click="touchend",Tt.resize="orientationchange"):(Tt.mousedown="mousedown touchstart",Tt.mouseup="mouseup touchend",Tt.mousemove="mousemove touchmove",Tt.mousecancel="mouseleave touchcancel",Tt.click="click",Tt.resize="resize"):Tt.pointers?(Tt.mousemove="pointermove",Tt.mousedown="pointerdown",Tt.mouseup="pointerup",Tt.mousecancel="pointercancel",Tt.click="pointerup",Tt.resize="orientationchange resize"):Tt.msPointers?(Tt.mousemove="MSPointerMove",Tt.mousedown="MSPointerDown",Tt.mouseup="MSPointerUp",Tt.mousecancel="MSPointerCancel",Tt.click="MSPointerUp",Tt.resize="orientationchange resize"):(Tt.mousemove="mousemove",Tt.mousedown="mousedown",Tt.mouseup="mouseup",Tt.mousecancel="mouseleave",Tt.click="click",Tt.resize="resize"),K=function(e,t){var n,i,r,o,a=t||"d",s=1;for(i=0,r=e.length;r>i;i++)o=e[i],""!==o&&(n=o.indexOf("["),0!==n&&(-1==n?o="."+o:(s++,o="."+o.substring(0,n)+" || {})"+o.substring(n))),s++,a+=o+(r-1>i?" || {})":")"));return Array(s).join("(")+a},Q=/^([a-z]+:)?\/\//i,vt(gt,{ui:gt.ui||{},fx:gt.fx||_,effects:gt.effects||L,mobile:gt.mobile||{},data:gt.data||{},dataviz:gt.dataviz||{},keys:{INSERT:45,DELETE:46,BACKSPACE:8,TAB:9,ENTER:13,ESC:27,LEFT:37,UP:38,RIGHT:39,DOWN:40,END:35,HOME:36,SPACEBAR:32,PAGEUP:33,PAGEDOWN:34,F2:113,F10:121,F12:123,NUMPAD_PLUS:107,NUMPAD_MINUS:109,NUMPAD_DOT:110},support:gt.support||Tt,animate:gt.animate||w,ns:"",attr:function(e){return"data-"+gt.ns+e},getShadows:a,wrap:s,deepExtend:l,getComputedStyles:p,isScrollable:m,size:h,toCamelCase:f,toHyphens:d,getOffset:gt.getOffset||g,parseEffects:gt.parseEffects||v,toggleClass:gt.toggleClass||b,directions:gt.directions||U,Observable:E,Class:i,Template:z,template:wt(z.compile,z),render:wt(z.render,z),stringify:wt(xt.stringify,xt),eventTarget:G,htmlEncode:k,isLocalUrl:function(e){return e&&!Q.test(e)},expr:function(e,t,n){return e=e||"",typeof t==zt&&(n=t,t=!1),n=n||"d",e&&"["!==e.charAt(0)&&(e="."+e),t?(e=e.replace(/"([^.]*)\.([^"]*)"/g,'"$1_$DOT$_$2"'),e=e.replace(/'([^.]*)\.([^']*)'/g,"'$1_$DOT$_$2'"),e=K(e.split("."),n),e=e.replace(/_\$DOT\$_/g,".")):e=n+e,e},getter:function(e,t){var n=e+t;return Nt[n]=Nt[n]||Function("d","return "+gt.expr(e,t))},setter:function(e){return It[e]=It[e]||Function("d,value",gt.expr(e)+"=value")},accessor:function(e){return{get:gt.getter(e),set:gt.setter(e)}},guid:function(){var e,t,n="";for(e=0;32>e;e++)t=16*kt.random()|0,(8==e||12==e||16==e||20==e)&&(n+="-"),n+=(12==e?4:16==e?3&t|8:t).toString(16);return n},roleSelector:function(e){return e.replace(/(\S+)/g,"["+gt.attr("role")+"=$1],").slice(0,-1)},directiveSelector:function(e){var t,n=e.split(" ");if(n)for(t=0;n.length>t;t++)"view"!=n[t]&&(n[t]=n[t].replace(/(\w*)(view|bar|strip|over)$/,"$1-$2"));return n.join(" ").replace(/(\S+)/g,"kendo-mobile-$1,").slice(0,-1)},triggeredByInput:function(e){return/^(label|input|textarea|select)$/i.test(e.target.tagName)},logToConsole:function(e){var i=t.console;!gt.suppressLog&&n!==i&&i.log&&i.log(e)}}),Z=E.extend({init:function(e,t){var n,i=this;i.element=gt.jQuery(e).handler(i),i.angular("init",t),E.fn.init.call(i),n=t?t.dataSource:null,n&&(t=vt({},t,{dataSource:{}})),t=i.options=vt(!0,{},i.options,t),n&&(t.dataSource=n),i.element.attr(gt.attr("role"))||i.element.attr(gt.attr("role"),(t.name||"").toLowerCase()),i.element.data("kendo"+t.prefix+t.name,i),i.bind(i.events,t)},events:[],options:{prefix:""},_hasBindingTarget:function(){return!!this.element[0].kendoBindingTarget},_tabindex:function(e){e=e||this.wrapper;var t=this.element,n="tabindex",i=e.attr(n)||t.attr(n);t.removeAttr(n),e.attr(n,isNaN(i)?0:i)},setOptions:function(t){this._setEvents(t),e.extend(this.options,t)},_setEvents:function(e){for(var t,n=this,i=0,r=n.events.length;r>i;i++)t=n.events[i],n.options[t]&&e[t]&&n.unbind(t,n.options[t]);n.bind(n.events,e)},resize:function(e){var t=this.getSize(),n=this._size;(e||(t.width>0||t.height>0)&&(!n||t.width!==n.width||t.height!==n.height))&&(this._size=t,this._resize(t,e),this.trigger("resize",t))},getSize:function(){return gt.dimensions(this.element)},size:function(e){return e?(this.setSize(e),n):this.getSize()},setSize:e.noop,_resize:e.noop,destroy:function(){var e=this;e.element.removeData("kendo"+e.options.prefix+e.options.name),e.element.removeData("handler"),e.unbind()},angular:function(){}}),X=Z.extend({dataItems:function(){return this.dataSource.flatView()},_angularItems:function(t){var n=this;n.angular(t,function(){return{elements:n.items(),data:e.map(n.dataItems(),function(e){return{dataItem:e} -})}})}}),gt.dimensions=function(e,t){var n=e[0];return t&&e.css(t),{width:n.offsetWidth,height:n.offsetHeight}},gt.notify=bt,et=/template$/i,tt=/^\s*(?:\{(?:.|\r\n|\n)*\}|\[(?:.|\r\n|\n)*\])\s*$/,nt=/^\{(\d+)(:[^\}]+)?\}|^\[[A-Za-z_]*\]$/,it=/([A-Z])/g,gt.initWidget=function(i,r,o){var a,s,l,u,c,d,f,p,m,h,g,v,_;if(o?o.roles&&(o=o.roles):o=gt.ui.roles,i=i.nodeType?i:i[0],d=i.getAttribute("data-"+gt.ns+"role")){m=-1===d.indexOf("."),l=m?o[d]:gt.getter(d)(t),g=e(i).data(),v=l?"kendo"+l.fn.options.prefix+l.fn.options.name:"",h=m?RegExp("^kendo.*"+d+"$","i"):RegExp("^"+v+"$","i");for(_ in g)if(_.match(h)){if(_!==v)return g[_];a=g[_]}if(l){for(p=x(i,"dataSource"),r=e.extend({},T(i,l.fn.options),r),p&&(r.dataSource=typeof p===zt?gt.getter(p)(t):p),u=0,c=l.fn.events.length;c>u;u++)s=l.fn.events[u],f=x(i,s),f!==n&&(r[s]=gt.getter(f)(t));return a?e.isEmptyObject(r)||a.setOptions(r):a=new l(i,r),a}}},gt.rolesFromNamespaces=function(e){var t,n,i=[];for(e[0]||(e=[gt.ui,gt.dataviz.ui]),t=0,n=e.length;n>t;t++)i[t]=e[t].roles;return vt.apply(null,[{}].concat(i.reverse()))},gt.init=function(t){var n=gt.rolesFromNamespaces(Vt.call(arguments,1));e(t).find("[data-"+gt.ns+"role]").addBack().each(function(){gt.initWidget(this,{},n)})},gt.destroy=function(t){e(t).find("[data-"+gt.ns+"role]").addBack().each(function(){var t,n=e(this).data();for(t in n)0===t.indexOf("kendo")&&typeof n[t].destroy===Ot&&n[t].destroy()})},gt.resize=function(t,n){var i,r=e(t).find("[data-"+gt.ns+"role]").addBack().filter(D);r.length&&(i=e.makeArray(r),i.sort(M),e.each(i,function(){var t=gt.widgetInstance(e(this));t&&t.resize(n)}))},gt.parseOptions=T,vt(gt.ui,{Widget:Z,DataBoundWidget:X,roles:{},progress:function(t,n){var i,r,o,a,s=t.find(".k-loading-mask"),l=gt.support,u=l.browser;n?s.length||(i=l.isRtl(t),r=i?"right":"left",a=t.scrollLeft(),o=u.webkit&&i?t[0].scrollWidth-t.width()-2*a:0,s=e("
Loading...
").width("100%").height("100%").css("top",t.scrollTop()).css(r,Math.abs(a)+o).prependTo(t)):s&&s.remove()},plugin:function(t,i,r){var o,a=t.fn.options.name;i=i||gt.ui,r=r||"",i[a]=t,i.roles[a.toLowerCase()]=t,o="getKendo"+r+a,a="kendo"+r+a,e.fn[a]=function(i){var r,o=this;return typeof i===zt?(r=Vt.call(arguments,1),this.each(function(){var t,s,l=e.data(this,a);if(!l)throw Error(gt.format("Cannot call method '{0}' of {1} before it is initialized",i,a));if(t=l[i],typeof t!==Ot)throw Error(gt.format("Cannot find method '{0}' of {1}",i,a));return s=t.apply(l,r),s!==n?(o=s,!1):n})):this.each(function(){new t(this,i)}),o},e.fn[a].widget=t,e.fn[o]=function(){return this.data(a)}}}),rt={bind:function(){return this},nullObject:!0,options:{}},ot=Z.extend({init:function(e,t){Z.fn.init.call(this,e,t),this.element.autoApplyNS(),this.wrapper=this.element,this.element.addClass("km-widget")},destroy:function(){Z.fn.destroy.call(this),this.element.kendoDestroy()},options:{prefix:"Mobile"},events:[],view:function(){var e=this.element.closest(gt.roleSelector("view splitview modalview drawer"));return gt.widgetInstance(e,gt.mobile.ui)||rt},viewHasNativeScrolling:function(){var e=this.view();return e&&e.options.useNativeScrolling},container:function(){var e=this.element.closest(gt.roleSelector("view layout modalview drawer splitview"));return gt.widgetInstance(e.eq(0),gt.mobile.ui)||rt}}),vt(gt.mobile,{init:function(e){gt.init(e,gt.mobile.ui,gt.ui,gt.dataviz.ui)},appLevelNativeScrolling:function(){return gt.mobile.application&>.mobile.application.options&>.mobile.application.options.useNativeScrolling},roles:{},ui:{Widget:ot,DataBoundWidget:X.extend(ot.prototype),roles:{},plugin:function(e){gt.ui.plugin(e,gt.mobile.ui,"Mobile")}}}),l(gt.dataviz,{init:function(e){gt.init(e,gt.dataviz.ui)},ui:{roles:{},themes:{},views:[],plugin:function(e){gt.ui.plugin(e,gt.dataviz.ui)}},roles:{}}),gt.touchScroller=function(t,n){return e(t).map(function(t,i){return i=e(i),Tt.kineticScrollNeeded&>.mobile.ui.Scroller&&!i.data("kendoMobileScroller")?(i.kendoMobileScroller(n),i.data("kendoMobileScroller")):!1})[0]},gt.preventDefault=function(e){e.preventDefault()},gt.widgetInstance=function(e,n){var i,r,o,a,s=e.data(gt.ns+"role"),l=[];if(s){if("content"===s&&(s="scroller"),n)if(n[0])for(i=0,r=n.length;r>i;i++)l.push(n[i].roles[s]);else l.push(n.roles[s]);else l=[gt.ui.roles[s],gt.dataviz.ui.roles[s],gt.mobile.ui.roles[s]];for(s.indexOf(".")>=0&&(l=[gt.getter(s)(t)]),i=0,r=l.length;r>i;i++)if(o=l[i],o&&(a=e.data("kendo"+o.fn.options.prefix+o.fn.options.name)))return a}},gt.onResize=function(n){var i=n;return Tt.mobileOS.android&&(i=function(){setTimeout(n,600)}),e(t).on(Tt.resize,i),i},gt.unbindResize=function(n){e(t).off(Tt.resize,n)},gt.attrValue=function(e,t){return e.data(gt.ns+t)},gt.days={Sunday:0,Monday:1,Tuesday:2,Wednesday:3,Thursday:4,Friday:5,Saturday:6},e.extend(e.expr[":"],{kendoFocusable:function(t){var n=e.attr(t,"tabindex");return S(t,!isNaN(n)&&n>-1)}}),at=["mousedown","mousemove","mouseenter","mouseleave","mouseover","mouseout","mouseup","click"],st="label, input, [data-rel=external]",lt={setupMouseMute:function(){var t,n=0,i=at.length,r=document.documentElement;if(!lt.mouseTrap&&Tt.eventCapture)for(lt.mouseTrap=!0,lt.bustClick=!1,lt.captureMouse=!1,t=function(t){lt.captureMouse&&("click"===t.type?lt.bustClick&&!e(t.target).is(st)&&(t.preventDefault(),t.stopPropagation()):t.stopPropagation())};i>n;n++)r.addEventListener(at[n],t,!0)},muteMouse:function(e){lt.captureMouse=!0,e.data.bustClick&&(lt.bustClick=!0),clearTimeout(lt.mouseTrapTimeoutID)},unMuteMouse:function(){clearTimeout(lt.mouseTrapTimeoutID),lt.mouseTrapTimeoutID=setTimeout(function(){lt.captureMouse=!1,lt.bustClick=!1},400)}},ut={down:"touchstart mousedown",move:"mousemove touchmove",up:"mouseup touchend touchcancel",cancel:"mouseleave touchcancel"},Tt.touch&&(Tt.mobileOS.ios||Tt.mobileOS.android)?ut={down:"touchstart",move:"touchmove",up:"touchend touchcancel",cancel:"touchcancel"}:Tt.pointers?ut={down:"pointerdown",move:"pointermove",up:"pointerup",cancel:"pointercancel pointerleave"}:Tt.msPointers&&(ut={down:"MSPointerDown",move:"MSPointerMove",up:"MSPointerUp",cancel:"MSPointerCancel MSPointerLeave"}),!Tt.msPointers||"onmspointerenter"in t||e.each({MSPointerEnter:"MSPointerOver",MSPointerLeave:"MSPointerOut"},function(t,n){e.event.special[t]={delegateType:n,bindType:n,handle:function(t){var i,r=this,o=t.relatedTarget,a=t.handleObj;return(!o||o!==r&&!e.contains(r,o))&&(t.type=a.origType,i=a.handler.apply(this,arguments),t.type=n),i}}}),ct=function(e){return ut[e]||e},dt=/([^ ]+)/g,gt.applyEventMap=function(e,t){return e=e.replace(dt,ct),t&&(e=e.replace(dt,"$1."+t)),e},ft=e.fn.on,vt(!0,O,e),O.fn=O.prototype=new e,O.fn.constructor=O,O.fn.init=function(t,n){return n&&n instanceof e&&!(n instanceof O)&&(n=O(n)),e.fn.init.call(this,t,n,pt)},O.fn.init.prototype=O.fn,pt=O(document),vt(O.fn,{handler:function(e){return this.data("handler",e),this},autoApplyNS:function(e){return this.data("kendoNS",e||gt.guid()),this},on:function(){var e,t,n,i,r,o,a=this,s=a.data("kendoNS");return 1===arguments.length?ft.call(a,arguments[0]):(e=a,t=Vt.call(arguments),typeof t[t.length-1]===Pt&&t.pop(),n=t[t.length-1],i=gt.applyEventMap(t[0],s),Tt.mouseAndTouchPresent&&i.search(/mouse|click/)>-1&&this[0]!==document.documentElement&&(lt.setupMouseMute(),r=2===t.length?null:t[1],o=i.indexOf("click")>-1&&i.indexOf("touchend")>-1,ft.call(this,{touchstart:lt.muteMouse,touchend:lt.unMuteMouse},r,{bustClick:o})),typeof n===zt&&(e=a.data("handler"),n=e[n],t[t.length-1]=function(t){n.call(e,t)}),t[0]=i,ft.apply(a,t),a)},kendoDestroy:function(e){return e=e||this.data("kendoNS"),e&&this.off("."+e),this}}),gt.jQuery=O,gt.eventMap=ut,gt.timezone=function(){function e(e,t){var n,i,r,o=t[3],a=t[4],s=t[5],l=t[8];return l||(t[8]=l={}),l[e]?l[e]:(isNaN(a)?0===a.indexOf("last")?(n=new Date(Date.UTC(e,c[o]+1,1,s[0]-24,s[1],s[2],0)),i=d[a.substr(4,3)],r=n.getUTCDay(),n.setUTCDate(n.getUTCDate()+i-r-(i>r?7:0))):a.indexOf(">=")>=0&&(n=new Date(Date.UTC(e,c[o],a.substr(5),s[0],s[1],s[2],0)),i=d[a.substr(0,3)],r=n.getUTCDay(),n.setUTCDate(n.getUTCDate()+i-r+(r>i?7:0))):n=new Date(Date.UTC(e,c[o],a,s[0],s[1],s[2],0)),l[e]=n)}function t(t,n,i){var r,o,a,s;return(n=n[i])?(a=new Date(t).getUTCFullYear(),n=jQuery.grep(n,function(e){var t=e[0],n=e[1];return a>=t&&(n>=a||t==a&&"only"==n||"max"==n)}),n.push(t),n.sort(function(t,n){return"number"!=typeof t&&(t=+e(a,t)),"number"!=typeof n&&(n=+e(a,n)),t-n}),s=n[jQuery.inArray(t,n)-1]||n[n.length-1],isNaN(s)?s:null):(r=i.split(":"),o=0,r.length>1&&(o=60*r[0]+ +r[1]),[-1e6,"max","-","Jan",1,[0,0,0],o,"-"])}function n(e,t,n){var i,r,o,a=t[n];if("string"==typeof a&&(a=t[a]),!a)throw Error('Timezone "'+n+'" is either incorrect, or kendo.timezones.min.js is not included.');for(i=a.length-1;i>=0&&(r=a[i][3],!(r&&e>r));i--);if(o=a[i+1],!o)throw Error('Timezone "'+n+'" not found on '+e+".");return o}function i(e,i,r,o){typeof e!=Ft&&(e=Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));var a=n(e,i,o);return{zone:a,rule:t(e,r,a[1])}}function r(e,t){var n,r,o;return"Etc/UTC"==t||"Etc/GMT"==t?0:(n=i(e,this.zones,this.rules,t),r=n.zone,o=n.rule,gt.parseFloat(o?r[0]-o[6]:r[0]))}function o(e,t){var n=i(e,this.zones,this.rules,t),r=n.zone,o=n.rule,a=r[2];return a.indexOf("/")>=0?a.split("/")[o&&+o[6]?1:0]:a.indexOf("%s")>=0?a.replace("%s",o&&"-"!=o[7]?o[7]:""):a}function a(e,t,n){var i,r;return typeof t==zt&&(t=this.offset(e,t)),typeof n==zt&&(n=this.offset(e,n)),i=e.getTimezoneOffset(),e=new Date(e.getTime()+6e4*(t-n)),r=e.getTimezoneOffset(),new Date(e.getTime()+6e4*(r-i))}function s(e,t){return this.convert(e,e.getTimezoneOffset(),t)}function l(e,t){return this.convert(e,t,e.getTimezoneOffset())}function u(e){return this.apply(new Date(e),"Etc/UTC")}var c={Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11},d={Sun:0,Mon:1,Tue:2,Wed:3,Thu:4,Fri:5,Sat:6};return{zones:{},rules:{},offset:r,convert:a,apply:s,remove:l,abbr:o,toLocalDate:u}}(),gt.date=function(){function e(e,t){return 0===t&&23===e.getHours()?(e.setHours(e.getHours()+2),!0):!1}function t(t,n,i){var r=t.getHours();i=i||1,n=(n-t.getDay()+7*i)%7,t.setDate(t.getDate()+n),e(t,r)}function n(e,n,i){return e=new Date(e),t(e,n,i),e}function i(e){return new Date(e.getFullYear(),e.getMonth(),1)}function r(e){var t=new Date(e.getFullYear(),e.getMonth()+1,0),n=i(e),r=Math.abs(t.getTimezoneOffset()-n.getTimezoneOffset());return r&&t.setHours(n.getHours()+r/60),t}function o(t){return t=new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,0),e(t,0),t}function a(e){return Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())}function s(e){return e.getTime()-o(e)}function l(e,t,n){var i,r=s(t),o=s(n);return e&&r!=o?(t>=n&&(n+=g),i=s(e),r>i&&(i+=g),r>o&&(o+=g),i>=r&&o>=i):!0}function u(e,t,n){var i,r=t.getTime(),o=n.getTime();return r>=o&&(o+=g),i=e.getTime(),i>=r&&o>=i}function c(t,n){var i=t.getHours();return t=new Date(t),d(t,n*g),e(t,i),t}function d(e,t,n){var i,r=e.getTimezoneOffset();e.setTime(e.getTime()+t),n||(i=e.getTimezoneOffset()-r,e.setTime(e.getTime()+i*h))}function f(){return o(new Date)}function p(e){return o(e).getTime()==f().getTime()}function m(e){var t=new Date(1980,1,1,0,0,0);return e&&t.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()),t}var h=6e4,g=864e5;return{adjustDST:e,dayOfWeek:n,setDayOfWeek:t,getDate:o,isInDateRange:u,isInTimeRange:l,isToday:p,nextDay:function(e){return c(e,1)},previousDay:function(e){return c(e,-1)},toUtcTime:a,MS_PER_DAY:g,MS_PER_HOUR:60*h,MS_PER_MINUTE:h,setTime:d,addDays:c,today:f,toInvariantTime:m,firstDayOfMonth:i,lastDayOfMonth:r,getMilliseconds:s}}(),gt.stripWhitespace=function(e){var t,n,i;if(document.createNodeIterator)for(t=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,function(t){return t.parentNode==e?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT},!1);t.nextNode();)t.referenceNode&&!t.referenceNode.textContent.trim()&&t.referenceNode.parentNode.removeChild(t.referenceNode);else for(n=0;e.childNodes.length>n;n++)i=e.childNodes[n],3!=i.nodeType||/\S/.test(i.nodeValue)||(e.removeChild(i),n--),1==i.nodeType&>.stripWhitespace(i)},mt=t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||t.msRequestAnimationFrame||function(e){setTimeout(e,1e3/60)},gt.animationFrame=function(e){mt.call(t,e)},ht=[],gt.queueAnimation=function(e){ht[ht.length]=e,1===ht.length&>.runNextAnimation()},gt.runNextAnimation=function(){gt.animationFrame(function(){ht[0]&&(ht.shift()(),ht[0]&>.runNextAnimation())})},gt.parseQueryStringParams=function(e){for(var t=e.split("?")[1]||"",n={},i=t.split(/&|=/),r=i.length,o=0;r>o;o+=2)""!==i[o]&&(n[decodeURIComponent(i[o])]=decodeURIComponent(i[o+1]));return n},gt.elementUnderCursor=function(e){return n!==e.x.client?document.elementFromPoint(e.x.client,e.y.client):n},gt.wheelDeltaY=function(e){var t,i=e.originalEvent,r=i.wheelDeltaY;return i.wheelDelta?(r===n||r)&&(t=i.wheelDelta):i.detail&&i.axis===i.VERTICAL_AXIS&&(t=10*-i.detail),t},gt.throttle=function(e,t){var i,r,o=0;return!t||0>=t?e:(r=function(){function r(){e.apply(a,l),o=+new Date}var a=this,s=+new Date-o,l=arguments;return o?(i&&clearTimeout(i),s>t?r():i=setTimeout(r,t-s),n):r()},r.cancel=function(){clearTimeout(i)},r)},gt.caret=function(t,i,r){var o,a,s,l,u=i!==n;if(r===n&&(r=i),t[0]&&(t=t[0]),!u||!t.disabled){try{t.selectionStart!==n?u?(t.focus(),t.setSelectionRange(i,r)):i=[t.selectionStart,t.selectionEnd]:document.selection&&(e(t).is(":visible")&&t.focus(),o=t.createTextRange(),u?(o.collapse(!0),o.moveStart("character",i),o.moveEnd("character",r-i),o.select()):(a=o.duplicate(),o.moveToBookmark(document.selection.createRange().getBookmark()),a.setEndPoint("EndToStart",o),s=a.text.length,l=s+o.text.length,i=[s,l]))}catch(c){i=[]}return i}},gt.compileMobileDirective=function(e,n){var i=t.angular;return e.attr("data-"+gt.ns+"role",e[0].tagName.toLowerCase().replace("kendo-mobile-","").replace("-","")),i.element(e).injector().invoke(["$compile",function(t){t(e)(n),/^\$(digest|apply)$/.test(n.$$phase)||n.$digest()}]),gt.widgetInstance(e,gt.mobile.ui)},gt.antiForgeryTokens=function(){var t={},i=e("meta[name=csrf-token],meta[name=_csrf]").attr("content"),r=e("meta[name=csrf-param],meta[name=_csrf_header]").attr("content");return e("input[name^='__RequestVerificationToken']").each(function(){t[this.name]=this.value}),r!==n&&i!==n&&(t[r]=i),t},function(){function n(t,n,i,r){var o,a,s=e("
").attr({action:i,method:"POST",target:r}),l=gt.antiForgeryTokens();l.fileName=n,o=t.split(";base64,"),l.contentType=o[0].replace("data:",""),l.base64=o[1];for(a in l)l.hasOwnProperty(a)&&e("").attr({value:l[a],name:a,type:"hidden"}).appendTo(s);s.appendTo("body").submit().remove()}function i(e,t){var n,i,r,o,a,s=e;if("string"==typeof e){for(n=e.split(";base64,"),i=n[0],r=atob(n[1]),o=new Uint8Array(r.length),a=0;r.length>a;a++)o[a]=r.charCodeAt(a);s=new Blob([o.buffer],{type:i})}navigator.msSaveBlob(s,t)}function r(e,n){t.Blob&&e instanceof Blob&&(e=URL.createObjectURL(e)),o.download=n,o.href=e;var i=document.createEvent("MouseEvents");i.initMouseEvent("click",!0,!1,t,0,0,0,0,0,!1,!1,!1,!1,0,null),o.dispatchEvent(i)}var o=document.createElement("a"),a="download"in o;gt.saveAs=function(e){var t=n;e.forceProxy||(a?t=r:navigator.msSaveBlob&&(t=i)),t(e.dataURI,e.fileName,e.proxyURL,e.proxyTarget)}}()}(jQuery,window),function(e,t){function n(e,t,n,i){var r,o=e.getFullYear(),a=t.getFullYear(),s=n.getFullYear();return o-=o%i,r=o+(i-1),a>o&&(o=a),r>s&&(r=s),o+"-"+r}function i(e){for(var t,n=0,i=e.min,r=e.max,o=e.start,a=e.setter,l=e.build,u=e.cells||12,c=e.perRow||4,d=e.content||F,f=e.empty||A,p=e.html||'';u>n;n++)n>0&&n%c===0&&(p+=''),t=l(o,n),p+=s(o,i,r)?d(t):f(t),a(o,1);return p+"
"}function r(e,t,n){var i=e.getFullYear(),r=t.getFullYear(),o=r,a=0;return n&&(r-=r%n,o=r-r%n+n-1),i>o?a=1:r>i&&(a=-1),a}function o(){var e=new mt;return new mt(e.getFullYear(),e.getMonth(),e.getDate())}function a(e,t,n){var i=o();return e&&(i=new mt(+e)),t>i?i=new mt(+t):i>n&&(i=new mt(+n)),i}function s(e,t,n){return+e>=+t&&+n>=+e}function l(e,t){return e.slice(t).concat(e.slice(0,t))}function u(e,t,n){t=t instanceof mt?t.getFullYear():e.getFullYear()+n*t,e.setFullYear(t)}function c(t){e(this).toggleClass(q,it.indexOf(t.type)>-1||t.type==tt)}function d(e){e.preventDefault()}function f(e){return C(e).calendars.standard}function p(e){var n=ht[e.start],i=ht[e.depth],r=C(e.culture);e.format=D(e.format||r.calendars.standard.patterns.d),isNaN(n)&&(n=0,e.start=U),(i===t||i>n)&&(e.depth=U),e.dates||(e.dates=[])}function m(e){E&&e.find("*").attr("unselectable","on")}function h(e,t){for(var n=0,i=t.length;i>n;n++)if(e===+t[n])return!0;return!1}function g(e,t){return e?e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate():!1}function v(e,t){return e?e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth():!1}var _,y=window.kendo,w=y.support,b=y.ui,k=b.Widget,x=y.keys,T=y.parseDate,M=y.date.adjustDST,D=y._extractFormat,S=y.template,C=y.getCulture,O=y.support.transitions,z=O?O.css+"transform-origin":"",F=S('#=data.value#',{useWithBlock:!1}),A=S(' ',{useWithBlock:!1}),H=y.support.browser,E=H.msie&&9>H.version,P=".kendoCalendar",N="click"+P,I="keydown"+P,V="id",W="min",R="left",Y="slideIn",U="month",L="century",B="change",$="navigate",j="value",q="k-state-hover",J="k-state-disabled",G="k-state-focused",K="k-other-month",Q=' class="'+K+'"',Z="k-nav-today",X="td:has(.k-link)",et="blur"+P,tt="focus",nt=tt+P,it=w.touch?"touchstart":"mouseenter",rt=w.touch?"touchstart"+P:"mouseenter"+P,ot=w.touch?"touchend"+P+" touchmove"+P:"mouseleave"+P,at=6e4,st=864e5,lt="_prevArrow",ut="_nextArrow",ct="aria-disabled",dt="aria-selected",ft=e.proxy,pt=e.extend,mt=Date,ht={month:0,year:1,decade:2,century:3},gt=k.extend({init:function(t,n){var i,r,o=this;k.fn.init.call(o,t,n),t=o.wrapper=o.element,n=o.options,n.url=window.unescape(n.url),o._templates(),o._header(),o._footer(o.footer),r=t.addClass("k-widget k-calendar").on(rt+" "+ot,X,c).on(I,"table.k-content",ft(o._move,o)).on(N,X,function(t){var n=t.currentTarget.firstChild;-1!=n.href.indexOf("#")&&t.preventDefault(),o._click(e(n))}).on("mouseup"+P,"table.k-content, .k-footer",function(){o._focusView(o.options.focusOnNav!==!1)}).attr(V),r&&(o._cellID=r+"_cell_selected"),p(n),i=T(n.value,n.format,n.culture),o._index=ht[n.start],o._current=new mt(+a(i,n.min,n.max)),o._addClassProxy=function(){o._active=!0,o._cell.addClass(G)},o._removeClassProxy=function(){o._active=!1,o._cell.removeClass(G)},o.value(i),y.notify(o)},options:{name:"Calendar",value:null,min:new mt(1900,0,1),max:new mt(2099,11,31),dates:[],url:"",culture:"",footer:"",format:"",month:{},start:U,depth:U,animation:{horizontal:{effects:Y,reverse:!0,duration:500,divisor:2},vertical:{effects:"zoomIn",duration:400}}},events:[B,$],setOptions:function(e){var t=this;p(e),e.dates[0]||(e.dates=t.options.dates),k.fn.setOptions.call(t,e),t._templates(),t._footer(t.footer),t._index=ht[t.options.start],t.navigate()},destroy:function(){var e=this,t=e._today;e.element.off(P),e._title.off(P),e[lt].off(P),e[ut].off(P),y.destroy(e._table),t&&y.destroy(t.off(P)),k.fn.destroy.call(e)},current:function(){return this._current},view:function(){return this._view},focus:function(e){e=e||this._table,this._bindTable(e),e.focus()},min:function(e){return this._option(W,e)},max:function(e){return this._option("max",e)},navigateToPast:function(){this._navigate(lt,-1)},navigateToFuture:function(){this._navigate(ut,1)},navigateUp:function(){var e=this,t=e._index;e._title.hasClass(J)||e.navigate(e._current,++t)},navigateDown:function(e){var n=this,i=n._index,r=n.options.depth;if(e)return i===ht[r]?(+n._value!=+e&&(n.value(e),n.trigger(B)),t):(n.navigate(e,--i),t)},navigate:function(n,i){i=isNaN(i)?ht[i]:i;var r,o,s,l,u=this,c=u.options,d=c.culture,f=c.min,p=c.max,h=u._title,g=u._table,v=u._oldTable,y=u._value,w=u._current,b=n&&+n>+w,k=i!==t&&i!==u._index;n||(n=w),u._current=n=new mt(+a(n,f,p)),i===t?i=u._index:u._index=i,u._view=o=_.views[i],s=o.compare,l=i===ht[L],h.toggleClass(J,l).attr(ct,l),l=s(n,f)<1,u[lt].toggleClass(J,l).attr(ct,l),l=s(n,p)>-1,u[ut].toggleClass(J,l).attr(ct,l),g&&v&&v.data("animating")&&(v.kendoStop(!0,!0),g.kendoStop(!0,!0)),u._oldTable=g,(!g||u._changeView)&&(h.html(o.title(n,f,p,d)),u._table=r=e(o.content(pt({min:f,max:p,date:n,url:c.url,dates:c.dates,format:c.format,culture:d},u[o.name]))),m(r),u._animate({from:g,to:r,vertical:k,future:b}),u._focus(n),u.trigger($)),i===ht[c.depth]&&y&&u._class("k-state-selected",o.toDateString(y)),u._class(G,o.toDateString(n)),!g&&u._cell&&u._cell.removeClass(G),u._changeView=!0},value:function(e){var n=this,i=n._view,r=n.options,o=n._view,a=r.min,l=r.max;return e===t?n._value:(e=T(e,r.format,r.culture),null!==e&&(e=new mt(+e),s(e,a,l)||(e=null)),n._value=e,o&&null===e&&n._cell?n._cell.removeClass("k-state-selected"):(n._changeView=!e||i&&0!==i.compare(e,n._current),n.navigate(e)),t)},_move:function(t){var n,i,r,o,s=this,l=s.options,u=t.keyCode,c=s._view,d=s._index,f=new mt(+s._current),p=y.support.isRtl(s.wrapper);return t.target===s._table[0]&&(s._active=!0),t.ctrlKey?u==x.RIGHT&&!p||u==x.LEFT&&p?(s.navigateToFuture(),i=!0):u==x.LEFT&&!p||u==x.RIGHT&&p?(s.navigateToPast(),i=!0):u==x.UP?(s.navigateUp(),i=!0):u==x.DOWN&&(s._click(e(s._cell[0].firstChild)),i=!0):(u==x.RIGHT&&!p||u==x.LEFT&&p?(n=1,i=!0):u==x.LEFT&&!p||u==x.RIGHT&&p?(n=-1,i=!0):u==x.UP?(n=0===d?-7:-4,i=!0):u==x.DOWN?(n=0===d?7:4,i=!0):u==x.ENTER?(s._click(e(s._cell[0].firstChild)),i=!0):u==x.HOME||u==x.END?(r=u==x.HOME?"first":"last",o=c[r](f),f=new mt(o.getFullYear(),o.getMonth(),o.getDate(),f.getHours(),f.getMinutes(),f.getSeconds(),f.getMilliseconds()),i=!0):u==x.PAGEUP?(i=!0,s.navigateToPast()):u==x.PAGEDOWN&&(i=!0,s.navigateToFuture()),(n||r)&&(r||c.setDate(f,n),s._focus(a(f,l.min,l.max)))),i&&t.preventDefault(),s._current},_animate:function(e){var t=this,n=e.from,i=e.to,r=t._active;n?n.parent().data("animating")?(n.off(P),n.parent().kendoStop(!0,!0).remove(),n.remove(),i.insertAfter(t.element[0].firstChild),t._focusView(r)):n.is(":visible")&&t.options.animation!==!1?t[e.vertical?"_vertical":"_horizontal"](n,i,e.future):(i.insertAfter(n),n.off(P).remove(),t._focusView(r)):(i.insertAfter(t.element[0].firstChild),t._bindTable(i))},_horizontal:function(e,t,n){var i=this,r=i._active,o=i.options.animation.horizontal,a=o.effects,s=e.outerWidth();a&&-1!=a.indexOf(Y)&&(e.add(t).css({width:s}),e.wrap("
"),i._focusView(r,e),e.parent().css({position:"relative",width:2*s,"float":R,"margin-left":n?0:-s}),t[n?"insertAfter":"insertBefore"](e),pt(o,{effects:Y+":"+(n?"right":R),complete:function(){e.off(P).remove(),i._oldTable=null,t.unwrap(),i._focusView(r)}}),e.parent().kendoStop(!0,!0).kendoAnimate(o))},_vertical:function(e,t){var n,i,r=this,o=r.options.animation.vertical,a=o.effects,s=r._active;a&&-1!=a.indexOf("zoom")&&(t.css({position:"absolute",top:e.prev().outerHeight(),left:0}).insertBefore(e),z&&(n=r._cellByDate(r._view.toDateString(r._current)),i=n.position(),i=i.left+parseInt(n.width()/2,10)+"px "+(i.top+parseInt(n.height()/2,10)+"px"),t.css(z,i)),e.kendoStop(!0,!0).kendoAnimate({effects:"fadeOut",duration:600,complete:function(){e.off(P).remove(),r._oldTable=null,t.css({position:"static",top:0,left:0}),r._focusView(s)}}),t.kendoStop(!0,!0).kendoAnimate(o))},_cellByDate:function(t){return this._table.find("td:not(."+K+")").filter(function(){return e(this.firstChild).attr(y.attr(j))===t})},_class:function(t,n){var i=this,r=i._cellID,o=i._cell;o&&o.removeAttr(dt).removeAttr("aria-label").removeAttr(V),o=i._table.find("td:not(."+K+")").removeClass(t).filter(function(){return e(this.firstChild).attr(y.attr(j))===n}).attr(dt,!0),t!==G||i._active||i.options.focusOnNav===!1||(t=""),o.addClass(t),o[0]&&(i._cell=o),r&&(o.attr(V,r),i._table.removeAttr("aria-activedescendant").attr("aria-activedescendant",r))},_bindTable:function(e){e.on(nt,this._addClassProxy).on(et,this._removeClassProxy)},_click:function(e){var t=this,n=t.options,i=new Date(+t._current),r=e.attr(y.attr(j)).split("/");r=new mt(r[0],r[1],r[2]),M(r,0),t._view.setDate(i,r),t.navigateDown(a(i,n.min,n.max))},_focus:function(e){var t=this,n=t._view;0!==n.compare(e,t._current)?t.navigate(e):(t._current=e,t._class(G,n.toDateString(e)))},_focusView:function(e,t){e&&this.focus(t)},_footer:function(n){var i=this,r=o(),a=i.element,s=a.find(".k-footer");return n?(s[0]||(s=e('').appendTo(a)),i._today=s.show().find(".k-link").html(n(r)).attr("title",y.toString(r,"D",i.options.culture)),i._toggle(),t):(i._toggle(!1),s.hide(),t)},_header:function(){var e,t=this,n=t.element;n.find(".k-header")[0]||n.html('
'),e=n.find(".k-link").on(rt+" "+ot+" "+nt+" "+et,c).click(!1),t._title=e.eq(1).on(N,function(){t._active=t.options.focusOnNav!==!1,t.navigateUp()}),t[lt]=e.eq(0).on(N,function(){t._active=t.options.focusOnNav!==!1,t.navigateToPast()}),t[ut]=e.eq(2).on(N,function(){t._active=t.options.focusOnNav!==!1,t.navigateToFuture()})},_navigate:function(e,t){var n=this,i=n._index+1,r=new mt(+n._current);e=n[e],e.hasClass(J)||(i>3?r.setFullYear(r.getFullYear()+100*t):_.views[i].setDate(r,t),n.navigate(r))},_option:function(e,n){var i,r=this,o=r.options,a=r._value||r._current;return n===t?o[e]:(n=T(n,o.format,o.culture),n&&(o[e]=new mt(+n),i=e===W?n>a:a>n,(i||v(a,n))&&(i&&(r._value=null),r._changeView=!0),r._changeView||(r._changeView=!(!o.month.content&&!o.month.empty)),r.navigate(r._value),r._toggle()),t)},_toggle:function(e){var n=this,i=n.options,r=n._today;e===t&&(e=s(o(),i.min,i.max)),r&&(r.off(N),e?r.addClass(Z).removeClass(J).on(N,ft(n._todayClick,n)):r.removeClass(Z).addClass(J).on(N,d))},_todayClick:function(e){var t=this,n=ht[t.options.depth],i=o();e.preventDefault(),0===t._view.compare(t._current,i)&&t._index==n&&(t._changeView=!1),t._value=i,t.navigate(i,n),t.trigger(B)},_templates:function(){var e=this,t=e.options,n=t.footer,i=t.month,r=i.content,o=i.empty;e.month={content:S(''+(r||"#=data.value#")+"",{useWithBlock:!!r}),empty:S(''+(o||" ")+"",{useWithBlock:!!o})},e.footer=n!==!1?S(n||'#= kendo.toString(data,"D","'+t.culture+'") #',{useWithBlock:!1}):null}});b.plugin(gt),_={firstDayOfMonth:function(e){return new mt(e.getFullYear(),e.getMonth(),1)},firstVisibleDay:function(e,t){t=t||y.culture().calendar;for(var n=t.firstDay,i=new mt(e.getFullYear(),e.getMonth(),0,e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds());i.getDay()!=n;)_.setTime(i,-1*st);return i},setTime:function(e,t){var n=e.getTimezoneOffset(),i=new mt(e.getTime()+t),r=i.getTimezoneOffset()-n;e.setTime(i.getTime()+r*at)},views:[{name:U,title:function(e,t,n,i){return f(i).months.names[e.getMonth()]+" "+e.getFullYear()},content:function(e){for(var t=this,n=0,r=e.min,o=e.max,a=e.date,s=e.dates,u=e.format,c=e.culture,d=e.url,p=d&&s[0],m=f(c),g=m.firstDay,v=m.days,w=l(v.names,g),b=l(v.namesShort,g),k=_.firstVisibleDay(a,m),x=t.first(a),T=t.last(a),D=t.toDateString,S=new mt,C='';7>n;n++)C+='";return S=new mt(S.getFullYear(),S.getMonth(),S.getDate()),M(S,0),S=+S,i({cells:42,perRow:7,html:C+='',start:new mt(k.getFullYear(),k.getMonth(),k.getDate()),min:new mt(r.getFullYear(),r.getMonth(),r.getDate()),max:new mt(o.getFullYear(),o.getMonth(),o.getDate()),content:e.content,empty:e.empty,setter:t.setDate,build:function(e){var t=[],n=e.getDay(),i="",r="#";return(x>e||e>T)&&t.push(K),+e===S&&t.push("k-today"),(0===n||6===n)&&t.push("k-weekend"),p&&h(+e,s)&&(r=d.replace("{0}",y.toString(e,u,c)),i=" k-action-link"),{date:e,dates:s,ns:y.ns,title:y.toString(e,"D",c),value:e.getDate(),dateString:D(e),cssClass:t[0]?' class="'+t.join(" ")+'"':"",linkClass:i,url:r}}})},first:function(e){return _.firstDayOfMonth(e)},last:function(e){var t=new mt(e.getFullYear(),e.getMonth()+1,0),n=_.firstDayOfMonth(e),i=Math.abs(t.getTimezoneOffset()-n.getTimezoneOffset());return i&&t.setHours(n.getHours()+i/60),t},compare:function(e,t){var n,i=e.getMonth(),r=e.getFullYear(),o=t.getMonth(),a=t.getFullYear();return n=r>a?1:a>r?-1:i==o?0:i>o?1:-1},setDate:function(e,t){var n=e.getHours();t instanceof mt?e.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()):_.setTime(e,t*st),M(e,n)},toDateString:function(e){return e.getFullYear()+"/"+e.getMonth()+"/"+e.getDate()}},{name:"year",title:function(e){return e.getFullYear()},content:function(e){var t=f(e.culture).months.namesAbbr,n=this.toDateString,r=e.min,o=e.max;return i({min:new mt(r.getFullYear(),r.getMonth(),1),max:new mt(o.getFullYear(),o.getMonth(),1),start:new mt(e.date.getFullYear(),0,1),setter:this.setDate,build:function(e){return{value:t[e.getMonth()],ns:y.ns,dateString:n(e),cssClass:""}}})},first:function(e){return new mt(e.getFullYear(),0,e.getDate())},last:function(e){return new mt(e.getFullYear(),11,e.getDate())},compare:function(e,t){return r(e,t)},setDate:function(e,t){var n,i=e.getHours();t instanceof mt?(n=t.getMonth(),e.setFullYear(t.getFullYear(),n,e.getDate()),n!==e.getMonth()&&e.setDate(0)):(n=e.getMonth()+t,e.setMonth(n),n>11&&(n-=12),n>0&&e.getMonth()!=n&&e.setDate(0)),M(e,i)},toDateString:function(e){return e.getFullYear()+"/"+e.getMonth()+"/1"}},{name:"decade",title:function(e,t,i){return n(e,t,i,10)},content:function(e){var t=e.date.getFullYear(),n=this.toDateString;return i({start:new mt(t-t%10-1,0,1),min:new mt(e.min.getFullYear(),0,1),max:new mt(e.max.getFullYear(),0,1),setter:this.setDate,build:function(e,t){return{value:e.getFullYear(),ns:y.ns,dateString:n(e),cssClass:0===t||11==t?Q:""}}})},first:function(e){var t=e.getFullYear();return new mt(t-t%10,e.getMonth(),e.getDate())},last:function(e){var t=e.getFullYear();return new mt(t-t%10+9,e.getMonth(),e.getDate())},compare:function(e,t){return r(e,t,10)},setDate:function(e,t){u(e,t,1)},toDateString:function(e){return e.getFullYear()+"/0/1"}},{name:L,title:function(e,t,i){return n(e,t,i,100)},content:function(e){var t=e.date.getFullYear(),n=e.min.getFullYear(),r=e.max.getFullYear(),o=this.toDateString,a=n,s=r;return a-=a%10,s-=s%10,10>s-a&&(s=a+9),i({start:new mt(t-t%100-10,0,1),min:new mt(a,0,1),max:new mt(s,0,1),setter:this.setDate,build:function(e,t){var i=e.getFullYear(),a=i+9;return n>i&&(i=n),a>r&&(a=r),{ns:y.ns,value:i+" - "+a,dateString:o(e),cssClass:0===t||11==t?Q:""}}})},first:function(e){var t=e.getFullYear();return new mt(t-t%100,e.getMonth(),e.getDate())},last:function(e){var t=e.getFullYear();return new mt(t-t%100+99,e.getMonth(),e.getDate())},compare:function(e,t){return r(e,t,100)},setDate:function(e,t){u(e,t,10)},toDateString:function(e){var t=e.getFullYear();return t-t%10+"/0/1"}}]},_.isEqualDatePart=g,_.makeUnselectable=m,_.restrictValue=a,_.isInRange=s,_.normalize=p,_.viewsEnum=ht,y.calendar=_}(window.kendo.jQuery),function(e){function t(t,n){return t===n||e.contains(t,n) -}var n=window.kendo,i=n.ui,r=i.Widget,o=n.support,a=n.getOffset,s="open",l="close",u="deactivate",c="activate",d="center",f="left",p="right",m="top",h="bottom",g="absolute",v="hidden",_="body",y="location",w="position",b="visible",k="effects",x="k-state-active",T="k-state-border",M=/k-state-border-(\w+)/,D=".k-picker-wrap, .k-dropdown-wrap, .k-link",S="down",C=e(document.documentElement),O=e(window),z="scroll",F="resize scroll",A=o.transitions.css,H=A+"transform",E=e.extend,P=".kendoPopup",N=["font-size","font-family","font-stretch","font-style","font-weight","line-height"],I=r.extend({init:function(t,i){var o,a=this;i=i||{},i.isRtl&&(i.origin=i.origin||h+" "+p,i.position=i.position||m+" "+p),r.fn.init.call(a,t,i),t=a.element,i=a.options,a.collisions=i.collision?i.collision.split(" "):[],a.downEvent=n.applyEventMap(S,n.guid()),1===a.collisions.length&&a.collisions.push(a.collisions[0]),o=e(a.options.anchor).closest(".k-popup,.k-group").filter(":not([class^=km-])"),i.appendTo=e(e(i.appendTo)[0]||o[0]||_),a.element.hide().addClass("k-popup k-group k-reset").toggleClass("k-rtl",!!i.isRtl).css({position:g}).appendTo(i.appendTo).on("mouseenter"+P,function(){a._hovered=!0}).on("mouseleave"+P,function(){a._hovered=!1}),a.wrapper=e(),i.animation===!1&&(i.animation={open:{effects:{}},close:{hide:!0,effects:{}}}),E(i.animation.open,{complete:function(){a.wrapper.css({overflow:b}),a._activated=!0,a._trigger(c)}}),E(i.animation.close,{complete:function(){a._animationClose()}}),a._mousedownProxy=function(e){a._mousedown(e)},a._resizeProxy=function(e){a._resize(e)},i.toggleTarget&&e(i.toggleTarget).on(i.toggleEvent+P,e.proxy(a.toggle,a))},events:[s,c,l,u],options:{name:"Popup",toggleEvent:"click",origin:h+" "+f,position:m+" "+f,anchor:_,appendTo:null,collision:"flip fit",viewport:window,copyAnchorStyles:!0,autosize:!1,modal:!1,adjustSize:{width:0,height:0},animation:{open:{effects:"slideIn:down",transition:!0,duration:200},close:{duration:100,hide:!0}}},_animationClose:function(){var t,i,r,o,a=this,s=a.options;a.wrapper.hide(),t=a.wrapper.data(y),i=e(s.anchor),t&&a.wrapper.css(t),s.anchor!=_&&(r=((i.attr("class")||"").match(M)||["","down"])[1],o=T+"-"+r,i.removeClass(o).children(D).removeClass(x).removeClass(o),a.element.removeClass(T+"-"+n.directions[r].reverse)),a._closing=!1,a._trigger(u)},destroy:function(){var t,i=this,o=i.options,a=i.element.off(P);r.fn.destroy.call(i),o.toggleTarget&&e(o.toggleTarget).off(P),o.modal||(C.unbind(i.downEvent,i._mousedownProxy),i._scrollableParents().unbind(z,i._resizeProxy),O.unbind(F,i._resizeProxy)),n.destroy(i.element.children()),a.removeData(),o.appendTo[0]===document.body&&(t=a.parent(".k-animation-container"),t[0]?t.remove():a.remove())},open:function(t,i){var r,a,l,u=this,c={isFixed:!isNaN(parseInt(i,10)),x:t,y:i},d=u.element,f=u.options,p="down",h=e(f.anchor),y=d[0]&&d.hasClass("km-widget");if(!u.visible()){if(f.copyAnchorStyles&&(y&&"font-size"==N[0]&&N.shift(),d.css(n.getComputedStyles(h[0],N))),d.data("animating")||u._trigger(s))return;u._activated=!1,f.modal||(C.unbind(u.downEvent,u._mousedownProxy).bind(u.downEvent,u._mousedownProxy),o.mobileOS.ios||o.mobileOS.android||(u._scrollableParents().unbind(z,u._resizeProxy).bind(z,u._resizeProxy),O.unbind(F,u._resizeProxy).bind(F,u._resizeProxy))),u.wrapper=a=n.wrap(d,f.autosize).css({overflow:v,display:"block",position:g}),o.mobileOS.android&&a.css(H,"translatez(0)"),a.css(w),e(f.appendTo)[0]==document.body&&a.css(m,"-10000px"),r=E(!0,{},f.animation.open),u.flipped=u._position(c),r.effects=n.parseEffects(r.effects,u.flipped),p=r.effects.slideIn?r.effects.slideIn.direction:p,f.anchor!=_&&(l=T+"-"+p,d.addClass(T+"-"+n.directions[p].reverse),h.addClass(l).children(D).addClass(x).addClass(l)),d.data(k,r.effects).kendoStop(!0).kendoAnimate(r)}},position:function(){this.visible()&&this._position()},toggle:function(){var e=this;e[e.visible()?l:s]()},visible:function(){return this.element.is(":"+b)},close:function(t){var i,r,o,a,s=this,u=s.options;if(s.visible()){if(i=s.wrapper[0]?s.wrapper:n.wrap(s.element).hide(),s._closing||s._trigger(l))return;s.element.find(".k-popup").each(function(){var n=e(this),i=n.data("kendoPopup");i&&i.close(t)}),C.unbind(s.downEvent,s._mousedownProxy),s._scrollableParents().unbind(z,s._resizeProxy),O.unbind(F,s._resizeProxy),t?r={hide:!0,effects:{}}:(r=E(!0,{},u.animation.close),o=s.element.data(k),a=r.effects,!a&&!n.size(a)&&o&&n.size(o)&&(r.effects=o,r.reverse=!0),s._closing=!0),s.element.kendoStop(!0),i.css({overflow:v}),s.element.kendoAnimate(r)}},_trigger:function(e){return this.trigger(e,{type:e})},_resize:function(e){var t=this;"resize"===e.type?(clearTimeout(t._resizeTimeout),t._resizeTimeout=setTimeout(function(){t._position(),t._resizeTimeout=null},50)):(!t._hovered||t._activated&&t.element.hasClass("k-list-container"))&&t.close()},_mousedown:function(i){var r=this,o=r.element[0],a=r.options,s=e(a.anchor)[0],l=a.toggleTarget,u=n.eventTarget(i),c=e(u).closest(".k-popup"),d=c.parent().parent(".km-shim").length;c=c[0],(d||!c||c===r.element[0])&&"popover"!==e(i.target).closest("a").data("rel")&&(t(o,u)||t(s,u)||l&&t(e(l)[0],u)||r.close())},_fit:function(e,t,n){var i=0;return e+t>n&&(i=n-(e+t)),0>e&&(i=-e),i},_flip:function(e,t,n,i,r,o,a){var s=0;return a=a||t,o!==r&&o!==d&&r!==d&&(e+a>i&&(s+=-(n+t)),0>e+s&&(s+=n+t)),s},_scrollableParents:function(){return e(this.options.anchor).parentsUntil("body").filter(function(e,t){return n.isScrollable(t)})},_position:function(t){var i,r,s,l,u,c,d,f,p,m,h,v=this,_=v.element,b=v.wrapper,k=v.options,x=e(k.viewport),T=x.offset(),M=e(k.anchor),D=k.origin.toLowerCase().split(" "),S=k.position.toLowerCase().split(" "),C=v.collisions,O=o.zoomLevel(),z=10002,F=!!(x[0]==window&&window.innerWidth&&1.02>=O),A=0,H=document.documentElement,P=F?window.innerWidth:x.width(),N=F?window.innerHeight:x.height();if(F&&H.scrollHeight-H.clientHeight>0&&(P-=n.support.scrollbar()),i=M.parents().filter(b.siblings()),i[0])if(s=Math.max(+i.css("zIndex"),0))z=s+10;else for(r=M.parentsUntil(i),l=r.length;l>A;A++)s=+e(r[A]).css("zIndex"),s&&s>z&&(z=s+10);return b.css("zIndex",z),b.css(t&&t.isFixed?{left:t.x,top:t.y}:v._align(D,S)),u=a(b,w,M[0]===b.offsetParent()[0]),c=a(b),d=M.offsetParent().parent(".k-animation-container,.k-popup,.k-group"),d.length&&(u=a(b,w,!0),c=a(b)),x[0]===window?(c.top-=window.pageYOffset||document.documentElement.scrollTop||0,c.left-=window.pageXOffset||document.documentElement.scrollLeft||0):(c.top-=T.top,c.left-=T.left),v.wrapper.data(y)||b.data(y,E({},u)),f=E({},c),p=E({},u),m=k.adjustSize,"fit"===C[0]&&(p.top+=v._fit(f.top,b.outerHeight()+m.height,N/O)),"fit"===C[1]&&(p.left+=v._fit(f.left,b.outerWidth()+m.width,P/O)),h=E({},p),"flip"===C[0]&&(p.top+=v._flip(f.top,_.outerHeight(),M.outerHeight(),N/O,D[0],S[0],b.outerHeight())),"flip"===C[1]&&(p.left+=v._flip(f.left,_.outerWidth(),M.outerWidth(),P/O,D[1],S[1],b.outerWidth())),_.css(w,g),b.css(p),p.left!=h.left||p.top!=h.top},_align:function(t,n){var i,r=this,o=r.wrapper,s=e(r.options.anchor),l=t[0],u=t[1],c=n[0],f=n[1],m=a(s),g=e(r.options.appendTo),v=o.outerWidth(),_=o.outerHeight(),y=s.outerWidth(),w=s.outerHeight(),b=m.top,k=m.left,x=Math.round;return g[0]!=document.body&&(i=a(g),b-=i.top,k-=i.left),l===h&&(b+=w),l===d&&(b+=x(w/2)),c===h&&(b-=_),c===d&&(b-=x(_/2)),u===p&&(k+=y),u===d&&(k+=x(y/2)),f===p&&(k-=v),f===d&&(k-=x(v/2)),{top:b,left:k}}});i.plugin(I)}(window.kendo.jQuery),function(e,t){function n(t){var n=t.parseFormats,i=t.format;N.normalize(t),n=e.isArray(n)?n:[n],n.length||n.push("yyyy-MM-dd"),-1===e.inArray(i,n)&&n.splice(0,0,t.format),t.parseFormats=n}function i(e){e.preventDefault()}var r,o=window.kendo,a=o.ui,s=a.Widget,l=o.parseDate,u=o.keys,c=o.template,d=o._activeElement,f="
",p="",m=".kendoDatePicker",h="click"+m,g="open",v="close",_="change",y="disabled",w="readonly",b="k-state-default",k="k-state-focused",x="k-state-selected",T="k-state-disabled",M="k-state-hover",D="mouseenter"+m+" mouseleave"+m,S="mousedown"+m,C="id",O="min",z="max",F="month",A="aria-disabled",H="aria-expanded",E="aria-hidden",P="aria-readonly",N=o.calendar,I=N.isInRange,V=N.restrictValue,W=N.isEqualDatePart,R=e.extend,Y=e.proxy,U=Date,L=function(t){var n,i=this,r=document.body,s=e(f).attr(E,"true").addClass("k-calendar-container").appendTo(r);i.options=t=t||{},n=t.id,n&&(n+="_dateview",s.attr(C,n),i._dateViewID=n),i.popup=new a.Popup(s,R(t.popup,t,{name:"Popup",isRtl:o.support.isRtl(t.anchor)})),i.div=s,i.value(t.value)};L.prototype={_calendar:function(){var t,n=this,r=n.calendar,s=n.options;r||(t=e(f).attr(C,o.guid()).appendTo(n.popup.element).on(S,i).on(h,"td:has(.k-link)",Y(n._click,n)),n.calendar=r=new a.Calendar(t),n._setOptions(s),o.calendar.makeUnselectable(r.element),r.navigate(n._value||n._current,s.start),n.value(n._value))},_setOptions:function(e){this.calendar.setOptions({focusOnNav:!1,change:e.change,culture:e.culture,dates:e.dates,depth:e.depth,footer:e.footer,format:e.format,max:e.max,min:e.min,month:e.month,start:e.start})},setOptions:function(e){var t=this.options;this.options=R(t,e,{change:t.change,close:t.close,open:t.open}),this.calendar&&this._setOptions(this.options)},destroy:function(){this.popup.destroy()},open:function(){var e=this;e._calendar(),e.popup.open()},close:function(){this.popup.close()},min:function(e){this._option(O,e)},max:function(e){this._option(z,e)},toggle:function(){var e=this;e[e.popup.visible()?v:g]()},move:function(e){var n=this,i=e.keyCode,r=n.calendar,o=e.ctrlKey&&i==u.DOWN||i==u.ENTER;if(e.altKey)i==u.DOWN?(n.open(),e.preventDefault()):i==u.UP&&(n.close(),e.preventDefault());else if(n.popup.visible()){if(i==u.ESC||o&&r._cell.hasClass(x))return n.close(),e.preventDefault(),t;n._current=r._move(e)}},current:function(e){this._current=e,this.calendar._focus(e)},value:function(e){var t=this,n=t.calendar,i=t.options;t._value=e,t._current=new U(+V(e,i.min,i.max)),n&&n.value(e)},_click:function(e){-1!==e.currentTarget.className.indexOf(x)&&this.close()},_option:function(e,t){var n=this,i=n.calendar;n.options[e]=t,i&&i[e](t)}},L.normalize=n,o.DateView=L,r=s.extend({init:function(t,i){var r,a,u=this;s.fn.init.call(u,t,i),t=u.element,i=u.options,i.min=l(t.attr("min"))||l(i.min),i.max=l(t.attr("max"))||l(i.max),n(i),u._initialOptions=R({},i),u._wrapper(),u.dateView=new L(R({},i,{id:t.attr(C),anchor:u.wrapper,change:function(){u._change(this.value()),u.close()},close:function(e){u.trigger(v)?e.preventDefault():(t.attr(H,!1),a.attr(E,!0))},open:function(e){var n,i=u.options;u.trigger(g)?e.preventDefault():(u.element.val()!==u._oldText&&(n=l(t.val(),i.parseFormats,i.culture),u.dateView[n?"current":"value"](n)),t.attr(H,!0),a.attr(E,!1),u._updateARIA(n))}})),a=u.dateView.div,u._icon();try{t[0].setAttribute("type","text")}catch(c){t[0].type="text"}t.addClass("k-input").attr({role:"combobox","aria-expanded":!1,"aria-owns":u.dateView._dateViewID}),u._reset(),u._template(),r=t.is("[disabled]")||e(u.element).parents("fieldset").is(":disabled"),r?u.enable(!1):u.readonly(t.is("[readonly]")),u._old=u._update(i.value||u.element.val()),u._oldText=t.val(),o.notify(u)},events:[g,v,_],options:{name:"DatePicker",value:null,footer:"",format:"",culture:"",parseFormats:[],min:new Date(1900,0,1),max:new Date(2099,11,31),start:F,depth:F,animation:{},month:{},dates:[],ARIATemplate:'Current focused date is #=kendo.toString(data.current, "D")#'},setOptions:function(e){var t=this,i=t._value;s.fn.setOptions.call(t,e),e=t.options,e.min=l(e.min),e.max=l(e.max),n(e),t.dateView.setOptions(e),i&&(t.element.val(o.toString(i,e.format,e.culture)),t._updateARIA(i))},_editable:function(e){var t=this,n=t._dateIcon.off(m),r=t.element.off(m),o=t._inputWrapper.off(m),a=e.readonly,s=e.disable;a||s?(o.addClass(s?T:b).removeClass(s?b:T),r.attr(y,s).attr(w,a).attr(A,s).attr(P,a)):(o.addClass(b).removeClass(T).on(D,t._toggleHover),r.removeAttr(y).removeAttr(w).attr(A,!1).attr(P,!1).on("keydown"+m,Y(t._keydown,t)).on("focusout"+m,Y(t._blur,t)).on("focus"+m,function(){t._inputWrapper.addClass(k)}),n.on(h,Y(t._click,t)).on(S,i))},readonly:function(e){this._editable({readonly:e===t?!0:e,disable:!1})},enable:function(e){this._editable({readonly:!1,disable:!(e=e===t?!0:e)})},destroy:function(){var e=this;s.fn.destroy.call(e),e.dateView.destroy(),e.element.off(m),e._dateIcon.off(m),e._inputWrapper.off(m),e._form&&e._form.off("reset",e._resetHandler)},open:function(){this.dateView.open()},close:function(){this.dateView.close()},min:function(e){return this._option(O,e)},max:function(e){return this._option(z,e)},value:function(e){var n=this;return e===t?n._value:(n._old=n._update(e),null===n._old&&n.element.val(""),n._oldText=n.element.val(),t)},_toggleHover:function(t){e(t.currentTarget).toggleClass(M,"mouseenter"===t.type)},_blur:function(){var e=this,t=e.element.val();e.close(),t!==e._oldText&&e._change(t),e._inputWrapper.removeClass(k)},_click:function(){var e=this,t=e.element;e.dateView.toggle(),o.support.touch||t[0]===d()||t.focus()},_change:function(e){var t=this;e=t._update(e),+t._old!=+e&&(t._old=e,t._oldText=t.element.val(),t.element.trigger(_),t.trigger(_))},_keydown:function(e){var t=this,n=t.dateView,i=t.element.val();n.popup.visible()||e.keyCode!=u.ENTER||i===t._oldText?(n.move(e),t._updateARIA(n._current)):t._change(i)},_icon:function(){var t,n=this,i=n.element;t=i.next("span.k-select"),t[0]||(t=e('select').insertAfter(i)),n._dateIcon=t.attr({role:"button","aria-controls":n.dateView._dateViewID})},_option:function(e,n){var i=this,r=i.options;return n===t?r[e]:(n=l(n,r.parseFormats,r.culture),n&&(r[e]=new U(+n),i.dateView[e](n)),t)},_update:function(e){var t,n=this,i=n.options,r=i.min,a=i.max,s=n._value,u=l(e,i.parseFormats,i.culture),c=null===u&&null===s||u instanceof Date&&s instanceof Date;return+u===+s&&c?(t=o.toString(u,i.format,i.culture),t!==e&&n.element.val(null===u?e:t),u):(null!==u&&W(u,r)?u=V(u,r,a):I(u,r,a)||(u=null),n._value=u,n.dateView.value(u),n.element.val(u?o.toString(u,i.format,i.culture):e),n._updateARIA(u),u)},_wrapper:function(){var t,n=this,i=n.element;t=i.parents(".k-datepicker"),t[0]||(t=i.wrap(p).parent().addClass("k-picker-wrap k-state-default"),t=t.wrap(p).parent()),t[0].style.cssText=i[0].style.cssText,i.css({width:"100%",height:i[0].style.height}),n.wrapper=t.addClass("k-widget k-datepicker k-header").addClass(i[0].className),n._inputWrapper=e(t[0].firstChild)},_reset:function(){var t=this,n=t.element,i=n.attr("form"),r=i?e("#"+i):n.closest("form");r[0]&&(t._resetHandler=function(){t.value(n[0].defaultValue),t.max(t._initialOptions.max),t.min(t._initialOptions.min)},t._form=r.on("reset",t._resetHandler))},_template:function(){this._ariaTemplate=c(this.options.ARIATemplate)},_updateARIA:function(e){var t,n=this,i=n.dateView.calendar;n.element.removeAttr("aria-activedescendant"),i&&(t=i._cell,t.attr("aria-label",n._ariaTemplate({current:e||i.current()})),n.element.attr("aria-activedescendant",t.attr("id")))}}),a.plugin(r)}(window.kendo.jQuery),function(e,t){function n(e,t,n){var i,r=e.getTimezoneOffset();e.setTime(e.getTime()+t),n||(i=e.getTimezoneOffset()-r,e.setTime(e.getTime()+i*H))}function i(){var e=new q,t=new q(e.getFullYear(),e.getMonth(),e.getDate(),0,0,0),n=new q(e.getFullYear(),e.getMonth(),e.getDate(),12,0,0);return-1*(t.getTimezoneOffset()-n.getTimezoneOffset())}function r(e){return 60*e.getHours()*H+e.getMinutes()*H+1e3*e.getSeconds()+e.getMilliseconds()}function o(e,t,n){var i,o=r(t),a=r(n);return e&&o!=a?(i=r(e),o>i&&(i+=E),o>a&&(a+=E),i>=o&&a>=i):!0}function a(e){var t=e.parseFormats;e.format=m(e.format||c.getCulture(e.culture).calendars.standard.patterns.t),t=B(t)?t:[t],t.splice(0,0,e.format),e.parseFormats=t}function s(e){e.preventDefault()}var l,u,c=window.kendo,d=c.keys,f=c.parseDate,p=c._activeElement,m=c._extractFormat,h=c.support,g=h.browser,v=c.ui,_=v.Widget,y="open",w="close",b="change",k=".kendoTimePicker",x="click"+k,T="k-state-default",M="disabled",D="readonly",S="li",C="",O="k-state-focused",z="k-state-hover",F="mouseenter"+k+" mouseleave"+k,A="mousedown"+k,H=6e4,E=864e5,P="k-state-selected",N="k-state-disabled",I="aria-selected",V="aria-expanded",W="aria-hidden",R="aria-disabled",Y="aria-readonly",U="aria-activedescendant",L="id",B=e.isArray,$=e.extend,j=e.proxy,q=Date,J=new q;J=new q(J.getFullYear(),J.getMonth(),J.getDate(),0,0,0),l=function(t){var n=this,i=t.id;n.options=t,n.ul=e('
'+b[n]+"
","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("